2010-04-10 34 views
5

Tôi đang sử dụng Git để điều khiển phiên bản và không giống SVN Tôi đã không gặp phải một phương tiện vốn có để thực hiện xuất các tệp đã thay đổi giữa 2 bản sửa đổi, chi nhánh hoặc thẻ.Làm thế nào để bạn chuyển danh sách tập tin vào lệnh zip zip

Thay vào đó, tôi muốn sử dụng lệnh zip zip và chuyển cho nó một tập hợp tên tệp, tuy nhiên tên tệp là kết quả của lệnh khác git diff. Dưới đây là một ví dụ về những gì tôi đang cố gắng để đạt được:

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

Tuy nhiên ở trên không làm việc như tôi đoán lệnh 'zip' thấy hoạt động git như một phần của lệnh tùy chọn của nó.

Có ai đó biết cách tôi có thể làm một việc như công việc trên không?

Cảm ơn

Trả lời

6

Bạn cần phải thực hiện lệnh git trong một 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) 

Một lựa chọn khác là xargs lệnh:

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

Sẽ chính xác hơn khi nói rằng bạn cần thực hiện lệnh git thông qua 'lệnh thay thế'. Lệnh thay thế sử dụng một sub-shell, nhưng một sub-shell là một khái niệm tổng quát hơn được sử dụng theo những cách khác (xem http://tldp.org/LDP/abs/html/subshells.html#SUBSHELLSREF) –

+0

Cảm ơn vì điều này , làm việc như người ở! :) – newbie

+0

@R Samuel Klatchko: thx cho liên kết, không biết rằng – soulmerge

3

Nếu bạn đang ở trong một git shell (bash) bạn cũng có thể làm điều này:

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

Làm việc với tôi trên các hệ thống dựa trên Windows và Unix.

+1

Cần lưu ý rằng điều này không hoạt động trên MacOS theo trang '' zip''. – flu

Các vấn đề liên quan