Antworten:
Schauen Sie sich zuerst an git help archive
. archive
ist ein Git-Befehl, mit dem Archive erstellt werden können, die nur mit Git verfolgte Dateien enthalten. Wahrscheinlich, wonach Sie suchen. Ein Beispiel am Ende der Manpage:
git archive --format=tar --prefix=git-1.4.0/ v1.4.0 | gzip >git-1.4.0.tar.gz
Einfachste Antwort: Hinzufügen --exclude-vcs
--exclude-vcs
Dies schließt alle Verzeichnisse des Versionskontrollsystems aus
Ich persönlich benutze
tar -zcvf foo.tar.gz ./FOLDER_NAME --exclude-vcs
Alles, was Sie tun müssen, ist --exclude-vcs am Ende des Befehls hinzuzufügen.
tar --exclude-vcs -zcvf foo.tar.gz ./FOLDER_NAME
Wenn das Archiv die von git verfolgten Dateien enthalten soll, jedoch nicht das git-Repository selbst oder eine generierte oder auf andere Weise nicht verfolgte Datei, verwenden Siegit archive
.
Wenn Sie .git
unter Linux oder FreeBSD oder OSX oder Cygwin ausdrücklich einschließen , aber alles andere einschließen möchten, bietet tar eine einfache Möglichkeit, ein Verzeichnis auszuschließen:
tar -c --exclude .git -f - foo | gzip >foo.tgz
Mit GNU tar (zB unter Linux oder Cygwin) können Sie dies auf kürzen tar czf foo.tgz --exclude .git foo
.
Die POSIX-Methode zum Erstellen von Archiven lautet pax
.
pax -w -t -s '!.*/\.git$!!' -s '!.*/\.git/.*!!' foo | gzip >foo.tgz
git
compiliert auf jedem System , in dem tar
nicht verfügbar ist? :-)
tar
es keine --exclude
Option gibt, wie zum Beispiel OpenBSD (das zwar die s
Option von pax dupliziert , dies ist jedoch keine übliche Syntaxerweiterung für tar-Befehle).
Dank einer Antwort auf eine meiner Fragen fand ich eine andere Lösung. Der Vollständigkeit halber hier eine Lösung, die Folgendes nutzt find
:
find . -path './.git' -prune -o -print |
tar -czvf ../archive.tgz --no-recursion -T -
Und wenn Sie mögliche .git
Ordner innerhalb (Unter-) + Ordners ausschließen möchten :
find . -path '*/.git' -prune -o -print |
tar -czvf ../archive.tgz --no-recursion -T -
Letzteres kann auch erreicht werden durch:
find . -type d -name '.git' -prune -o -print |
tar -czvf ../archive.tgz --no-recursion -T -
Sehr praktisch, wenn Sie andere Filtertechniken verwenden können find
, z. B. Änderungsdatum, Berechtigungen usw.
(Da so oft wohlgeformte Dateinamen vorausgesetzt werden, müssen Sie ansonsten Null-Bytes als Trennzeichen verwenden, was -print0
für find
und --null
für bedeuten kann, tar
wenn dies unterstützt wird.)