Chcę sklonować repozytorium GIT i NIE kończyć się .git
katalogiem. Innymi słowy, chcę tylko pliki. Czy jest na to sposób?
git clone --no-checkout
zrobiłem dokładnie odwrotnie niż chciałem (dał mi tylko .git
katalog).
Próbuję to zrobić dla zdalnego repozytorium, a nie lokalnego, co oznacza, że nie jest to duplikat „ Jak zrobić„ eksport git ”(np.„ Eksport svn ”) ” (nawet jeśli rozwiązaniem może być podobnie).
git archive
jest teraz (IV kwartał 2017 r.) Bardziej precyzyjna i nie będzie zawierać pustych folderów.Odpowiedzi:
Polecenie git, które byłoby najbliższe temu, czego szukasz, byłoby przez
git archive
.Zobacz tworzenie kopii zapasowej projektu korzystającego z git : w archiwum umieści wszystkie pliki (w tym moduły podrzędne, jeśli używasz
git-archive-all
skryptu)Następnie możesz użyć tego archiwum w dowolnym miejscu, zwracając tylko pliki, bez
.git
katalogu.Jeśli potrzebujesz folderów i plików tylko z pierwszego poziomu:
Aby wyświetlić tylko foldery pierwszego poziomu zdalnego repozytorium:
Uwaga: to nie działa dla GitHub (nie jest obsługiwane)
Musiałbyś więc sklonować (płytko, aby przyspieszyć krok klonowania), a następnie zarchiwizować lokalnie :
Inną opcją byłoby wykonanie płytkiego klonu (jak wspomniano poniżej), ale zlokalizowanie folderu .git w innym miejscu.
Folder repo zawierałby tylko plik, bez
.git
.Uwaga:
git --git-dir
jest opcją poleceniagit
, niegit clone
.Aktualizacja za pomocą Git 2.14.X / 2.15 (Q4 2017): pozwoli to uniknąć dodawania pustych folderów .
Zobacz zatwierdzenie 4318094 (12 września 2017) autorstwa René Scharfe (``) .
Sugerowane przez: Jeff King (
peff
) .(Scalone przez Junio C Hamano -
gitster
- w zatwierdzeniu 62b1cb7 , 25 września 2017 r.)źródło
git --git-dir=/dev/null clone --depth=1 /url/to/repo
git archive --remote=https://github.com/pornel/dssim.git @ | tar -t
otrzymujętar: This does not look like a tar archive
. Czy to nie działa z GitHubem? Co to@
oznacza?@
: usunąłem go. Również GitHub nie obsługuje pilotagit archive
: zredagowałem odpowiedź, aby zaproponować alternatywę.zaczerpnięte stąd
źródło
--format=tar
jest niepotrzebne. „tar” jest domyślnym wyjściem, nie trzeba go określać.tar x
wystarczamożesz utworzyć płytki klon, aby uzyskać tylko kilka ostatnich wersji:
następnie po prostu usuń katalog .git lub użyj go
git archive
do wyeksportowania drzewa.źródło
Dlaczego nie wykonać klonu, a następnie usunąć plik
.git
katalog, aby mieć tylko kopię roboczą?Edycja: A właściwie po co w ogóle używać klonowania? To trochę mylące, gdy mówisz, że chcesz repozytorium git, ale bez
.git
katalogu. Jeśli masz na myśli, że chcesz po prostu skopiować jakiś stan drzewa, to dlaczego nie zrobićcp -R
w powłoce zamiast klonu git, a następnie usunąć.git
później.źródło
Wygląda na to, że potrzebujesz tylko kopii kodu źródłowego. Jeśli tak, dlaczego po prostu nie skopiować katalogu i wykluczyć z kopii katalogu .git?
źródło
git checkout -f
Można to zrobić w inny sposób, dzieląc repozytorium z drzewa roboczego.
Ta metoda jest przydatna, jeśli musisz regularnie aktualizować te pliki git bez git. Na przykład używam go, gdy muszę pobrać pliki źródłowe i zbudować artefakt, a następnie skopiować artefakt do innego repozytorium tylko w celu wdrożenia na serwer, a także używam go podczas wypychania kodu źródłowego na serwer, gdy chcę kod źródłowy do pobrania i wbudowania w katalog www.
Zrobimy dwa foldery, jeden dla git, drugi dla plików roboczych:
zainicjuj nagie repozytorium git:
Następnie utwórz hak po odbiorze:
Edytuj odbiór wiadomości w swoim ulubionym edytorze:
Dodaj to jako pilot:
Teraz za każdym razem, gdy pchasz do tego samego repozytorium, pobierze ono drzewo robocze
/workingfiles/
. Ale/workingfiles/
sam nie podlega kontroli wersji; uruchomionygit status
w/workingfiles/
dadzą błądfatal: Not a git repository (or any parent up to mount point /data)
. To tylko zwykłe pliki.W przeciwieństwie do innych rozwiązań
rm -r .git
polecenie nie jest potrzebne, więc jeśli/workingfiles/
jest jakieś inne repozytorium git, nie musisz się martwić o polecenie użyte do usunięcia plików git innego repozytorium.źródło