超级项目中的git子模块稍后提交在子模块本身中没有看到

时间:2013-06-15 01:05:55

标签: git git-submodules

我有一个超级模块“Research”,其中包含一个子模块“Simulator”。

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

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

当我克隆研究库时,并执行git子模块更新--init并在Research / Simulator中执行git log,我得到了这个

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

所以,通过克隆Research repo和pull submodule,我得到了更新版本的Simulator,而不是直接克隆Simulator repo ......

我认为另一个问题是由此造成的。

我不得不将git repos移动到New Server,当我测试克隆研究并从New Server中的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. “引用不是树”错误应该消失......
  3. 顺便说一下,Simualtor的工作目录已被删除,所以我只有repo才能使用。

1 个答案:

答案 0 :(得分:0)

  

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

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

  • 直接克隆repo克隆主分支(commit abcd
  • 通过子模块克隆它克隆来自master(commit efgh
  • 的分支上的固定SHA1 doe
  

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

如“git submodule tracking latest”中所述,git 1.8.2允许您定义跟踪给定分支的最新内容的子模块。

  

“引用不是树”错误应该消失。

检查您移动的裸.gitmodules'回购邮件的Research文件 有可能它仍然引用旧服务器作为子模块的URL Change it to the url of the new server