Odpowiedzi:
Najpierw spójrz git help archive. archiveto 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-vcsna 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ć, .gitale 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
gitkompiluje się w dowolnym systemie, w którym tarnie jest dostępny? :-)
tarnie ma --excludeopcji, takich jak OpenBSD (co wprawdzie duplikuje sopcję 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 .gitfoldery 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ć -print0dla findi --nullna tarrazie obsługiwane).