web-dev-qa-db-ja.com

1つのgitリポジトリを他のいくつかのリポジトリにリンクする方法は?

1つのgitリポジトリを他のいくつかのリポジトリにリンクする方法

次のリポジトリがあると仮定します。

/ var/Common.git

/ var/Project1.git

/ var/Project2.git

今、他のリポジトリでCommon.gitを使用したいと思います。どうすればできますか?

25
Behrouz.M

あなたはおそらく 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の更新をプロジェクトにマージして戻すことができます。 。

40
Cascabel

これは、git submoduleが設計されました: http://git-scm.com/docs/git-submodule

Project1およびProject2内で、Commonのサブモジュールを追加します。そして、あなたはgit submodule checkout

複製されたリポジトリには、共通gitのハッシュのみが格納されます。だからあなたはgit submodule initとチェックアウト。

5
Lakshman Prasad