2014-06-12 65 views
0

如何從選定的提交後從git存儲庫製作tar歸檔?沒有第一次/初始提交的Git歸檔

這個問題類似於Git archive all changes except first commit但我需要.tar歸檔作爲結果不是git補丁文件。

說明: 我爲一個奇怪的PHP CMS製作了「模塊」,其中沒有編寫擴展名的真正機制。爲了發佈我的模塊,我只需要將修改後的文件發送給客戶端,而我仍然需要在Git下創建所有CMS文件(全部僅在第一次提交時添加)。

+0

這是沒有意義的。你想要存檔什麼?如果你只想以焦油形式獲得工作目錄的當前狀態,那麼你可以簡單地使用['git archive'](http://stackoverflow.com/q/160608/456814)。如果你想從一個特定的提交後得到一組修改,你可以做一個diff,輸出到一個文件,然後tar文件。 **你想做什麼?** –

+0

我試圖讓tar檔案只有自第一次提交以來發生變化的文件。 – jmarceli

+0

這還不清楚。所以你不需要diff補丁,對嗎?你只需要整個文件本身?如果文件沒有改變,你不介意不在tar文件中包含文件? –

回答

1

因此,這個檔案的收件人沒有回購,但確實有一些提交的內容,你發送的替代品,他可以解開這個?

看來git的存檔的--output在Windows選項,在講述的重定向功能,正式拒絕將壓縮輸出寫入到它認爲什麼是終端的壓縮機出現故障,但是這很容易地工作圍繞:

git archive -o update-old-new.tgz newcommit \ 
     $(git diff --name-only --diff-filter=AM oldcommit..newcommit) | cat 

那最後是| cat是解決方法。

我忘記了archive,但使用它意味着您不必先結帳$ newcommit,這比之前的checkout;diff|tar組合好得多。

不過,這無法處理足夠大的更新,以致不能處理命令行限制,或者路徑名中的空格或其他惱人的字符。回退是在您的文件夾的頂層

git checkout newversion 
git diff --name-only --diff-filter=AM oldversion.. \ 
| tar Tczf - update-old-new.tgz 
+0

是的,你說得對,那是我的問題。收件人沒有GIT,他們只想接收更改的文件。 – jmarceli

0

運行以下命令:

tar cvfz files-changed.tgz `git diff <newrev> <oldrev> --stat --name-only ` 

e.g

tar cvfz files-changed.tgz `git diff HEAD HEAD~3 --stat --name-only ` 
+0

如果他不在客戶端嘗試更新的提交上,則會歸檔錯誤的文件版本。 – jthill

+0

在這種情況下,'客戶端正在嘗試升級'的版本將是'newrev'。 – FractalSpace

+0

...並且打包的文件將是當前檢出的任何版本,而不是newrev的版本。 – jthill