2011-10-18 54 views
119

在我的腳本中,我經常使用擁有自己的回購庫的圖書館(我的或他人的)。我不想在我的回購中複製這些內容,並且每次新版本出來時都會更新它們。 但是,當有人克隆回購時,它應該仍然在本地工作,並沒有斷開鏈接。如何在git倉庫中鏈接依賴關係?

關於我能做什麼的任何想法?

回答

168

你可以用git中的子模塊來做到這一點。在你的資料庫,做到:

git submodule add path_to_repo path_where_you_want_it 

因此,如果庫的庫具有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

感謝您的回答,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