2010-05-04 10 views

Respuesta

21

Sé que esto es viejo, pero creo que encontré una solución.

Run:

stashName=`git stash create`; 
git archive <options> $stashName 

Desde git quiere cometer un sólido a hacer un archivo, podemos hacer un 'uno off' de confirmar utilizando git stash. El comando create solo crea la confirmación de ocultación (no restablece el directorio de trabajo ni lo envía a la pila de ocultación) y devuelve el hash para ello.

Si le preocupa el espacio de la confirmación colgante, puede limpiarlo con un git gc --prune=now. De lo contrario, solo espera 2 semanas y desaparecerá.

+0

Funciona muy bien, gracias! –

2

Si no ha confirmado los cambios, git archive no lo ayudará. Si solo desea una instantánea de su área de trabajo, tar es probablemente su mejor opción.

11

Mejora de la respuesta de nevsan para mi propósito - para archivar último código en cualquier caso (comprometidos o no):

uploadStash=`git stash create`; git archive -o code_outgoing.zip ${uploadStash:-HEAD} 
+3

Corregido un error: git stash create [now] siempre regresa con éxito, y no imprime nada cuando no hay archivos para esconder. Use la sintaxis bash $ {var: -default} en lugar de confiar en el código de salida. –

+0

IIRC hay un problema con esto, no elimina los archivos eliminados de git del archivo. –

3

Otra solución con git ls-files:

git ls-files -z | xargs -0 tar -czvf archive.tar.gz 
+1

Esta es, en mi opinión, la mejor respuesta. Sin embargo, recomendaría usar la opción -z de ls-files y la opción -0 (cero) de xargs, de modo que los nombres de archivos con espacios se manejen correctamente: git ls-files -z | xargs -0 tar -czvf archive.tar.gz . – S2108887

+0

¡Tienes toda la razón! Gracias. He agregado estas opciones a la línea de comando. –

+0

'git ls-files | tar Tczf - archive.tar.gz' no tiene límites impuestos por el sistema sobre el tamaño de los argumentos de un solo comando. xargs no es bueno para ningún comando que realmente necesites ejecutar solo una vez para todo. – jthill

Cuestiones relacionadas