2011-02-11 19 views
8

O me estoy volviendo loco o nadie le gusta/le gusta esta característica, pero hace mucho tiempo yo solía utilizar la subversión con el sistema de SourceForge. Pude crear parches de archivos completos para los commits realizados.Git crea parches de archivos completos para descargar/distribuir?

No puedo entender de todos modos para crear estos en git, todo lo que quiero son los archivos que se cambiaron de la confirmación XX y solo esos archivos en su totalidad para poderlos entregar a alguien/cargar solo esos archivos a un ubicación.

En su redacción actual que estoy atascado resubiendo todo el proyecto porque no tengo nada que me diga lo que se ha cambiado. Dado que también estamos en un servidor web compartido, no hay forma de obtener git en el servidor sin actualizar a un paquete más costoso.

He intentado

git archive --output=/home/username/temp.zip <commit id> 

que puso todo en una postal muy bien, pero no sólo eso, se puso todo. También probé una variación de parche de formato, pero eso no pareció funcionar.

Respuesta

14

Parece que no he entendido bien lo que quería en mi otra respuesta. git archive puede tomar una lista de rutas para incluir en el archivo, por lo que podría hacer:

git archive -o /tmp/foo.zip HEAD $(git diff --name-only oldcommit HEAD) 

Si los nombres de archivo contienen caracteres sorprendente, sin embargo, que sería más seguro para hacerlo:

git diff -z --name-only oldcommit HEAD | xargs -0 git archive HEAD -o /tmp/blah.zip -- 
+0

Gracias, esto funcionó. En mi caso, lo necesitaba de nuevo una rama en lugar de commit. Entonces lo hice: 'git diff -z - nombre-único origen/nombre_de_la_sección | xargs -0 git archivo CABEZA -o/tmp/blah.zip', y luego aplicar esos cambios mediante la extracción de archivos en mi repo: 'tar xf/tmp/blah.zip' – Surya

3

La primera cosa a intentar sería la de guardar la salida de git diff, lo que podría ser suficiente en su situación:

git diff oldcommit > test.patch 

Si ha cambiado los archivos binarios desde entonces, usted podría intentar:

git diff --binary oldcommit > test-with-binaries.patch 

En ese caso de que le este caso es necesario aplicar el parche con git apply. De lo contrario, me gustaría crear una nueva rama basado en oldcommit, realizar una combinación de master aplastado, comprometer el resultado y usar una git format-patch para producir el parche. Ese método (y varias otras soluciones a su problema) se describen con más detalle en las respuestas a esta pregunta StackOverflow similar: How do you squash commits into one patch with git format-patch?

+0

que todavía sólo muestra la sección que se modificó, necesito todos los archivos en su totalidad. Si cambio 2 líneas en config.inc, quiero que config.inc entero no solo las líneas modificadas. – iarp

+0

@iarp: Ah, OK, lo siento. He agregado otra respuesta con una sugerencia diferente que usa 'git archive' en su lugar. –

Cuestiones relacionadas