2010-04-10 75 views
5

我使用Git进行版本控制,而不像SVN我还没有遇到过在2版本,分支或标签之间执行更改文件导出的固有方法。如何将文件列表传递到Linux zip命令

作为替代方案,我想使用linux zip命令并将它传递给一组文件名,但是文件名是另一个命令git diff的结果。下面是什么,我想实现一个例子:

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

然而,上面我猜“拉链”命令看到的git操作作为其命令选项部分不工作。

有人知道我能做出类似上述工作吗?

感谢

回答

6

你需要在子shell执行git的命令:

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) 

另一种选择是xargs命令:

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

更准确地说你需要通过'command substitution'执行git命令。命令替换使用的是子shell,但子shell是其他方式使用的更一般的概念(请参阅http://tldp.org/LDP/abs/html/subshel​​ls.html#SUBSHELLSREF) – 2010-04-10 18:15:28

+0

感谢您的支持,像魅力一样工作! :) – newbie 2010-04-10 18:37:59

+0

@ R Samuel Klatchko:thx的链接,不知道 – soulmerge 2010-04-10 18:50:55

3

如果你在一个很混帐shell(bash)你也可以这样做:

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

适用于基于Windows和Unix的系统。

+1

应该指出,这不符合''zip''手册MacOS的工作。 – flu 2014-06-19 10:56:24

相关问题