Git:想要遍历分支上的所有提交,并在每个提交中列出文件

Jac*_*cko 11 git

我需要编写一个脚本

  1. 从最近的一个开始遍历分支上的所有提交
  2. 对于每个提交,迭代提交中的所有文件
  3. 如果找到类型为hbm.xml的文件,则将提交存储到文件并退出.

我有第2步的脚本:

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

现在,我需要弄清楚第1步.

CB *_*ley 17

就像是:

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
Run Code Online (Sandbox Code Playgroud)

请注意,git show只会列出在该提交中已更改的文件,如果您想知道是否存在与提交中的特定模式匹配的路径,则需要使用类似的内容git ls-tree.


Mic*_*zek 11

git rev-list 将以反向时间顺序列出从给定提交可到达的所有修订,因此您可以向其传递分支名称以向后获取该分支头的列表:

$ git rev-list master                                                                                    
a6060477b9dca7021bc34f373360f75064a0b728
7146d679312ab5425fe531390c6bb389cd9c8910
53e3d0c1e1239d0e846b3947c4a6da585960e02d
a91b80b91e9890f522fe8e83feda32b8c6eab7b6
...
Run Code Online (Sandbox Code Playgroud)