2010-12-08 9 views
0

私は非常に乱雑な履歴を持つ非常に大きなSubversionリポジトリを使って作業しています。それは標準のディレクトリレイアウトを持っていますが、別の理由のために私はgit svn cloneを使ってクローンを作成できません。それを〜2日間実行したままにしておくと、無限ループに陥るように見えるので、完全なリポジトリのクローンを中止しました。Git SVNを使ってブランチだけを追跡するには?

リポジトリには、メイン開発ブランチ/branchs/devがあり、そのブランチから数多くの機能ブランチがあります。 gitのマスターブランチトラッキングdevと各機能のブランチを、標準のgitリモートブランチでブランチするだけです。

今まで私はdevブランチと各フィーチャーブランチ用に別々のGitリポジトリを作成していました。私はそれらをすべて取得する必要はないと思っていたので、各ブランチから最後のn個のコミットだけを取得します(さらに、 'dev'ブランチは理論的には「トランク」にはなりません)。ここで私が使用したものです...

$ git svn init <full svn branch url> <dir name> 
$ cd <dir name> 
$ git svn fetch -r <start rev>:HEAD (where <start rev> is either the last or some recent commit on the branch) 

この方法を使用すると、各支店が孤立して良好に動作することができますが、それは私が機能ブランチおよびその逆までDEVからマージするgitのを使用することはできません。

「dev」と機能ブランチを1つのリポジトリ内で追跡するにはどうすればよいですか?

答えて

1

私はこれを試してみる機会がなかったが、git svn cloneはあなたが

git svn clone --trunk=branches/dev --branches=branches/dev/features http://svn.foo.com/svn/project 

かのような何かを行うことができる必要がありますので、あなたは、--branches=--trunk=オプションと枝と幹のディレクトリを指定することができますあなたの設定はです。また、git-svn man pageには、すべてのブランチが1つのディレクトリに該当しない場合に複数の--branchesタグを使用できると記載されています。

編集:明確にするために、トランクとして指定したものをチェックアウトし、gitリポジトリのマスターブランチにします。他の機能ブランチの1つで作業したい場合は、そのブランチを取得するには

git checkout -b local/branch_name remote_branch_name 

を実行します。 --branches=のオプションをgit svn cloneにすると、上記のようなコマンドを実行したときに、どこに分岐があるかをgitに伝えるだけです。

+1

ありがとうございます。私はあなたの提案をテストSVNリポジトリでテストしました。それは問題です。SVNリポジトリの主な問題は、devブランチが何度も分岐してクローンを試みていることが証明されているためです。事実上不可能です。それはあなたの提案はまだ感謝の意を表します。 – Adrian

+0

パラメータ--trunkのヒントは、私の頭痛の多くを保存しました。ありがとう! – fschmitt

関連する問題