2010-04-10 6 views
5

Estoy usando Git para control de versiones y, a diferencia de SVN, no he encontrado un medio inherente de realizar una exportación de archivos modificados entre 2 revisiones, ramas o etiquetas.Cómo pasar una lista de archivos al comando zip de Linux

Como alternativa deseo usar el comando linux zip y pasarle un conjunto de nombres de archivo, sin embargo, los nombres de los archivos son el resultado de otro comando git diff. A continuación se muestra un ejemplo de lo que estoy tratando de lograr:

zip /home/myhome/releases/files.zip git diff --name-only -a 01-tag 00-tag 

No obstante lo anterior no funciona, ya que supongo que el comando 'zip' ve la operación GIT como parte de sus opciones de comando.

¿Alguien sabe cómo puedo hacer algo como el trabajo anterior?

Gracias

Respuesta

6

es necesario ejecutar el comando git en un sub-shell:

zip /home/myhome/releases/files.zip `git diff --name-only -a 01-tag 00-tag` 
# another syntax (assuming bash): 
zip /home/myhome/releases/files.zip $(git diff --name-only -a 01-tag 00-tag) 

Otra opción es el comando xargs:

git diff --name-only -a 01-tag 00-tag | xargs zip /home/myhome/releases/files.zip 
+1

Es más exacto decir que necesita ejecutar el comando git mediante 'command substitution'. La sustitución de comandos usa un subconjunto, pero un subconjunto es un concepto más general que también se usa de otras maneras (ver http://tldp.org/LDP/abs/html/subshells.html#SUBSHELLSREF) –

+0

Gracias por esto , ¡trabajado como un encanto! :) – newbie

+0

@R Samuel Klatchko: thx para el enlace, no sabía que – soulmerge

3

Si estás en un git shell (bash) también puede hacer esto:

git diff -–name-only commit1 commit2 | zip ../Changes.zip –@

Funciona para mí en sistemas basados ​​en Windows y Unix.

+1

Cabe señalar, que esto no funciona un MacOS de acuerdo con las páginas de comando man '' zip''. – flu

Cuestiones relacionadas