Odpowiedzi:
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/module
z głównej gałęzi repozytorium i umieścić w katalogu lokalnym w module-name
nastę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
wypełnianie $GIT_DIR/info/sparse-checkout
pliku 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”.
* Patrz „core.sparseCheckout” w git config manpage
** patrz „Sparse kasę” w git odczytu drzewo podręcznika
*** patrz „skip-worktree trochę” w git update-index manpage
module-1
, module-2
i file-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ę ref master
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.
Nie, to nie jest możliwe w Git.
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.
svn export
eksportuje niedziałającą kopię do użytku produkcyjnego). Comodule-1
odpowiada itp.? Foldery w repozytorium?