2011-10-18 3 views
119

私のスクリプトでは、自分のリポジトリを持つライブラリ(私または他の人)を使うことがよくあります。私は自分のレポにそれらを複製して、新しいバージョンが出てくるたびにそれらを更新することに固執したくありません。 しかし、誰かがリポジトリをクローンしても、ローカルで動作し、リンクが壊れていないはずです。どうすればgitリポジトリに依存関係をリンクできますか?

私は何ができるのでしょうか?

答えて

168

これはgitのサブモジュールで行うことができます。リポジトリでは、実行します。ライブラリのリポジトリがgit://github.com/example/some_lib.gitのURLを持っていたし、あなたのプロジェクトにlib/some_libでそれを望んでいた場合

git submodule add path_to_repo path_where_you_want_it 

そう、あなたが入力したい:

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

なお、このニーズあなたのリポジトリの最上位のディレクトリから実行されます。だから最初に入れているディレクトリにcdを入れないでください。

あなたがサブモジュールを追加したり、誰かがあなたのリポジトリの新鮮なチェックアウトをしたときに、あなたがする必要があります後:

git submodule init 
git submodule update 

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

あなたはライブラリの1、サブモジュールへのcdの新しいバージョンに更新して引っ張るたい:

cd lib/some_lib 
git pull 

次に、あなたがgit statusを行うときにlib/somelibが変更セクションに記載されているはずです。そのファイルを追加し、コミットすると、最新の状態になります。共同編集者がそのコミットをリポジトリにプルすると、git submodule updateが再び実行されるまで、lib/somelibが変更されて表示されます。

+2

あなたの答えをありがとう、upvoted! (そして、明日はおそらくそれを受け入れるでしょう)もう一つのファイルを依存関係として追加する方法はありますか?それとも、フォルダ全体にする必要がありますか? –

+2

それをサブモジュールとして追跡したいので(そして更新を簡単に取り込めるようにするためには)リポジトリ全体をプルする必要があります。他の多くのVCSと違って、gitは本当にトップレベルのリポジトリに対処したいだけです。 – Emily

+3

[こちらを読む](https://codingkilledthecat.wordpress.com/2012/04/28/why-your-company-shouldnt-use-git-submodules/)サブモジュールが何に適しているのか、回避策を知る潜在的な問題。と[それについての議論](https://news.ycombinator.com/item?id=3904932)。 – minghua

関連する問題