dav*_*idA 43 git diff git-submodules
有没有办法,实际上没有检查父提交,根据父克隆中的提交ID确定子模块的SHA-1提交ID?我知道我可以通过'git submodule'找到当前关联的SHA-1.
这是一个例子:我有一个带有单个子模块'foo'的克隆,它在上个月已经改变了好几次.我在父克隆中有一个标签,这个标签是几个星期,叫做'release-1.2.3'.我想知道'foo'的关联SHA-1对于这个标记的提交是什么.我可以简单地检查'release-1.2.3'并使用git-submodule来查看,但我想知道是否有办法在不影响工作树的情况下执行此操作,因为我想编写脚本.
我想这样做是因为我想构建一个脚本来对父存储库中两个提交之间的子模块中的所有更改执行'diff' - 即"告诉我在这两个提交之间的子模块'foo'中更改了哪些文件'父母."
Jos*_*Lee 53
您可以使用git-ls-tree在给定的提交期间查看给定路径的SHA-1 id:
$ git ls-tree released-1.2.3 foo
160000 commit c0f065504bb0e8cfa2b107e975bb9dc5a34b0398 foo
Run Code Online (Sandbox Code Playgroud)
(我的第一个想法是git show released-1.2.3 foo,但是失败的是"致命的:坏的对象".)
由于您正在编写输出脚本,您可能希望自己只获取SHA-1 ID,例如:
$ git ls-tree released-1.2.3 foo | awk '{print $3}'
c0f065504bb0e8cfa2b107e975bb9dc5a34b0398
Run Code Online (Sandbox Code Playgroud)
另外:在围绕git编写脚本时,请尝试坚持管道命令,如手册中所述.它们具有更稳定的界面,而更熟悉的"瓷器"命令可能以不兼容的方式改变.
小智 6
这个对我有用:
$ git rev-parse released-1.2.3^{commit}:foo
<SHA1>
Run Code Online (Sandbox Code Playgroud)
也许在脚本中也很容易使用.