1つのgitリポジトリを他のいくつかのリポジトリにリンクする方法
次のリポジトリがあると仮定します。
/ var/Common.git
/ var/Project1.git
/ var/Project2.git
今、他のリポジトリでCommon.gitを使用したいと思います。どうすればできますか?
あなたはおそらく submodules を探しています:
サブモジュールを使用すると、外部リポジトリをソースツリーの専用サブディレクトリに埋め込み、常に特定のコミットを指すようにすることができます。
embeddedというキーワードがあります。Common.gitの実際のクローンは、他の各プロジェクト内に埋め込まれます。これは通常、他のプロジェクト内で変更せず、1つのバージョンを使用し、そのバージョンを元のCommon.gitから時々更新する場合に適しています。あなたはこのようなことをするでしょう:
# add Common.git as a submodule at the path "common" inside this repo
git submodule add /var/Common.git common
# initialize it, clone, and check out a copy
git submodule update --init
# commit the addition of the submodule
git commit
サブモジュールへのパスはリポジトリにコミットされるので、公開されているURLを使用する必要があることに注意してください。ローカルでカスタマイズする場合は、git submodule init
を実行し、.git/configでURLを編集してから、git submodule update
を実行します。さらに質問がある場合は、マンページを参照するか、SOを検索してください。ここにはサブモジュールに関する質問がたくさんあります。
一方、各プロジェクト内のCommon.gitの内容を編集する場合は、gitのサブツリーマージ機能のフレンドリーなラッパーである git-subtree を使用することができます。 。これにより、commit.gitのコンテンツを各プロジェクト内の追跡されたコンテンツと見なし、コミットを分割してCommon.git自体にマージし、Common.gitの更新をプロジェクトにマージして戻すことができます。 。
これは、git submodule
が設計されました: http://git-scm.com/docs/git-submodule
Project1およびProject2内で、Commonのサブモジュールを追加します。そして、あなたはgit submodule checkout
複製されたリポジトリには、共通gitのハッシュのみが格納されます。だからあなたはgit submodule init
とチェックアウト。