2016-08-25 120 views
0

我目前在我的jenkins中有一個bash命令設置,它應該可以幫助我將文件添加到我的git。防止git在某些條件下壓縮任何文件

我所做的是我檢查自上次提交後發生更改的文件,然後壓縮這些文件,將它們解壓縮到一個目錄中,並通過ssh將它們移動到我的服務器。只要我不通過我的提交刪除文件,這可以毫無問題地工作。

當我刪除一個文件時,它會嘗試將該文件添加到zip文件中,然後導致錯誤,因爲文件不再存在(顯然)。

最初我的命令是這樣的:

git archive --output=publish/update.zip HEAD $(git diff --name-only $PREVIOUS $CURRENT)

目前它看起來像這樣:

git archive --output=publish/update.zip HEAD $(git diff --diff-filter=d --name-only $PREVIOUS $CURRENT)

什麼--diff-filter=d確實是從搜索中排除任何刪除的文件。 不過,我做到這一點,只有在我提交歸檔命令刪除的文件看起來像這樣的時候:

git archive --output=publish/update.zip HEAD

所以會發生什麼是有導致整個工作區與git後頭部指定文件壓縮並轉移到服務器。 顯然這不是我想要的。

有沒有人有任何想法我可以解決這個問題?

我的整個bash命令看起來像this

+0

你爲什麼要發送的文件(你是犯?)手動,而不是僅僅使用Git推/拉各自提交的? – rubenvb

+0

,因爲我不想碰任何服務器端。這是我可以在任意數量的站點和服務器上應用的解決方案。我有共享主機和VPS的人,什麼不是,所以我覺得這是最好的方式 – NoSixties

回答

0

使用git相對裁判和zip命令直接。

整個腳本可能是這樣的:

# Create remove.sh so it removes at least one file - itself 
printf "rm %q\n" remove.sh $(git diff --diff-filter=D --name-only HEAD~1) > remove.sh 
# Create update.zip so it contains at least one file - remove.sh 
zip update.zip remove.sh $(git diff --diff-filter=d --name-only HEAD~1)