2012-01-26 28 views
11

Necesito exportar a un archivo un conjunto de confirmaciones en un repositorio de git. ¿Cómo hago esto? Al usar svn, pude elegir commits y exportar a zip.Git: recuperar compromiso específico

+0

¿quiere decir exportar diffs de estos commits? – CharlesB

+0

Sí, lo siento ahora, me doy cuenta de que no fue fácil de entender. Necesito un archivo con la mayoría de los archivos de actualización entre 2 confirmaciones. – user1170896

Respuesta

18

Para exportar el repositorio hasta un cierto compromiso:

git archive -o export.zip <COMMIT>. Reemplace <COMMIT> con el número de compromiso que desea exportar.

Para crear un parche entre dos confirmaciones:

git diff COMMIT1 COMMIT2 > patch.txt

+0

Creo que este comando exportaría cada confirmación en el repositorio hasta que se encuentre la confirmación especificada. Necesito exportar las confirmaciones especificadas solamente. Como un parche – user1170896

+0

Respuesta ajustada. – tobiasbayer

+0

bien ... Pero un parche es para usar en otro repositorio. Contiene marcas para entender dónde se han realizado las modificaciones. Necesito un archivo con solo los archivos modificados (actualizados) entre confirmaciones especificadas. – user1170896

10

Git tiene una forma práctica de crear un parche para cada confirmación. Aunque originalmente se pretendía que formateara parches para que puedan enviarse por correo electrónico, son una forma práctica de extraer un conjunto de cambios.

El comando que desea es git format-patch y la forma en que aplica estos parches formateados en git es con el comando git am.

Por ejemplo, si usted tiene dos confirmaciones C1 y Cn que desea exportar como un conjunto de parches git sólo necesita:

git format-patch -k C1..Cn 

Esto creará un conjunto de parches numeradas (en el directorio actual) Cada parche será una diferencia de la confirmación, así como la información de confirmación (título, comentario, autor, fecha, etc.).

Esto es mucho más que un archivo diff simple entre dos confirmaciones le proporcionará.

+0

Creo que esto tiene que ser 'git format-patch -k C1 ~ ..Cn' en lugar de' git format-patch -k C1..Cn', porque el lado izquierdo del rango es _exclusivo_, por lo que debes dar el _parent_ ('~') del primer commit. – nh2

Cuestiones relacionadas