【问题标题】:Get latest commit from a branch other than master branch to submodule从主分支以外的分支获取最新提交到子模块
【发布时间】:2020-12-08 00:28:38
【问题描述】:

我有 2 个 ADO 存储库 - Repo1 和 Repo2

Repo1 设置为 Repo2 中的子模块

[submodule "Repo1"]
    path = Repo1
    url = https://xyz.visualstudio.com/DefaultCollection/abc/_git/Repo1

假设我在 Repo1 中进行了更改,并将新的提交添加到“测试”分支(NOT“主”分支)。

我需要在 Repo2 的子模块中获得该提交。

当我尝试时:

git clone <url-of-Repo2>
cd Repo1
git submodule update --init --recursive

我只看到“master”分支的最新提交,而不是“test”分支。如何从“测试”分支获取最新提交到子模块?

【问题讨论】:

  • 超级项目告诉子模块通过原始哈希 ID 检查提交。 分行名称不要进入这张图片。另请参阅我最近对this question 的回复。不完全相同,但应该可以帮助您思考问题。
  • 谢谢!我知道超级项目告诉子模块通过原始哈希 ID 检查提交。我的问题是如何从子模块中的测试分支获取最新的提交原始哈希 ID?
  • 啊,那么就像jthill said:进入子模块并签出/切换到所需的提交(git -C path/to/submodule checkout ...),然后将子模块添加回超级项目中(以获得正确的提交哈希使用git add path/to/submodule 将 ID 放入 GIt 的索引中),然后在超级项目中进行新的提交。他的回答中的git commit -am ... 只是添加和提交合二为一。

标签: git azure-devops git-submodules


【解决方案1】:

使用子模块在 repos 中更新您的子模块,而不是在子模块本身中。

git -C Repo1 checkout test

如果您想添加/提交它,请执行此操作,

git commit -am "Update Repo1 to its 'test' branch tip"

【讨论】:

  • 谢谢!使用您建议的方法,我在 Repo2 的子模块中进行了更新并添加了一个新的提交。这意味着带有子模块的 Repo2 将有此提交,而 Repo1 将不会有此提交正确?
  • 子模块只是一个普通的存储库,它提交了一些其他历史记录,希望在特定的地方签出。 git submodule 命令可以帮助您处理此类存储库,但它并没有做任何神秘的事情。回购的git add 添加了回购的HEAD 提交ID。当您提交时,它会将提交 id 放入快照中,就像将 blob id 放入快照中一样,唯一的区别是,Git 期望 blob 的实际内容与快照一起打包。对于提交 ID,它不会,而不是 Git 将 blob 内容放在那里,您可以找到该提交并在那里检查。
猜你喜欢
  • 2021-06-09
  • 1970-01-01
  • 2022-08-16
  • 1970-01-01
  • 2016-09-24
  • 1970-01-01
  • 2013-03-18
  • 1970-01-01
  • 2012-01-25
相关资源
最近更新 更多