2017-05-30 52 views
2

我正在設置一個迭代項目目錄的jenkins作業,並在其中執行類似的操作。查找提交之間發生更改的目錄

雖然,現在,由於我有少量的目錄,所有這些目錄都沒有什麼大不了的。但我只想遍歷在GIT_PREVIOUS_COMMITGIT_COMMIT之間在內部發生更改的目錄。

什麼我現在的工作做:

for dir in */ 
do 
    cd $dir 
    # test a script exists 
    # execute the script 
    # upload the result.zip to an S3 bucket 
    cd .. 
done 

回答

3

你可以使用git diff--name-only選項。這將列出更改的文件:

$ git diff --name-only GIT_COMMIT..GIT_PREVIOUS_COMMIT 

app/controllers/some_controller.rb 
app/models/some_model.rb 
app/views/some/show.html.erb 
app/views/some/index.html.erb 

然後,您可以通過管道連接到sed來刪除文件名。然後排序&的uniq獲得目錄的唯一列表你有興趣:

sed 's,/*[^/]\+/*$,,' | sort | uniq 

app/controllers 
app/models 
app/views/some 
+1

我這樣做,有輕微的變化,用'切',因爲那樣表現會更好。 'git diff --name-only $ {GIT_COMMIT} .. $ {GIT_PREVIOUS_COMMIT} | cut'/'-f 1 |排序| uniq' – hjpotter92

+0

是的,這應該也是一樣。好一個。 – matov

0

您可以添加您自己的別名進行此類活動。它非常方便!

在你的.gitconfig添加這些:

38 # Difference between HEAD and HEAD^ 
    39 dbh = "!git ls --numstat -1" 
    40 # Difference between two commits 
    41 dbc = "!f() { git diff --name-status $1 $2; }; f" 

然後,你可以使用它們:

git dbc ab68a12 fc83334 # for diff between two commits. 

git dbh # for diff between previous and current HEAD. 
+0

'git ls'不是一個有效的命令! – hjpotter92

+0

Ls是另一個別名,我必須以漂亮的格式顯示日誌。你可以用log --decorate --date = relative簡單地替換ls –

相關問題