Odpowiedzi:
Najpierw spójrz git help archive
. archive
to polecenie git, które pozwala tworzyć archiwa zawierające tylko pliki śledzone przez git. Prawdopodobnie to, czego szukasz. Jeden przykład wymieniony na końcu strony podręcznika:
git archive --format=tar --prefix=git-1.4.0/ v1.4.0 | gzip >git-1.4.0.tar.gz
Najprostsza odpowiedź: dodaj --exclude-vcs
. Wyklucza to wszystkie katalogi systemu kontroli wersji
Osobiście korzystam
tar --exclude-vcs -zcvf foo.tar.gz ./FOLDER_NAME
więc wszystko, co musisz zrobić, to dodać --exclude-vcs
na końcu polecenia.
tar --exclude-vcs -zcvf foo.tar.gz ./FOLDER_NAME
Jeśli chcesz, aby archiwum zawierało pliki śledzone przez git, ale nie samo repozytorium git ani żadnego wygenerowanego lub w inny sposób nieśledzonego pliku, użyjgit archive
.
Jeśli chcesz wykluczyć, .git
ale dołączyć wszystko inne, w Linuksie, FreeBSD, OSX lub Cygwin, tar ma prostą opcję wykluczenia katalogu:
tar -c --exclude .git -f - foo | gzip >foo.tgz
Z GNU tar (tj. Pod Linuksem lub Cygwin) możesz to skrócić tar czf foo.tgz --exclude .git foo
.
Sposób tworzenia archiwów przez POSIX to pax
.
pax -w -t -s '!.*/\.git$!!' -s '!.*/\.git/.*!!' foo | gzip >foo.tgz
git
kompiluje się w dowolnym systemie, w którym tar
nie jest dostępny? :-)
tar
nie ma --exclude
opcji, takich jak OpenBSD (co wprawdzie duplikuje s
opcję pax , ale nie jest to typowe rozszerzenie składni komendy tar).
Dzięki odpowiedzi na jedno z moich pytań wymyśliłem inne rozwiązanie. Dla zachowania kompletności oto rozwiązanie wykorzystujące find
:
find . -path './.git' -prune -o -print |
tar -czvf ../archive.tgz --no-recursion -T -
A jeśli chcesz wykluczyć możliwe .git
foldery w (pod) + folderze:
find . -path '*/.git' -prune -o -print |
tar -czvf ../archive.tgz --no-recursion -T -
Później można również osiągnąć poprzez:
find . -type d -name '.git' -prune -o -print |
tar -czvf ../archive.tgz --no-recursion -T -
Całkiem przydatny, jeśli możesz skorzystać z innych technik filtrowania find
, np. Daty modyfikacji, uprawnień,…
(Jak są traktowane tak często dobrze uformowane nazwy plików, w przeciwnym razie trzeba użyć NULL bajty jako separatory, które może oznaczać -print0
dla find
i --null
na tar
razie obsługiwane).