「git svn」を使用して、非標準の分岐規則で大規模な SVN リポジトリとやり取りしています。ここで指摘されているように、svn リポジトリ / ブランチを複製する方法は複数あることがわかります
私は本当に異なる動作を見ています:
SVN リポジトリが次のようになっているとします。
http://svn.mycom.com/svn/Project
-->trunk
-->defects
-->uat
生産は「幹」、枝は「欠陥」、現在の開発は「uat」です。
そうは言っても、私は次のことができます
1. 直接 uat を複製します。
$ git svn clone http://svn.mycom.com/svn/Project/uat
これを行うと、.git/config ファイルは次のようになります。
[svn-remote "svn"]
url = http://svn.mycom.com/svn/Project/uat
fetch = :refs/remotes/trunk
次に、ここで説明されているようにブランチを追加しました。 私の .git/config は次のようになります。
[svn-remote "svn"]
url = http://svn.mycom.com/svn/Project/uat
fetch = :refs/remotes/trunk
[svn-remote "task1"]
url = http://svn.mycom.com/svn/Project/defects/task1
fetch = :refs/remotes/task1
今私が走るとき
$git log --decorate --all --graph
新しいブランチにはコミットが 1 つしかないことがわかります。ブランチ作成をマスターする実際の履歴とは関係ありません。以前のコミットとは関係なく、独自の履歴行が表示されます。
2. -T を使用してクローンを作成し、ブランチを追加する 私が見つけた別の解決策は次のとおりです。
$git svn clone http://svn.mycom.com/svn/Project/ -T uat Project --no-minimize-url
Since the "Defects" has lot many branches, and it would take hours, i then did:
[svn-remote "svn"]
url = http://svn.mycom.com/svn/Project
fetch = uat:refs/remotes/trunk
branches = defects/{task1}:refs/branches/*
これはうまく機能しているようで、履歴を取得しています。どちらか一方のオプションからもう一方のオプションへの移行について考える必要がある場合、2 つのより良い方法は何なのか疑問に思っています。ただし、このオプションでは、別のブランチを追加する必要がある場合、ブランチ = 欠陥/{タスク 1,タスク 2} のようにカンマ区切りのリストでブランチ セクションと新しいブランチ名を単純に編集することはできません。これは機能しません。GIT の欠陥のように感じます。次に、ブランチの下に別のフェッチ行を追加するだけです
[svn-remote "svn"]
url = http://svn.mycom.com/svn/Project
fetch = uat:refs/remotes/trunk
branches = defects/{task1}:refs/branches/*
fetch = defects/task2:refs/branches/task2
これは正常に機能します。ブランチ履歴を取得し、問題なしで切り替えることができます。しかし、ハックのように感じます。きれいに見えるブランチリストに追加する方法があればいいのにと思います。