2011-10-18 5 views
119

W moich skryptach często używam bibliotek (moich lub innych), które mają własne repozytorium. Nie chcę powielać tych w moim repozytorium i utknąć z aktualizowaniem ich za każdym razem, gdy pojawi się nowa wersja. Jednakże, gdy ktoś klonuje repozytorium, powinien nadal działać lokalnie i nie mieć przerwanych linków.Jak mogę mieć powiązane zależności w repozytorium git?

Wszelkie pomysły na temat tego, co mogę zrobić?

Odpowiedz

168

Możesz to zrobić z submodułami w git. W repozytorium, wykonaj następujące czynności:

git submodule add path_to_repo path_where_you_want_it 

Tak więc, jeśli repozytorium Biblioteki miał URL git://github.com/example/some_lib.git i chciał go na lib/some_lib w projekcie, można wpisać:

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

Zauważ, że to musi do zrobienia z katalogu najwyższego poziomu w twoim repozytorium. Więc nie rób tego w katalogu, w którym umieszczasz go jako pierwszy.

Po dodaniu submodule, lub gdy ktoś robi świeże kasę swojego repozytorium, trzeba zrobić:

git submodule init 
git submodule update 

a następnie wszystkie Submoduły dodanych zostanie wyrejestrowany w taki sam Twoja rewizja.

Kiedy chcesz zaktualizować do nowszej wersji jednej z bibliotek, cd do modułem i pociągnąć:

cd lib/some_lib 
git pull 

Wtedy, kiedy wykonujesz git status powinieneś zobaczyć lib/somelib wymienione w zmodyfikowanej sekcji. Dodaj ten plik, zatwierdz i jesteś na bieżąco. Gdy współpracownik ściąga ten commit do swojego repozytorium, będzie widział zmianę w postaci lib/somelib, dopóki ponownie nie uruchomi się git submodule update.

+2

Dzięki za odpowiedź, wznowione! (i prawdopodobnie przyjmie to jutro) Czy istnieje sposób na dodanie tylko jednego pliku z drugiego repo jako zależności? Czy musi to być cały folder? –

+2

Jeśli chcesz śledzić go jako submoduł (a co za tym idzie, łatwo pobierać aktualizacje), musisz pobrać całe repozytorium. W przeciwieństwie do wielu innych VCS, git naprawdę chce tylko radzić sobie z repozytorium najwyższego poziomu. – Emily

+3

[przeczytaj to] (https://codingkilledthecat.wordpress.com/2012/04/28/why-your-company-shouldnt-use-git-submodules/), aby dowiedzieć się, do czego moduł jest odpowiedni i jakie sposoby obejść. potencjalne problemy. i [dyskusja na ten temat] (https://news.ycombinator.com/item?id=3904932). – minghua