我有一个有子模块的仓库。对于子模块的给定SHA,我想在repo中找到这个子模块存在且具有给定SHA的提交。
如何使用最新版本的git进行此操作?
答案 0 :(得分:0)
您可以使用git ls-tree
来读取 gitlink (a special entry in the index)来阅读子模块的SHA1:
git ls-tree HEAD mysubmodule
160000 commit c0f065504bb0e8cfa2b107e975bb9dc5a34b0398 mysubmodule
这将包括子模块在父仓库中记录的SHA1。
知道这一点,您可以使用索引过滤器将其与git filter-branch
结合使用(以避免每次提交都必须签出父回购)
git filter-branch --prune-empty --index-filter 'git ls-tree mysubmodule' -- --all|grep <yourSHA1>
组合git rev-list
和git ls-tree
的shell方法可能更清晰:
#!/bin/sh
for r in $(git rev-list FIRST_REV..LAST_REV)
do
git ls-tree $r mysubmodule
done | grep <yourSHA1>
git for-each-ref --contains <SHA1>
这应该更容易。