2010-06-08 39 views
10

我對Git很新,而且我有一個小問題。如何從Git導出所有更改/添加的文件?

在SVN [這感覺就像阿爾伯特叔叔......「在戰爭期間......」]當我想用我最新的變化更新一個製作網站時,我會做一個diff在TSVN中導出並在兩個修訂之間導出所有更改/添加的文件。正如你可以想象的那樣,事後很容易將這些文件傳送到生產站點。

但是,似乎我無法在Git中找到「導出更改的文件」選項。我可以做一個差異和看到的變化,我可以得到一個列表的文件,但我不能實際導出它們。有沒有合理的方法來做到這一點?我錯過了一些簡單的東西嗎

只是爲了再次澄清,我需要導出所有兩個特定提交之間的更改。

在此先感謝!

回答

14

你想如何導出它們?你說你已經有了一份清單;你還想要什麼?假設你正在得到你的名單git diff --name-only ...

git archive --output=<file> HEAD $(git diff --name-only ...) 

tar -czf <file> $(git diff --name-only ...) 

cp $(git diff --name-only ...) <export-directory> 

這樣的事情?

或者你甚至可以使用diff本身 - 它可以應用於git apply(或者甚至patch,我相信)。

+1

第一個選項是爲我工作[此工程在Windows混帳的bash]!理想情況下,我會使用cp變體,但保留文件夾結構(我猜這是git diff的參數問題?)我簡直不敢相信這是簡單的..謝謝! – 2010-06-08 13:47:35

+0

剛剛看到你的編輯..不幸的是,我不能使用'git apply'或'patch',我只有FTP訪問站點: -/ – 2010-06-08 13:49:08

+0

@dr Hannibal Lecter:是的,我想你需要傳遞實際文件。是的,命令替換('$(...)')是在Linux shell中使所有可能(和簡單)都成爲關鍵事物之一。 – Cascabel 2010-06-08 13:56:31

2

從幾個在here答案借款,這裏是另一種方式來導出在工作區中修改的文件:

git diff --diff-filter=ACMRT --name-only HEAD | xargs tar -rf export.tar 

您可能需要執行事先下面添加未跟蹤文件,如果您需要包括他們在DIFF:

git add * 

相關問題