Git 递归地遍历子模块并获取changelog
我用Git 递归地遍历子模块并获取changelog,git,Git,我用 git ls-tree ed2d14dc10cb9fd6b92a076cd52a8769b05c19cc submodule-name | grep -E -o "[0-9a-f]{40}" 要获取主项目提交为ed2d14dc10cb9fd6b92a076cd52a8769b05c19cc的子模块的提交?也就是说,如果主项目提交是ed2d14dc10cb9fd6b92a076cd52a8769b05c19cc,则会获取该提交时子模块的最新提交哈希 如何使用此命令递归地检索每个子模块的所
git ls-tree ed2d14dc10cb9fd6b92a076cd52a8769b05c19cc submodule-name | grep -E -o "[0-9a-f]{40}"
要获取主项目提交为ed2d14dc10cb9fd6b92a076cd52a8769b05c19cc的子模块的提交?也就是说,如果主项目提交是ed2d14dc10cb9fd6b92a076cd52a8769b05c19cc,则会获取该提交时子模块的最新提交哈希
如何使用此命令递归地检索每个子模块的所有提交哈希值,并使用每个子模块的最新哈希值创建git日志,以获得两个哈希值之间的changelog
例如,如果主项目的提交哈希值为,那么我想在a处获取子模块submodule1的最新提交哈希值:
hash1 = git ls-tree A submodule1 | grep -E -o "[0-9a-f]{40}"
如果主项目有B的最新提交散列,那么我想得到B的子模块submodule1的最新提交散列
hash2 = git ls-tree B submodule1 | grep -E -o "[0-9a-f]{40}"
然后我想得到每个子模块的两个哈希的git日志
git log -- submodule1 --oneline hash1..hash2
如何递归地为所有子模块执行此操作
git submodule foreach --recursive '
REV1=HEAD;
REV2=HEAD~10;
SHA1=$(cd $toplevel && git ls-tree $REV1 $path | grep -E -o "[0-9a-f]{40}");
SHA2=$(cd $toplevel && git ls-tree $REV2 $path | grep -E -o "[0-9a-f]{40}");
git log --oneline $SHA1...$SHA2'
git子模块的帮助页面
虽然我认为这很酷,但它可能有助于澄清您的意图 您想在两个不同的签出中比较所有子模块的日志吗?我想在主项目中只给出两个提交哈希的情况下比较子模块的日志。