【问题标题】:git submodule tracking latestgit子模块跟踪最新
【发布时间】:2012-02-29 16:00:40
【问题描述】:

我们正在将我们的(巨大的)项目迁移到 git,并且我们正在考虑使用子模块。我们的计划是在超级项目中设置三个不同的负责人:

发布,稳定,最新

项目负责人将处理发布和稳定分支。他们将根据需要移动子模块。

问题是“最新”的头。我们希望超级项目“最新”头跟踪所有子模块的主分支(自动)。如果它能够显示所有提交到子模块的历史记录,那就太好了。

我看过 gitslave,但它并不是我们想要的。有什么建议吗?

【问题讨论】:

  • 当你要求一个工具时,我只想连接这个收集做同样事情的单行者的问题:stackoverflow.com/questions/1030169/…
  • Git 现在提供使用子模块跟踪最新信息:请参阅我编辑的答案。

标签: git git-submodules git-track


【解决方案1】:

编辑 (2020.12.28):自 2020 年 10 月起,GitHub 将默认 ma​​ster 分支更改为 ma​​in 分支。请参阅 https://github.com/github/renaming
下面的这个答案仍然反映了旧的命名约定。


2013 年 3 月更新

Git 1.8.2 增加了跟踪分支的可能性。

git submodule”开始学习一种新模式以与远程分支的尖端集成(而不是与超级项目的 gitlink 中记录的提交集成)。

# add submodule to track master branch
git submodule add -b master [URL to Git repo];

# update your submodule
git submodule update --remote 

如果您现在希望跟踪分支已经存在子模块,请参阅“how to make an existing submodule track a branch”。

有关子模块的一般信息,另请参阅Vogella's tutorial on submodules

注意:

git submodule add -b . [URL to Git repo];
                    ^^^

git submodule man page:

一个特殊的值.用来表示子模块中的分支名称应该和当前仓库中的当前分支同名


commit b928922727d6691a3bdc28160f93f25712c565f6:

submodule add:如果给出--branch,记录在.gitmodules

签字人:W. Trevor King

这使您可以在添加新子模块时轻松地在 .gitmodules 中记录 submodule.<name>.branch 选项。有了这个补丁,

$ git submodule add -b <branch> <repository> [<path>]
$ git config -f .gitmodules submodule.<path>.branch <branch>

减少到

$ git submodule add -b <branch> <repository> [<path>]

这意味着将来调用

$ git submodule update --remote ...

将从您用于初始化子模块的同一分支获取更新,这通常是您想要的。


原始答案(2012 年 2 月):

子模块是由父仓库引用的单个提交。
由于它本身就是一个 Git 存储库,因此可以通过该子模块中的 git log 访问“所有提交的历史记录”。

因此,要让父级自动跟踪子模块给定分支的最新提交,它需要:

  • 子模块中的cd
  • git fetch/pull 以确保它在正确的分支上有最新的提交
  • cd 回到父仓库
  • 添加和提交以记录子模块的新提交。

gitslave(您已经看过)似乎是最合适的,including for the commit operation

由于需要签出正确的子模块分支,进行更改,提交,然后进入超级项目并提交提交,因此对子模块进行更改有点烦人(或至少记录新的子模块的位置)。

其他选择是detailed here

【讨论】:

  • @BraveNewMath 您需要检查子模块中的正确分支,然后转到您的父仓库并输入:git config -f .gitmodules submodule.&lt;path&gt;.branch &lt;branch&gt;。添加所有内容,提交并推送。
  • @BraveNewMath 我详细介绍了在stackoverflow.com/a/18799234/6309 中创建子模块跟踪分支的所有步骤。
  • 如果您不想在更新时出现分离的头部,请务必使用--remote 标签,想知道为什么您新提取的代码似乎落后于 master!
  • @DC_ 我同意“这个答案”(因为我写了它)。 “跟随分支”功能旨在将子模块更新为分支的最新提交。完成后,您仍然必须在父 repo 中添加并提交新的子模块状态。下一个克隆将检查该状态(无头)。
  • @VonC 所以为了进一步澄清,“跟随一个分支”功能只会影响git submodule update 命令的行为,它会告诉它哪个提交(即master 上的最新提交)来更新子模块要,不会自动导致父 repo 更新子模块在克隆时指向的提交?
猜你喜欢
  • 2017-07-23
  • 1970-01-01
  • 2017-10-21
  • 2013-09-24
  • 2010-11-08
  • 2019-02-16
  • 2013-12-05
  • 2011-07-04
  • 2013-11-27
相关资源
最近更新 更多