Jeśli udostępnię tar folderowi, który jest repozytorium git, czy mogę to zrobić bez dołączania .git
powiązanych plików? Jeśli nie, jak miałbym to zrobić za pomocą polecenia?
16
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 wersjiOsobiście korzystam
więc wszystko, co musisz zrobić, to dodać
--exclude-vcs
na końcu polecenia.źródło
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żyj
git archive
.Jeśli chcesz wykluczyć,
.git
ale dołączyć wszystko inne, w Linuksie, FreeBSD, OSX lub Cygwin, tar ma prostą opcję wykluczenia katalogu: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
.źródło
git
kompiluje się w dowolnym systemie, w którymtar
nie jest dostępny? :-)tar
nie ma--exclude
opcji, takich jak OpenBSD (co wprawdzie duplikujes
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
:A jeśli chcesz wykluczyć możliwe
.git
foldery w (pod) + folderze:Później można również osiągnąć poprzez:
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
dlafind
i--null
natar
razie obsługiwane).źródło