2010-06-08 40 views
10

Soy muy nuevo en Git y tengo un pequeño problema.¿Cómo exportar todos los archivos modificados/agregados de Git?

En SVN [esto se siente como una historia de Solo tontos y caballos por el tío Albert ... "durante la guerra ..."] cuando quería actualizar un sitio de producción con mis últimos cambios, haría un diff en TSVN y exportar todos los archivos modificados/agregados entre dos revisiones. Como se puede imaginar, fue fácil obtener esos archivos en un sitio de producción después.

Sin embargo, parece que no puedo encontrar la opción "exportar archivos modificados" en Git. Puedo hacer un diff y ver los cambios, puedo obtener una lista de archivos, pero en realidad no puedo exportarlos. ¿Hay una manera razonable de hacer esto? ¿Me estoy perdiendo algo simple?

Solo para aclarar una vez más, necesito exportar todos los cambios entre dos confirmaciones específicas.

¡Gracias de antemano!

Respuesta

14

¿Cómo desea exportarlos? Usted dice que ya tiene una lista; ¿qué más quieres? Suponiendo que está recibiendo su lista con git diff --name-only ...

git archive --output=<file> HEAD $(git diff --name-only ...) 

tar -czf <file> $(git diff --name-only ...) 

cp $(git diff --name-only ...) <export-directory> 

Algo por el estilo?

O incluso podría usar la propia diferencia - se puede aplicar con git apply (o incluso patch, creo).

+1

la primera opción está trabajando para mí! Idealmente, usaría la variante cp pero mantendría la estructura de carpetas (supongo que es una cuestión de parámetros para git diff?) No puedo creer que sea tan simple ... ¡gracias! –

+0

Acabo de ver tu edición ... Desafortunadamente, no puedo usar 'git apply' o' patch', solo tengo acceso FTP al sitio: -/ –

+0

@dr Hannibal Lecter: Sí, pensé que necesitabas pasar el mensaje actual archivos. Y sí, la sustitución de comandos (el '$ (...)') es una de esas cosas clave que hace que todo sea posible (y simple) en los shells de Linux. – Cascabel

2

préstamos de algunas de las respuestas en here, aquí es otra forma de exportar los archivos que se han modificado en el espacio de trabajo:

git diff --diff-filter=ACMRT --name-only HEAD | xargs tar -rf export.tar 

puede que tenga que ejecutar la siguiente antemano para añadir archivos sin seguimiento, si es necesario incluirlos en el diff:

git add * 

[Esto funciona en git-fiesta en Windows]

Cuestiones relacionadas