2010-04-10 5 views
5

Ich benutze Git für die Versionskontrolle und im Gegensatz zu SVN bin ich nicht in der Lage, einen Export von geänderten Dateien zwischen 2 Revisionen, Verzweigungen oder Tags durchzuführen.Wie übergeben Sie eine Dateiliste an den Linux-Zip-Befehl

Als Alternative möchte ich den Linux-Zip-Befehl verwenden und übergeben Sie eine Reihe von Dateinamen, aber die Dateinamen sind das Ergebnis eines anderen Befehls git diff. Unten ist ein Beispiel dafür, was ich zu erreichen versuchen:

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

jedoch die oben nicht, wie ich den ‚zip‘ Befehl erraten funktioniert die git Operation als Teil seiner Befehlsoptionen sieht.

Weiß jemand, wie ich etwas wie die oben genannte Arbeit machen kann?

Dank

Antwort

6

Sie müssen den git Befehl in einer Unterschale auszuführen:

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) 

Eine weitere Möglichkeit der xargs Befehl lautet:

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

Es ist genauer zu sagen, dass Sie den Befehl git über 'command substitution' ausführen müssen. Die Befehlsersetzung verwendet eine Subshell, aber eine Subshell ist ein allgemeineres Konzept, das auch auf andere Weise verwendet wird (siehe http://tldp.org/LDP/abs/html/subshells.html#SUBSHELLSREF). –

+0

Danke dafür , Lief wie am Schnürchen! :) – newbie

+0

@R Samuel Klatchko: thx für den Link, wusste nicht, dass – soulmerge

3

Wenn Sie in einem git sind Shell (Bash) können Sie dies auch tun:

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

Funktioniert für mich auf Windows und Unix-basierten Systemen.

+1

Es sollte angemerkt werden, dass dies funktioniert nicht ein MacOS nach den '' zip'' man Seiten. – flu

Verwandte Themen