Risposte:
Dai un'occhiata prima a git help archive
. archive
è un comando git che consente di creare archivi contenenti solo file tracciati da git. Probabilmente quello che stai cercando. Un esempio elencato alla fine della pagina man:
git archive --format=tar --prefix=git-1.4.0/ v1.4.0 | gzip >git-1.4.0.tar.gz
Risposta più semplice: Aggiungi --exclude-vcs
--exclude-VCS
Ciò esclude tutte le directory del sistema di controllo della versione
Personalmente io uso
tar -zcvf foo.tar.gz ./FOLDER_NAME --exclude-vcs
quindi tutto ciò che devi fare è aggiungere --exclude-vcs alla fine del comando.
tar --exclude-vcs -zcvf foo.tar.gz ./FOLDER_NAME
Se si desidera che l'archivio includa i file monitorati da git, ma non il repository git stesso o qualsiasi file generato o altrimenti non tracciato, utilizzaregit archive
.
Se vuoi specificamente escludere .git
ma includere tutto il resto, sotto Linux o FreeBSD o OSX o Cygwin, tar ha una semplice opzione per escludere una directory:
tar -c --exclude .git -f - foo | gzip >foo.tgz
Con GNU tar (cioè sotto Linux o Cygwin), puoi accorciarlo a tar czf foo.tgz --exclude .git foo
.
Il modo POSIX di creare archivi è pax
.
pax -w -t -s '!.*/\.git$!!' -s '!.*/\.git/.*!!' foo | gzip >foo.tgz
git
compila su qualsiasi sistema in cui tar
non è disponibile? :-)
tar
non esiste alcuna --exclude
opzione, come OpenBSD (che ammette duplicare l' s
opzione di pax , ma non è un'estensione di sintassi del comando tar comune).
Grazie a una risposta che ho ricevuto su una delle mie domande ho trovato un'altra soluzione. Quindi, per completezza, ecco una soluzione che utilizza find
:
find . -path './.git' -prune -o -print |
tar -czvf ../archive.tgz --no-recursion -T -
E se vuoi escludere possibili .git
cartelle all'interno di (sotto) + cartella:
find . -path '*/.git' -prune -o -print |
tar -czvf ../archive.tgz --no-recursion -T -
L'ultimo può essere raggiunto anche attraverso:
find . -type d -name '.git' -prune -o -print |
tar -czvf ../archive.tgz --no-recursion -T -
Molto utile se è possibile utilizzare le altre tecniche di filtro di find
, ad esempio data di modifica, autorizzazioni, ...
(Come spesso si presuppongono nomi di file ben formati, altrimenti è necessario utilizzare byte null come separatori che possono significare -print0
per find
e --null
per tar
se supportati.)