【问题标题】:Auto populate submodule version to parent module自动将子模块版本填充到父模块
【发布时间】:2013-05-06 20:54:09
【问题描述】:

我正在使用 git version 1.8.1.msysgit.1 运行 Windows

我有两个单独的存储库(例如 1 和 2,均由我维护),并且存储库 2 作为子模块(作为副本)添加到存储库 1。然后我更改子模块中的某些内容并推送到远程。如果我在远程检查子模块(repo 2)的版本作为单独的 repo,我会得到最新的哈希。但是,如果在远程检查子模块的版本,它仍然是旧的哈希。我不能自动化吗? (远程我是github)

【问题讨论】:

  • 如果您推送到远程存储库,另一个应该拉取更改。
  • 我无法远程获取父 repo 以显示新版本号。我将子模块(从任一位置,作为子模块或独立模块)推送到遥控器。它的 repo 使用新的哈希数更新。父仓库仍然显示a.submodule@oldhash。如果我尝试从远程拉出父仓库,它会说一切都是最新的。如果需要,我可以制作图表以进行说明。
  • 父仓库中的一切都是最新的。父 repo 只跟踪子模块所在的版本。如果您在父级中执行git status,您应该会看到子模块说有“新提交”。您必须 git add submodulename 告诉父 repo 更新其对子模块当前提交的引用,然后 commit 它。正如您必须在您的仓库中更改 addcommit 一样,您必须执行相同的操作来跟踪子模块中的更改。
  • 好的,谢谢。我让它像这样工作。仍然对子模块很困惑。父模块和子模块之间只有一个小链接,好像是.gitmodules文件。

标签: git git-submodules


【解决方案1】:

创建一个子模块只是通过.gitmodules.git/config 文件告诉git,你的repo 中的特定文件夹应该被视为一个单独的实体,其中包含来自其他地方的整个其他repo。您可以将整个文件夹视为与其他所有内容一起进行版本控制的文件,但您在 repo 中实际版本控制的是特定 repo 所在的提交。

假设您已经使用这样的子模块创建了一个 repo:

git init (or clone) a repo
git submodule add otherrepo path/to/otherrepo

以下是子模块的基本工作流程:

# either make some changes to the submodule yourself...
cd otherrepo
make some changes
git add --update .
git commit -m'Change some things'

# ...or pull some in from elsewhere
cd otherrepo
git pull

# now out in your repo, track those changes
cd ..
git add otherrepo
git commit -m'Point to latest commit in otherrepo'

让我们暂时忘记子模块。您可以更改存储库中的文件,但永远不要添加/提交它们。该文件将始终继续工作,因为当它违反 repo 中其他地方的更改时,您会修复它。它将与HEAD 其余部分的情况相匹配。但是,您将无法在任何地方回滚。该文件将保持最新状态,但您的存储库历史不会正确跟踪它在特定时间的位置。

子模块就是这样。您可以将整个子模块视为一个文件。无论提交到其中的更改是什么,您的 repo 唯一关心的事情 - 它唯一允许关心的事情 - 就是您的 repo 所说的提交是子模块中的当前提交。它无法进入并处理特定文件,因此它所能做的就是跟踪整个子模块在哪个提交上,这就是它的作用。但是,就像前面示例中的文件一样,您必须小心地将子模块保持在正确的提交位置,并告诉您的存储库是哪个提交,否则您的历史将无法正确知道将子模块回滚到哪里当您在自己的仓库中回到过去时。

您必须将它与其他文件一起添加/提交,以告知您的 repo 的历史“这是这个子模块现在应该在的位置。”如果你这样做,那么你的 repo 上的每个新提交都会重新添加到 repo 上次添加并提交到你的 repo 中的任何地方。如果您将子模块向前移动几个提交,或者如果您拉入一些子模块提交,并且您希望这些新提交现在成为您的回购历史的一部分,那么您需要在您的回购中添加并提交子模块到更新它认为是当前的提交。

【讨论】:

  • 哇,感谢您花时间向我正确解释。如果 stack 有这个功能,我会给你一杯啤酒^^
猜你喜欢
  • 2014-04-12
  • 2015-10-07
  • 1970-01-01
  • 2011-01-21
  • 2021-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多