2012-05-23 59 views
4

我試圖將多個提交(包含提交消息中特定故障單號1234的提交)導出到修補程序文件。作爲補丁導出特定的Git提交

編輯工作腳本是https://github.com/amenk/SelfScripts/blob/master/git-extract-patches

這是我

#!/bin/bash -x 
commits=`git log --pretty=oneline | grep "#1234" | cut -f1 -d" "` 
no=1; 
for COMMIT in $commits 
do 
    git format-patch -1 $COMMIT --start-number=$no 
    no=$(($no+1)) 
done 

但由於某些原因git的格式補丁的執行失敗:

$ ./getpatches.sh 
++ git log --pretty=oneline 
++ grep '#6809' 
++ cut -f1 '-d ' 
+ commits='da591d66f05513488ee06857edc9d24a046c179d 
4fd781da9cc503b961f8e4c42bbb136d9e3c1806 
3a9311f5507f91f830b44673c57f672e7aabaac0' 
+ no=1 
+ for COMMIT in '$commits' 
+ git format-patch -1 'da591d66f05513488ee06857edc9d24a046c179d' --start-number=1 
fatal: ambiguous argument 'da591d66f05513488ee06857edc9d24a046c179d': unknown revision or path not in the working tree. 
Use '--' to separate paths from revisions 

當我手動撥打git format-patch -1 'da591d66f05513488ee06857edc9d24a046c179d' --start-number=1,一切都很好。

編輯:

我認爲這是值得用引號。如果我添加一個git log | grep $COMMIT進入死循環,我收到以下錯誤:

+ grep '992ab41d3539539bd609209beed33a9de2f4277a' 
grep: Unmatched [ or [^ 

另一個interseting效果是,如果我在for循環硬編碼grep '992ab41d3539539bd609209beed33a9de2f4277a',因爲-x選項bash的命令輸出(是不帶引號和它的作品。

+ grep 992ab41d3539539bd609209beed33a9de2f4277a 

在哪裏這些報價來自何處,我如何擺脫他們?

+0

腳本正常工作一個在我的機器(我的倉庫)。我不知道什麼是錯的。您的存儲庫是否可公開訪問 – miaout17

+0

它對我來說也很好!我無法猜測你的最後有什麼問題:( – positron

+0

對不起,git倉庫不公開,你是否在一個包含提交信息的版本庫中執行它,其中包含「#1234」的消息,否則它不會嘗試做任何事情。 – Alex

回答

4

我混帳隱式的使用--color選項,這樣的$COMMIT字符串包含一些顏色代碼。所以這搞砸了解析。有趣的是,這些顏色也包含在我的錯誤信息中。

但你沒有看到終端(這只是豐富多彩),也沒有粘貼到堆棧溢出後。

解決的辦法是:

 
commits=`git log --no-color --pretty=oneline | grep "#1234" | cut -f1 -d" "` 
1

有越來越提交的名單更簡單的方法:

git log --format=%H --grep "CAT-300"