Git子模块更新:引用不是树...但是在那里提交

时间:2014-01-31 15:41:51

标签: git git-submodules

首先:是的,我已经在里面检查了this thread - 但我的情况有所不同。

我们这里有三个模块:

  • 应用程序A
  • 其基础库BA的子模块)
  • 组件CB的子模块)

尝试执行git clone --recursive https://url_of_A/时,当git尝试获取C时出现错误:

Cloning into 'path/of/C'...
[...]
Checking connectivity... done
fatal: reference is not a tree: 92405dd9027a2d55d9dd6f5b26494eee0009e297
Unable to checkout '92405dd9027a2d55d9dd6f5b26494eee0009e297' 
   in submodule path 'path/to/C'

但是猜猜看,git clone --recursive https://url_of_B/时没有错误 - 即使签出的修订明显相同

Cloning into 'path/of/C'...
Checking connectivity... done
Submodule path 'path/to/C': checked out '92405dd9027a2d55d9dd6f5b26494eee0009e297'

...即使C的远程路径相同!

更令人费解的是:仅在Windows 7/8计算机上观察到此行为(至少到目前为止)。 Windows Vista / XP机器以某种方式使用相同的存储库进行深度克隆而没有任何故障 - 我真的很想知道这是如何依赖于平台的。


对于这种情况,现在的问题是:1)是否有任何人有同样的问题,2)可能是什么解决方法?请注意,所有组件(A,B和C)不在我们的控制之下,所以'切换到git-tree',不幸的是,这样的东西不起作用。

1 个答案:

答案 0 :(得分:4)

作为第一个(不完整的)答案,git 1.8.4和1.8.5.2之间的许多子模块更正:

C:\Users\VonC\prog\git\git>git log -Ssubmodule v1.8.4..v1.8.5.2

其中一个补丁可能会增强子模块功能的稳健性 例如,可以使用you mention解决msysgit问题issue 99commit 4b054402833)。