我需要写一个剧本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
现在,我需要弄清楚第一步。
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的东西。
git show
git ls-tree
3qpi33ja2#
git rev-list会按照时间倒序列出给定提交中所有可访问的版本号,所以你可以给它一个分支名称,以获得该分支头的倒序列表:
git rev-list
$ git rev-list master a6060477b9dca7021bc34f373360f75064a0b728 7146d679312ab5425fe531390c6bb389cd9c8910 53e3d0c1e1239d0e846b3947c4a6da585960e02d a91b80b91e9890f522fe8e83feda32b8c6eab7b6 ...
2条答案
按热度按时间lbsnaicq1#
例如:
请注意,
git show
只会列出在该提交中更改的文件,如果你想知道是否有一个路径与提交中的特定模式匹配,你需要使用类似git ls-tree
的东西。3qpi33ja2#
git rev-list
会按照时间倒序列出给定提交中所有可访问的版本号,所以你可以给它一个分支名称,以获得该分支头的倒序列表: