gitリポジトリで依存関係をリンクするにはどうすればよいですか?


148

私のスクリプトでは、自分のリポジトリを持つライブラリ(私のものまたは他のもの)をよく使用します。私はそれらを私のリポジトリに複製したくありません、そして新しいバージョンが出るたびにそれらを更新することに行き詰まってしまいたくありません。ただし、誰かがレポを複製しても、ローカルで機能し、リンクが壊れていないはずです。

私が何ができるかについてのアイデアはありますか?

回答:


211

gitのサブモジュールでこれを行うことができます。リポジトリで、次の操作を行います。

git submodule add path_to_repo path_where_you_want_it

したがって、ライブラリのリポジトリのURLがgit://github.com/example/some_lib.gitあり、それをlib/some_libプロジェクトで使用したい場合は、次のように入力します。

git submodule add git://github.com/example/some_lib.git lib/some_lib

これは、リポジトリの最上位ディレクトリから行う必要があることに注意してください。したがってcd、最初に配置するディレクトリに移動しないでください。

サブモジュールを追加した後、または誰かがリポジトリを新たにチェックアウトするたびに、次のことを行う必要があります。

git submodule init
git submodule update

そして、追加したすべてのサブモジュールは、同じリビジョンでチェックアウトされます。

ライブラリのいずれかの新しいバージョンに更新する場合はcd、サブモジュールに移動して以下をプルします。

cd lib/some_lib
git pull

次に、変更git statusを加えるlib/somelibと、変更されたセクションにリストが表示されます。そのファイルを追加してコミットすれば、最新の状態になります。コラボレーターがそのコミットをリポジトリーにプルすると、再度lib/somelib実行されるまで変更されたものとして表示されますgit submodule update


2
あなたの答えをありがとう、賛成です!(そして、おそらくそれを明日受け入れるでしょう)依存関係として他のリポジトリから1つのファイルのみを追加する方法はありますか?それともフォルダ全体である必要がありますか?
Lea Verou、2011年

2
それをサブモジュールとして追跡したい場合(したがって、更新を簡単にプルできるようにする場合)、リポジトリ全体をプルする必要があります。他の多くのVCSとは異なり、gitは本当に最上位のリポジトリのみを処理したいと考えています。
エミリー

7
これ読んで、サブモジュールが何に適しているか、および潜在的な問題を回避する方法を確認してください。そしてそれについての議論
minghua 2016年

1
所有している別のリポジトリをサブモジュールとしてインポートするとします。サブモジュールのローカル変更を通じて元のリポジトリに変更を加えることができますか?バグを発見し、オリジナルを更新する必要があるとしましょうか?
andrevenancio 2017

3
私はこれが古い答えであることを知っていますが、gitサブモジュールはgit submodule update --remote、より複雑なプロジェクトではより多くのフラグを使用することをお勧めします。私が使用するgit submodule update --remote --recursive --init
Chris
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.