2012-04-26 14 views
8

私は2つのgit reposを持っています。最初は、私たちのフレームワーク(db抽象化、関数を考える)と、新しいプロジェクトのための別のgit repoです。gitリポジトリをネストする方法。フェッチとマージ

私はプロジェクトのgitにフレームワークのGitのレポを含めると、GitHubのヘルプによると、これは動作するはずです:

cd /project 
git remote add framework git://github.com/username/Framework.git 
git fetch framework 
git merge framework/master 

問題は、私はマージを行うとき、それはすべてのファイルからすべてをもたらし、ありますプロジェクトのルートに単純にダンプします。その代わりに、フレームワークファイルを/project/framework/のような子ディレクトリにマージするにはどうすればいいですか?

答えて

20

Gitのsubmoduleのサポートを調べることができます。サブモジュールを使うと、1つのgitリポジトリを別のgitリポジトリに埋め込むことができます。この種のものにはalternative solutionsがありますが、私はそれらを自分で使っていません。

例は次のようになります。

$ git clone git://github.com/username/project.git 
$ cd project 
$ git submodule add git://github.com/username/framework.git framework 
$ git commit -m "added framework submodule" 

あなたがサブモジュールでリポジトリをクローンしている場合、あなたは--recursiveオプションを使用する必要があります:

$ git clone --recursive git://<repository-with-submodules>.git 

またはその代わりに、あなたは定期的に複製することができますし、次に実行してください:

$ git submodule init 
$ git submodule update 

リンクされたドキュメント(およびgit submodule --help)を参照してください。

変更はサブモジュールに行われた場合、あなたはこのようにそれらを持ち込む:Gitはそのようにするとき誰も与えられたサブモジュール(と関連するコミット特定の記録を保持しているため

# first update the submodule just like any other git repository 
$ cd project/framework 
$ git pull 

# now you have to record the new commit in the parent repository 
$ cd .. 
$ git commit -m "updated framework submodule" 

最後のステップが必要です親リポジトリで意図したとおりに動作しないようにする、最新のリビジョンではなく、サブバージョンのそのサブバージョンを取得します。したがって、サブモジュールを更新する場合は、新しいコミットを親に記録する必要があります。

frameworkサブモジュール内で変更を加えた場合は、他のリポジトリと同じようにgit pushとなります。親モジュールで新しいリビジョンをコミットする必要があります。

+0

フレームワークに変更が加えられたら、どのようにプロジェクトにそれらのモジュールを追加するのですか?また、プロジェクトの代わりにフレームワークを変更した場合、それらをFramework git repoにどのように戻すのですか? – Justin

+0

私は自分の答えを更新しました。 – larsks

+0

小さなメモが1つあります。サブモジュールHEADは取り外されているため、サブモジュールを変更する際には注意が必要です。ブランチを作成(またはブランチに切り替える)し、変更を加え、コミットしてから押します。 – GoZoner

関連する問題