2010-04-10 6 views
5

J'utilise Git pour le contrôle de version et contrairement à SVN je n'ai pas trouvé de moyen inhérent d'effectuer une exportation de fichiers modifiés entre 2 révisions, branches ou balises. En guise d'alternative, je veux utiliser la commande linux zip et lui passer un ensemble de noms de fichiers, mais les noms de fichiers sont le résultat d'une autre commande git diff. Voici un exemple de ce que je suis en train de réaliser:Comment passer une liste de fichiers à la commande zip de Linux

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

Cependant, le ci-dessus ne fonctionne pas comme je suppose que la commande « zip » voit l'opération git dans le cadre de ses options de commande.

Quelqu'un sait-il comment je peux faire quelque chose comme le travail ci-dessus?

Merci

Répondre

6

Vous devez exécuter la commande git dans un sous-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) 

Une autre option est la commande xargs:

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

Il est plus précis de dire que vous devez exécuter la commande git via 'command substitution'. La substitution de commande utilise un sous-shell, mais un sous-shell est un concept plus général utilisé à d'autres égards (voir http://tldp.org/LDP/abs/html/subshells.html#SUBSHELLSREF) –

+0

Merci pour cela , a travaillé comme un charme! :) – newbie

+0

@R Samuel Klatchko: merci pour le lien, ne savait pas que – soulmerge

3

Si vous êtes dans un git shell (bash), vous pouvez également le faire:

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

Fonctionne pour moi sur Windows et les systèmes basés sur Unix.

+1

Il convient de noter, que cela ne fonctionne pas un MacOS selon les pages de manuel «zip». – flu

Questions connexes