git提取出兩個版本之間的差別文件並打包 linux命令行

公司的項目原先是使用svn作版本管理,發佈項目的時候是採用打包的方式壓縮成zip格式的文件,而後用ftp上傳。隨着開發人員愈來愈多,需求變 化也比較多,常常在開發新功能時要調整線上的問題,在一個分支上進行開發就很是不方便。雖然svn也支持多分支開發,可是操做很是不便,因而就把項目的版 本管理切換成了git。linux

切換成git以後,爲了平緩的過分,發佈項目的時候仍是打算使用打包的方式,而後ftp上傳。那麼問題就來了:git如何提取出兩個提交之間的差別文件呢?git

一開始找了git format-patch和git archive都沒有找到須要的功能,後來就去查git diff命令,找到了方法。svn

git diff這個命令能比較兩個提交之間的差別,使用–name-only參數能夠只顯示文件名。例如:3d

$ git diff 608e120 4abe32e --name-only

git diff列出兩個提交之間差別的文件

git diff列出兩個提交之間差別的文件orm

這個輸出結果很是有意思,就是差別文件的相對地址,不正好是壓縮命令的參數嗎?因而立馬使用壓縮命令blog

$ zip update.zip c/environ.c ... 全部的文件...

就能成功打包了。只是這樣的話也太麻煩了吧,幸虧linux有提供一個命令xargs能將前一個命令的輸出轉成另一個命令的參數,按照這個思路就很是簡單了。排序

$ git diff 608e120 4abe32e --name-only | xargs zip update.zip

結合xargs進行打包

結合xargs進行打包ip

總結開發

其實這種發佈方式並非很是好,若是線上的環境也能使用版本管理就很是方便了,只是這須要多方面的的配合。從某種意義上來說,這種打包更新方式只是一種折中的處理方式。it

還一個問題是這樣的:提交的排序是按照時間來進行的,若是有分支合併進來的,可能分支裏的提交時間在上次發佈的提交時間以前,這樣是否會漏打包到文件呢?不會的,由於合併分支會產生一個新的提交,這個提交必定是在上次發佈的提交以後。

相關文章
相關標籤/搜索