2

「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

これは正常に機能します。ブランチ履歴を取得し、問題なしで切り替えることができます。しかし、ハックのように感じます。きれいに見えるブランチリストに追加する方法があればいいのにと思います。

4

2 に答える 2

1

私は2番目の方法を使用し、好みます。これは、IMOが正しい方法です。2 番目の方法では、リポジトリのすべての履歴を取得し、必要なブランチを簡単に切り替えることができます。また、最初の方法では、新しいブランチをローカルに作成してからコミットする場合、いくつかの問題が発生すると思いますSVN

于 2013-04-08T16:01:31.923 に答える
0

数日間使用した後、機能した最適なオプションはオプション #2 です。

注: 後で作成された新しいブランチに「fetch」行を追加する代わりに。リストの最初に新しいブランチ名を追加すると、うまくいくことがわかりました。新しいブランチ情報が引っ張られました。

[svn-remote "svn"]
 url = http://svn.mycom.com/svn/Project
 fetch = uat:refs/remotes/trunk
 branches = defects/{task2,task1}:refs/branches/*

これを行ってもブランチがプルされない場合は、単に「.git/svn/.metadata」フォルダーを削除して実行します

git svn fetch

基本的に、情報をもう一度フェッチしますが、少なくともきれいに見えます。fetch 行を追加しても問題ありません。個人的にはどちらでも構いません。細心の注意を払っている場合は、上記のようにブランチを追加できます。

于 2013-04-11T17:48:57.627 に答える