【发布时间】:2015-12-31 16:17:26
【问题描述】:
我有一个包含子模块的仓库。对于子模块的给定 SHA,我想在该子模块存在并具有给定 SHA 的 repo 中找到提交。
我将如何使用最新版本的 git 来做到这一点?
【问题讨论】:
标签: git
我有一个包含子模块的仓库。对于子模块的给定 SHA,我想在该子模块存在并具有给定 SHA 的 repo 中找到提交。
我将如何使用最新版本的 git 来做到这一点?
【问题讨论】:
标签: git
您可以使用git ls-tree 来读取 gitlink(special entry in the index)来读取子模块的 SHA1:
git ls-tree HEAD mysubmodule
160000 commit c0f065504bb0e8cfa2b107e975bb9dc5a34b0398 mysubmodule
这将包括子模块在父 repo 中记录的 SHA1。
知道了这一点,您可以将其与 git filter-branch 结合使用,使用索引过滤器(以避免每次提交都检查父 repo)
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>
这应该更容易。
【讨论】:
for-each-object 命令,比如 for-each-ref...