外部リポジトリサブモジュールを使用するようにgitプロジェクトを設定するにはどうすればよいですか?


213

リモートリポジトリを取り込むリポジトリを作成したいのですが。

たとえば、サブモジュールとしてjQueryがあるとします。

git://github.com/jquery/jquery.git

jQueryをサブモジュールとしてリポジトリを作成し、自分の外部をリモートリポジトリとして追加するプロセスはどうなるでしょうか。

また、これがセットアップされたら、自分のリモートにプッシュ/プルした場合、外部はそのまま残りますか?


1
「プルイン」と言うときは、jQueryリポジトリを自分のリポジトリのサブモジュールにしたいということですか?
ezod

はい、はっきりしていません。自分のリモコンに変更をプッシュおよびプルするときに、これを外部として設定する方法を知りたい
Tom

git wiki のGitサブモジュールチュートリアルを参照してください。
グレッグベーコン

回答:


343
  1. あなたはプロジェクトを持っています-githubリポジトリを既に持っているMyWebAppと呼んでください
  2. プロジェクトでjqueryリポジトリを使用したい
  3. jqueryリポジトリをサブモジュールとしてプロジェクトにプルしたい。

サブモジュールは、参照、使用が非常に簡単です。MyWebAppがすでにリポジトリとして設定されていると仮定して、ターミナルから次のコマンドを発行します。

cd MyWebApp
git submodule add git://github.com/jquery/jquery.git externals/jquery

これにより、externals/jquery* という名前のディレクトリが作成され、github jqueryリポジトリにリンクされます。次に、サブモジュールを初期化し、コードをそれに複製するだけです。

git submodule update --init --recursive

これで、すべての最新コードがサブモジュールに複製されました。jqueryリポジトリーが変更され、最新のコードを引き下げたい場合は、submodule updateコマンドを再発行してください。注:通常、プロジェクトには多数の外部リポジトリーがあるため、常に「外部」ディレクトリーの下にリポジトリーをグループ化します。

オンラインのPro Git Bookには、サブモジュール(および一般にgit)に関するいくつかの優れた情報が読みやすい方法で示されています。あるいは、git help submodule良い情報も提供します。または、git wikiのGitサブモジュールチュートリアルご覧ください。

サブモジュールについて話し、それらをSubversionのsvn:externalsメカニズムと比較するこのブログエントリに気づきました。http//speirs.org/blog/2009/5/11/understanding-git-submodules.html

*ベストプラクティスとして、サブモジュールは常にExternalsなどの独自のディレクトリに配置する必要があります。そうしないと、ルートプロジェクトディレクトリが非常に速く混乱する可能性があります。


4
素晴らしい説明!あなたはもう少し詳細が必要な場合:)また、「gitのヘルプサブモジュールは」など、内部、助け
WhyNotHugo

2
ありがとう、まさに私が必要としたもの。
MikeSchinkel 2013

1
@Cheviそれはあなたの要件に依存します。一般に、gitプロジェクトをサブモジュールとしてプロジェクトに追加することは、頻繁に変更されるプロジェクトやまだ開発中のプロジェクトに適したソリューションです。これにより、プロジェクト内のすべてのサードパーティコードが最新であることを簡単に確認できます。本質的に静的であるサードパーティのコード(おそらくバージョン間であまり変更されない安定した成熟したコード)の場合、サブモジュールを使用してもあまり価値はありません。
memmons

2
申し訳ありませんが、svn外部と比較すると、それほど簡単ではありません
Keil

2
@Keilこれは2つのコマンドでgit submodule addgit submodule update...どれほど簡単にできるかわかりません。
memmons 2013

24

知っておくべきことのほとんどはすでに回答されているので、その点については触れませんが、通常は不足している小さな情報を見つけました。

ご存知のように、「git pull」はサブモジュールを更新せず、「git submodules update」はそれらのサブモジュールの最新のHEADもダウンロードしません。

すべてのサブモジュールを最新のアップストリームリビジョンに更新するには、次を使用できます。

git submodule foreach git pull

サブモジュールを頻繁に変更し、その数が多い場合、「git foreach」は非常に貴重になります。


2

結局、http: //github.com/evilchelu/braidがサブモジュールとリモートが機能することを期待した方法に適合しているように見えました


0

@Hugoの回答が必要なものであり、うまく機能すると思います。だから私はもっと簡単な方法を見つけました。

git submodule update --remote

それで全部です。

したがって、完全なワークフローは次のようになります。

git clone project-with-submodules
git submodule init
git config -l
git submodule update --remote
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.