2013-05-16 20 views
6

SubGitをSVNからGitに移行する方法としてテストしています。SubGit:ブランチを除外する方法は?

gitリポジトリにリモートブランチを作成してすべてのユーザが使用できるようにするには、に戻ってSVNに同期してください。

私は、SubGitがマスターブランチを追跡してSVNに同期して、他のGitブランチを自由に使用して共有できるようにしたいだけです。

これを行う簡単な方法はありますか? SubGitが他の枝を無視してマスタートランクを同期しますので、レフリー/ヘッド/ SubGit configurationでマッピングをマスター:

は理想的なソリューションがトランクを指定することになるあなたに

答えて

7

ありがとうございます。

残念ながら、SubGitでは現在のところ、バージョン1.0.xと2.0.xの少なくとも1つのブランチマッピングが必要です。あなたはすべてのGitのブランチを同期するつもりはないので、問題を回避するためにいくつかの特別な名前空間を使用することを検討して、

trunk = trunk:refs/heads/master 
branches = branches/*:refs/heads/* 
shelves = shelves/*:refs/shelves/* 
tags = tags/*:refs/tags/* 

:それは1つが、このようなものを指定する必要があり、ある

trunk = trunk:refs/heads/master 
branches = branches/*:refs/gitsvn/heads/* 
... 

ので、 1人がマスターセントラルGitリポジトリに分岐すると、トランクに変換されます。しかし、ブランチfooをプッシュすると、refs/heads/fooが同期範囲外であるため、SubGitはそのブランチを無視します。

トラブルがマージから来るコミット:Aはfooのにマスターブランチをマージした結果であるコミットあれば、あなたがしたい場合は、SubGitがコミットAの対応する親のためのSubversion側の枝/ fooのを作成します*枝にSubGit生成された枝を含まないことを好む/ **名前空間には、同様のSubversion側でいくつかの特別な枝を使用することを検討してください:

trunk = trunk:refs/heads/master 
branches = gitsvn/branches/*:refs/gitsvn/heads/* 
shelves = shelves/*:refs/shelves/* 
tags = gitsvn/tags/*:refs/gitsvn/tags/* 

この場合gitsvn /支店に送られるべきであるコミットの同じ親を/ foo支店。

これは現時点で入手可能な最良のソリューションです。また、理想的なソリューションを提供するバージョン2.1の機能要求もありますが、実装するまでには時間がかかります。 SubGit 3.0上

更新:

バージョン3.0以降。0(早期アクセスステージ現時点では、http://subgit.com/eapでダウンロード)SubGitは、単一の分岐レイアウトをサポートしていますので、次のようにコンフィギュレーションファイルが見えることがあります。

  1. ノートランク、ノー枝、タグなしなし棚:

    [svn] 
        url = http://host.com/repos/project 
    

    この場合、プロジェクトディレクトリは、マスターブランチのGitリポジトリに直接マップされています。 SubGitは他のブランチを無視し、棚を作成せず、匿名のGitブランチはSVNに同期されません。

  2. シングルトランク、何の棚:この場合

    [svn] 
        url = http://host.com/repos/project 
        trunk = trunk:refs/heads/master 
    

    プロジェクト/トランクディレクトリがGitのリポジトリにマスターブランチにマッピングされていません。 SubGitは他のブランチを無視し、シェルフを作成しません。棚付き

  3. シングルトランク:この場合

    [svn] 
        url = http://host.com/repos/project 
        trunk = trunk:refs/heads/master 
        shelves = shelves/*:refs/shelves/* 
    

    プロジェクト/トランクディレクトリがGitのリポジトリにマスターブランチにマッピングされています。 SubGitは他のブランチを無視しますが、バージョン1.0.xと2.0.xではデフォルトで匿名ブランチをシェルフに変換します。

希望します。

+0

返信いただきありがとうございます。私はその間にそれをやり遂げてきました。そして、私のgit-onlyブランチ(fooなど)を離れた離れた裸のリポジトリに入れてから、必要に応じてfooをマスターにマージしてから、同期リポジトリに戻します –

+0

上記の「理想的な解決策」はどのように進んでいますか?私はgitブランチを持たないようにしたいので、[新しい質問](http://stackoverflow.com/questions/22377071/subgit-avoid-to-synchronize-git-branches-onto-svn)をこの1つに関連づけました。 svnに反映されます。ありがとう – ThanksForAllTheFish

+0

まだ進行中です。このようなレイアウトはsvn-to-gitの方向では完全にサポートされていますが、GitコミットをSVNリビジョンに変換する際に扱わなければならないエッジケースがあります。とにかく、この機能は現在のところ私たちの優先リストの一番上にあります。 – vadishev

関連する問題