Antworten:
Schauen Sie sich zuerst an git help archive. archiveist 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 .gitunter 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
gitcompiliert auf jedem System , in dem tarnicht verfügbar ist? :-)
tares keine --excludeOption gibt, wie zum Beispiel OpenBSD (das zwar die sOption 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 .gitOrdner 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 -print0für findund --nullfür bedeuten kann, tarwenn dies unterstützt wird.)