1

さまざまなプロジェクトで共有されるモジュールを含む「共通」ディレクトリを持つ既存の SVN リポジトリがあります。レイアウトは次のようになります。

http://example.com/svn/trunk/common/module_1
http://example.com/svn/trunk/common/module_2
...
http://example.com/svn/trunk/common/module_X

さまざまな理由から、私は git を使用して他のいくつかのプロジェクトを管理しています。SVN プロジェクトと git プロジェクトの両方でmodule_Xを使用する必要があるため、git-svn を使用する予定です。ただし、次の問題が発生します。

user@host:/repos$ git svn clone http://example.com/svn/trunk/common/module_X destination

このコマンドは、 /repos/destinationに新しい git リポジトリを作成し、そこにmodule_Xコンテンツをフェッチします。私が達成する必要があるのは、module_X/repos/destination/module_Xに配置することであり、そのコンテンツを/repos/destination/に直接フェッチすることではありません。

最初にオプションのように見えたのは、使用することでした

user@host:/repos$ git svn clone =--ignore-paths='^((?!module_X).*)$' http://example.com/svn/trunk/common/ destination

/repos/destinationにリポジトリを作成し、サブディレクトリ/repos/destination/module_Xを作成します。しかし、問題は、私の SVN リポジトリにはかなり大きなリビジョン履歴があり、common/パス全体の操作がかなり遅いことです。

これを達成する方法を知っている人はいますか?

4

1 に答える 1

0

簡単な答え: できない、またはしたくない。Git は複数のプロジェクトをホストするように設計されていないため、独立したサブディレクトリを複製し、1 つの git == 1 つのプロジェクトになります。あなたはそれを行うことができますが(非常に洞察に満ちた回答を見てください:Gitリポジトリのみのサブディレクトリをクローンするにはどうすればよいですか?)、更新を最新に保つためのすべての機能を失います.

試してみることができるハックが1つあるかもしれません.git-svnにあなたが持っている各モジュールのブランチを作成するように指示することです.ここに良い例があります: Cloning a Non-Standard Svn Repository with Git- Svn :

% git svn clone https://svn.myrepos.com/myproject myproject --ignore-paths='^((?!common).*)$' --trunk=trunk/ --branches=trunk/common/* --prefix=svn/

(未テスト)

于 2012-05-20T13:33:24.057 に答える