2011-05-10 21 views
9

我需要編寫一個腳本,將混帳:希望通過對分公司所有提交迭代,並在每個列表文件提交

  1. 迭代通過所有分支上提交的,從最近的
  2. 開始
  3. 每個提交,遍歷所有文件在提交
  4. 如果發現類型的hbm.xml的文件,存儲在承諾文件,並退出。

我對第2步的腳本:

for i in `git show --pretty="format:" --name-only SHA1 | grep '.*\.hbm\.xml' `; do 
    # call script here..... 
    exit 
done 

現在,我需要弄清楚步驟1

回答

13

Something li柯:

for commit in $(git rev-list $branch) 
do 
    if git ls-tree --name-only -r $commit | grep -q '\.hbm\.xml$'; then 
     echo $commit 
     exit 0 
    fi 
done 

注意git show將只列出,如果你想知道是否存在一個承諾,你需要使用像git ls-tree匹配的特定模式的路徑已經改變了該提交,文件。查爾斯,謝謝,

+0

謝謝,查爾斯。實際上,我只希望提交文件的提交。 – Jacko 2011-05-10 18:16:24

8

git rev-list將列出給予到達的所有提交的修改時間倒序排列,所以你可以通過一個分支名稱來獲取該分支頭的列表:

$ git rev-list master                      
a6060477b9dca7021bc34f373360f75064a0b728 
7146d679312ab5425fe531390c6bb389cd9c8910 
53e3d0c1e1239d0e846b3947c4a6da585960e02d 
a91b80b91e9890f522fe8e83feda32b8c6eab7b6 
...