Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 递归地遍历子模块并获取changelog_Git - Fatal编程技术网

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子模块的帮助页面


虽然我认为这很酷,但它可能有助于澄清您的意图

您想在两个不同的签出中比较所有子模块的日志吗?我想在主项目中只给出两个提交哈希的情况下比较子模块的日志。