web-dev-qa-db-ja.com

外部リポジトリサブモジュールを使用するようにgitプロジェクトを設定する方法は?

リモートリポジトリをプルするリポジトリを作成したいと思います。

たとえば、jQueryをサブモジュールとしましょう。

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

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

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

206
Tom
  1. あなたはプロジェクトを持っています-すでにgithubリポジトリを持っているMyWebAppと呼びます
  2. プロジェクトでjqueryリポジトリを使用したい
  3. Jqueryリポジトリをsubmoduleとしてプロジェクトにプルします。

サブモジュールの参照と使用は本当に簡単です。すでに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コマンドを再度発行してください。注:通常、プロジェクトには多数の外部リポジトリがあります。そのため、リポジトリは常に「externals」ディレクトリの下にグループ化します。

オンラインの Pro Git Book には、サブモジュール(および一般的なgit)に関する良い情報が読みやすい形式で表示されています。または、git help submoduleも適切な情報を提供します。または、git wikiの Git Submodule Tutorial をご覧ください。

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

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

333
memmons

あなたが知る必要があるもののほとんどはすでに答えられているので、私はそれに対処するつもりはありませんが、通常は欠けている小さな情報を見つけました。

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

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

git submodule foreach git pull

サブモジュールを頻繁に変更し、たくさん持っている場合、「git foreach」は非常に貴重なものになります。

21
WhyNotHugo

結局、私は http://github.com/evilchelu/braid を見つけた

2
Tom

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

git submodule update --remote

それで全部です。

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

git clone project-with-submodules
git submodule init
git config -l
git submodule update --remote
0
Dapaldo