2

在瓷器模式下,git diff通告子模块更改:

$ cd /opt/staging # This is the main Git repository
$ cd software/zemke-rhyne # This is a submodule
$ git pull
$ git diff                                                                                                                  
diff --git a/software/zemke-rhyne b/software/zemke-rhyne
index 0fff2fc..cb69287 160000
--- a/software/zemke-rhyne
+++ b/software/zemke-rhyne
@@ -1 +1 @@
-Subproject commit 0fff2fc52bdc2a62a2647110e712b1b3baa48613
+Subproject commit cb69287a3540054ff85cd14199cf36b4b5098c1a

哪些管道命令可以提供以下信息?

  • 子模块更新,这里是 software/zemke-ryne
  • 旧哈希,这里是 0fff2fc52bdc2a62a2647110e712b1b3baa48613
  • 新的哈希,这里是 cb69287a3540054ff85cd14199cf36b4b5098c1a

例如,目标是自动化提交消息,以通过 git rev-list 简要记录更新子模块中的更改。

4

1 回答 1

1

为了找出子模块是否已更新,您可以使用

$ git diff-files --quiet software/zemke-rhyne

退出状态将指示子模块是最新的 (0) 还是过期的 (1)。

例如,旧哈希显示为ls-tree

$ git ls-tree @ software/zemke-rhyne
160000 commit 0fff2fc52bdc2a62a2647110e712b1b3baa48613  software/zemke-rhyne

另一种方法是

$ git ls-files -s software/zemke-rhyne
160000 0fff2fc52bdc2a62a2647110e712b1b3baa48613 0   software/zemke-rhyne

(有什么区别?如果有人可以发表评论会很棒......)

还有一种方法可以找出子模块是否已更新以及之前的哈希。如果子模块未修改,则以下命令的输出为空,否则如下所示:

$ git diff-files software/zemke-rhyne
:160000 160000 0fff2fc52bdc2a62a2647110e712b1b3baa48613 0000000000000000000000000000000000000000 M  software/zemke-rhyne

不幸的是,diff-files错过了显示更新哈希的绝佳机会。要查看它,我所能想到的就是rev-list在子模块目录中使用。这似乎有点不雅和脆弱……</p>

$ git -C software/zemke-rhyne rev-list -n 1 @
cb69287a3540054ff85cd14199cf36b4b5098c1a
于 2018-10-20T18:36:38.863 回答