1

我有一个跟踪分支的子模块。它目前位于分支的头部。但是git submodule status提出了一个相当难看的标签。
该提交实际上是相关分支的当前负责人,无论是在子模块中还是在远程。

 % git submodule status
    168b1e6c54101dfa7b1b865197ab7ac660c56fcf common (tha-6-7-g168b1e6)
 % cat .gitmodules
    [submodule "common"]
    path = common
    url = git@github.com:basis-technology-corp/perceptron-segmentation-models.git
    branch = etrog-985-restructure

丑陋的字符串' tha-6-7-g....'来自哪里?它不是分支顶部提交上的标签。

4

1 回答 1

1

您的子模块跟踪一个分支,是的:它已在 .gitmodules 文件中注册

 git config -f .gitmodules submodule.<path>.branch

但是子模块的真实性质并没有改变:它的作用仍然是在你的父 repo 中引用一个固定的提交 SHA1。这就是git submodule status显示的内容,这保证了克隆您的 repo 的任何其他人最终将获得与您当前看到的相同的子模块。

git submodule status

显示子模块的状态。这将打印每个子模块的当前签出提交的 SHA-1,以及子模块路径和git describeSHA-1 的输出。

只有当您执行 a 时git submodule update --remote,它的 SHA1 才会更改,以反映远程分支的最新情况。
然后,您需要提交父 repo 才能注册子模块的新 SHA1。

父 repo 总是引用子模块 SHA1,而不是子模块分支。
分支名称可以来来去去,被重命名或删除。这不应该影响父 repo 恢复子模块的确切内容的能力。

于 2013-10-01T06:03:41.723 回答