2012-08-06 14 views
25

Mam repozytorium git zawierające podkatalogi. Przykład dirA/dirB. Czy istnieje sposób na zrobienie git clone na serwerze Unix, aby pobrać tylko pliki z podkatalogu (dirB)?Klonowanie tylko podkatalogu z git

Czy jest jakieś inne polecenie Git inne niż klon, który to zrobi?

Jak przesłać konkretny plik?

+6

http://stackoverflow.com/questions/600079/is-there-any-way-to-clone-a-git-repositorys-sub-directory-only – supervacuo

+1

[Prosta odpowiedź tutaj] (http: // stackoverflow .com/a/2466755/287948) –

Odpowiedz

2

Jeśli chcesz sklonować tylko części swojego repozytorium, powinieneś spojrzeć na git submodules.

Podfolder jest zarządzany przez określone repozytorium git i jest przywoływany w głównym repozytorium jako moduł podrzędny.

Podczas klonowania głównego repozytorium moduły nie są automatycznie klonowane.

+3

Kiedy klonujesz główne repozytorium, submoduły nie są automatycznie klonowane? czemu? to absurd :( – hugemeow

+7

To nie odpowiada na pytanie, zasadniczo mówi: "Nie mam odpowiedzi na twoje pytanie, więc odpowiem na inne pytanie, ponieważ to jest to, co myślę, że powinieneś zrobić zamiast tego." –

+0

@EduardoBezerra Dokładnie, wolałbym odpowiedź, a następnie komentarz do alternatyw. Sprawdź odpowiedź Bruno Thomasa –

0

Git działa na poziomie repozytorium. Nie będzie można wybrać tylko podkatalogu. Jeśli interesujące Cię repozytorium ma interfejs sieciowy, możesz przejść do swojego podkatalogu i go pobrać.

+0

Tak, git działa w repozytorium, jednak chęć posiadania lekkiego kasy jest wysoka z powodu wyzwań związanych z mobilnością danych. – cgseller

28

Załóżmy, że Twój projekt znajduje się w katalogu nazwanym project i chcesz tylko te zatwierdzenia, które dotykają project/dirB.

Następnie:

git clone project/ subproject/ 
cd subproject 
git filter-branch --prune-empty --subdirectory-filter dirB HEAD 

subproject zawierać będzie teraz historię git która dotyka dirB.

+0

Działa jak czar ...! – Ahsan

+2

to działało świetnie, aby pobrać tylko początkową zawartość podkatalogu, ale kiedy wykonałem kolejną operację 'pull', połączyłem ją z oryginalną gałęzią ... – monkut

+0

Jeśli nie chcesz historii git jako całości, dodaj' - -depth 0' flag. – CelticParser

1

Chciałbym podzielić się obejścia. Można sklonować całą repo, a następnie utworzyć symulink do podkatalogu:

mkdir <repo_dir> 
cd <repo_dir> 
git clone <repo_url> 
ln -s <sub_dir> <your_location_where_you_want_to_checkout_sub_dir> 

Ponownie, nie jest to rozwiązanie - po prostu obejść. Będziesz nadal klonował całe repozytorium, a Ty możesz wyciągnąć tylko zmiany. Jednak w niektórych przypadkach było to przydatne.

0

To naprawdę nie jest klonowanie, ale jeśli chcesz tylko część projektu, aby rozpocząć nowe repo z, przejdź do swojego repo i

git archive master <subdir> | tar -x -C /somewhere/else 

Następnie przejdź/gdzieś/indziej i zacząć tam nowe repo .

Powiązane problemy