10

だから私は2つのgitリポジトリを持っています。1 つ目はフレームワーク (データベースの抽象化、関数を考えてください) で、次に新しいプロジェクトの別の 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/でしょうか?

4

1 に答える 1

24

Git のサブモジュールのサポートを調べることができます。サブモジュールを使用すると、ある git リポジトリを別の git リポジトリ内に埋め込むことができます。この種の代替ソリューションはありますが、私自身は使用していません。

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

$ 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) を参照してください。

サブモジュールに変更が加えられた場合は、次のようにします。

# 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"

git は特定のサブモジュールに関連付けられた特定のコミットの記録を保持するため、最後の手順が必要です (そのため、誰かが親を複製すると、サブモジュールの最新のリビジョンではなく、そのバージョンのサブモジュールが取得される可能性があります)。親リポジトリで意図したとおりに動作するのを妨げる重大な変更が行われている)。したがって、サブモジュールを更新する場合は、新しいコミットを親に記録する必要があります。

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

于 2012-04-26T00:15:45.390 に答える