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

vbopmzt1  于 10个月前  发布在  Git
关注(0)|答案(2)|浏览(113)

我需要写一个剧本
1.从最近的提交开始,遍历分支上的所有提交
1.对于每个提交,遍历提交中的所有文件
1.如果它找到hbm.xml类型的文件,则将提交存储到文件并退出。
我有一个步骤2的脚本:

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

现在,我需要弄清楚第一步。

lbsnaicq

lbsnaicq1#

例如:

branch=master
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的东西。

3qpi33ja

3qpi33ja2#

git rev-list会按照时间倒序列出给定提交中所有可访问的版本号,所以你可以给它一个分支名称,以获得该分支头的倒序列表:

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

相关问题