2012-02-22 7 views
5

私はGitにはかなり新しくなっています。私はSVNから来て、本当に強力なthe:外部機能を発見しました。gitリポジトリ内のサブツリーを押しています

  • サブモジュールは必ずしも必要とされていないプロジェクトのモジュールを追加するために完全である:ここではGitの中で私が似た何かを見つけることがあります。それらはレポクローン作成後に初期化されなければならず、元のプロジェクトのサブディレクトリのみを含めることはできません。
  • サブツリーは本当にライブラリーを追加するのに適しています(サブディレクトリーも含めることができます)。しかし、それらを押すことは本当の苦痛です。

シナリオは次のとおりです。私はいくつかのライブラリを含めるプロジェクトを持っています。これらのライブラリをすべて変更し、独自のreposでそれらをプッシュする可能性を望みます。さらに、このライブラリのいくつかは、より大きなプロジェクトのサブディレクトリです(たとえば、プロジェクトにデモやreadmeファイルも含まれている場合、私はそれらのディレクトリをプロジェクトに含めません)。

どうすればいいですか?

私が試してみた:

さてあなたは、この点に達した場合、今の私の結論ですので、あなたの忍耐に感謝が、今私は、しようとする何か他のものが欲しいです:コメントから発言の

+0

http://stackoverflow.com/questions/3131912/why-are-git-submodules-incompatible-with-svn-externals/3132221#3132221:gitサブモジュールと外部はまったく異なります。しかし、サブモジュールのコンテンツを変更して、そのリポジトリにプッシュすることができます:http://stackoverflow.com/questions/1979167/git-submodule-update/1979194#1979194基本的には、私の答えはhttp://stackoverflow.com/questions/9394286/planning-repository-layout-for-git-migration/9395375#9395375 – VonC

+0

と同じになります。ありがとう...私は間違っています)サブモジュールでは、特定のサブモジュールディレクトリだけを「インクルード」できませんか?私のサブモジュールには、デモとソースの2つのディレクトリがあり、私の親プロジェクトにソースコンテンツを_only_含むようにしたいと思っています。... –

+0

正しい:サブモジュールは独自のgitリポジトリです。すべて。スパースチェックアウトは可能ですが(http://stackoverflow.com/a/2467629/6309)、推奨されていません。シンボリックリンクを使用して、あなたが見たいものだけをリンクする方が良いです。 – VonC

答えて

3

カップルC_C「押しサブツリーはGitのでは許されません」:

だから私はお勧め:順序内の他の場所でサブモジュール(またはサブモジュールのサブディレクトリへのシンボリックリンクで正しい構造を、作成

  • ロード(Gitのチェックアウト)親レポとそのすべてのサブモジュール
  • 定期的にgit ain親リポジトリに戻って、すべてのサブモジュールmodifをコミットしてプッシュし、コミットしてコミットするために、変更(Gitの外に作成された他のディレクトリ構造からのドーン)を検出します。親リポジトリをプッシュします。

Gitチェックアウト

parent repo 
    + 
    +--> main project 
    + 
    +-> mainDir1 
    +-> mainDir2 
    +--> lib1 
    + 
    +-> lib1Dir1 
    +-> lib1Dir2 
    +--> lib2 
    + 
    +-> lib2Dir1 
    +-> lib2Dir2 

そして、(例えば)あなた自身のプロジェクトのディレクトリ構造

+--> main project (symlink to ../parent/main project) 
    + 
    +-> mainDir1 
    +-> mainDir2 
    +-> lib1Dir1 (symlink to ../parent/lib1/lib1Dir1) 
    +-> lib1Dir2 (symlink to ../parent/lib1/lib1Dir2) 
    +-> lib2Dir2 (symlink to ../parent/lib1/lib2Dir2) 

(例えば何lib2Dir1は(ありません注意してください)あなたの実際のプロジェクトでは、あなたはドンので」それが必要です)

+0

ありがとうございます、あなたの答えは私が考えたことがない素晴らしいアイデアです。しかし、今私はそれが私が探しているものではないことを理解している...私は意味:あなたのソリューションで、私はsymlinksを行う必要があるプロジェクトをクローンしたいので、それは私がしたいターンキーソリューションではない提供する。はい、サブツリーを使った私の以前のソリューションよりはるかに簡単ですが、今はこれがGitの "不足"だと思うでしょうか?あなたの忍耐のために多くのおかげでBTW! –

1

VonCのソリューションはきちんとしていますが、欠点があります: ある時点であなたのプロジェクト+ライブラリの設定をキャプチャするodの方法。

プロジェクトをもう一度設定する必要がある場合は、プロジェクト+ライブラリをチェックアウトする必要がありますが、それらはすべて別のブランチにあり、以前のものにコミットする可能性があります。

VonCの提案に従えば、プロジェクトのリリース時に各レポジスにタグを作成し、少なくとも同じポイントで再度チェックアウトすることができます。

それ以外の場合は、常に前方に移動し、古いバージョンをチェックアウトしないでください。

関連する問題