2011-05-10 37 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 
...