1

我有一个超级模块“研究”,其中包括一个子模块“模拟器”。

当我克隆模拟器存储库并执行 git log 时,我得到了这个

~/Simulator$ git log
commit abcd...
Date: Feb 1.......
........

当我克隆 Research 存储库,并在 Research/Simulator 中执行 git submodule update --init 并执行 git log 时,我得到了这个

~/Research/Simulator$ git log
commit efgh...
Date: Feb 2.......
........

因此,通过克隆 Research repo 并拉取子模块,与直接克隆 Simulator repo 相比,我得到了更新版本的模拟器......

我有另一个问题,我认为是由这个引起的。

我不得不将 git repos 移动到新服务器,当我测试克隆研究并从新服务器的 repo 中提取子模块时,我得到了这个,

~/Research_test$ git submodule update
Cloning into Simulator...
....
fatal: reference is not a tree: efgh...
Unable to checkout 'efgh...' in submodule path 'Simulator'

有趣的是,当我从旧服务器克隆研究并拉取子模块时,它成功拉取了模拟器。(好吧,就像我之前解释的那样有点奇怪)

我通过简单地复制存储库(裸)目​​录来迁移 repo

我的目标是

  1. 当我直接克隆模拟器时,它应该拉最新版本....
  2. “参考不是树”错误应该消失......

顺便说一句,Simualtor 的工作目录已被删除,所以我只有 repo 可以使用。

4

1 回答 1

0

通过克隆研究回购和拉子模块,我得到了较新版本的模拟器,而不是直接克隆模拟器回购......

子模块可能设置为显示在与默认分支不同的分支上完成的提交。

  • 直接克隆 repo 克隆 master 分支(提交abcd
  • 通过子模块克隆它 从 master (commit efgh)的分支上克隆一个固定的 SHA1 doe

当我直接克隆模拟器时,它应该拉最新版本

正如“ git submodule tracking latest ”中提到的,git 1.8.2 允许你定义一个跟踪给定分支的最新的子模块。

“参考不是树”错误应该消失。

检查您移动.gitmodules的裸 ' ' 存储库的文件。 很有可能它仍然引用旧服务器作为子模块的 url。将其更改为新服务器的 urlResearch

于 2013-06-15T03:11:51.267 回答