2010-04-10 54 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

相關問題