Jak mogę sprawdzić tylko część repozytorium Git? Mam repozytorium, które ma kilka modułów i chcę tylko jeden z modułów zainstalowany na konkretnej stronie.
W Subversion zrobiłbym svn export http://example.com/repository/path/to/module ./module-name.
Jak wspomniano @Chris, obecne wersje Git obsługują rzadkie pobieranie.
Aby przekonwertować lokalne repozytorium, aby zawierało tylko określone katalogi:
cd <repo/location>
git config core.sparsecheckout true
echo desiredDir/ >> .git/info/sparse-checkout # repeat to add multiple subdirs (the rest will be removed)
Teraz, aby usunąć wszystkie, ale określone katalogi:
git read-tree -mu HEAD # remove all, but those in .git/info/sparse-checkout
Myślę, że najbliższym odpowiednikiem eksportu svn byłoby archiwum git . Możesz pobrać katalog path/to/modulez głównej gałęzi repozytorium i umieścić w katalogu lokalnym w module-namenastępujący sposób:
git archive --remote=url-of-Git-repository --prefix=module-name/ master:path/to/module |
tar xf -
Jeśli serwer zdalny nie obsługuje archiwizacji, wyciągnij archiwum z lokalnego (nagiego) klonu (użycie pustego klonu pozwala uniknąć posiadania kolejnej kopii plików w lokalnym repozytorium, jeśli jest to ważne).
Jednak użycie polecenia „sprawdź” sugeruje (dla mnie), że chcesz mieć funkcjonalne drzewo robocze Git z obecnymi tylko niektórymi plikami. Można to osiągnąć za pomocą funkcji „rzadkiego pobierania” wprowadzonej w Git 1.7.0.
Włącz tę funkcję przez
ustawienie opcji konfiguracji core.sparseCheckout na „true” * i
wypełnianie $GIT_DIR/info/sparse-checkoutpliku dla repozytorium wzorcami ścieżek, które należy zachować ** .
Można użyć niskopoziomowego „bitu pomijania-pracy” w indeksie *** do zarządzania rzadkością pojedynczych plików, ale prawdopodobnie łatwiej jest zamiast tego użyć mechanizmu wyższego poziomu.
Istnieją pewne luki w ogólnym interfejsie użytkownika (tzn. Nie ma łatwego sposobu na powiedzenie „klonowanie repozytorium pod tym adresem URL, ale tylko pobranie X, Y i Z”), ale powinno wystarczyć, aby uzyskać funkcję „częściowego pobierania”.
Nie potrzebuję drzewa roboczego ( svn exporteksportuje niedziałającą kopię do użytku produkcyjnego). Co module-1odpowiada itp.? Foldery w repozytorium?
ceejayoz
Przepisałem przykład archiwum git, aby lepiej równolegle z przykładem SVN. Ale w odpowiedzi na twoje pytanie, tak module-1, module-2i file-abyły wszystkie przykłady ścieżek plików przechowywanych w drzewie, do których odwołuje się zatwierdzenie, do którego odwołuje się ref masterw repozytorium. Nowy przykład umieszcza specyfikację katalogu bezpośrednio w argumencie drzewiastym, aby mógł użyć --prefixopcji wyodrębnienia katalogu z repozytorium bezpośrednio do katalogu lokalnego o innej nazwie.
Wdrożenie czegoś takiego w Git byłoby dużym wysiłkiem i oznaczałoby, że nie można już zagwarantować integralności repozytorium po stronie klienta. Jeśli jesteś zainteresowany, poszukaj dyskusji na temat „sparse clone” i „sparse fetch” na liście mailowej git.
Tak. Dość zaskakujące pominięcie, jeśli mnie zapytacie. Prawdopodobnie skończę przy użyciu kasy do katalogu i linków do niego z mojego katalogu internetowego. Chciałbym podzielić je na osobne repozytoria, ale Github pobiera opłaty za repozytorium za prywatne.
svn export
eksportuje niedziałającą kopię do użytku produkcyjnego). Comodule-1
odpowiada itp.? Foldery w repozytorium?module-1
,module-2
ifile-a
były wszystkie przykłady ścieżek plików przechowywanych w drzewie, do których odwołuje się zatwierdzenie, do którego odwołuje się refmaster
w repozytorium. Nowy przykład umieszcza specyfikację katalogu bezpośrednio w argumencie drzewiastym, aby mógł użyć--prefix
opcji wyodrębnienia katalogu z repozytorium bezpośrednio do katalogu lokalnego o innej nazwie.https://stackoverflow.com/questions/600079/is-there-any-way-to-clone-a-git-repositorys-sub-directory-only
źródło