首先:是的,我已经在里面检查了this thread - 但我的情况有所不同。
我们这里有三个模块:
A
B
(A
的子模块)C
(B
的子模块)尝试执行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',不幸的是,这样的东西不起作用。
答案 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
submodule
:不要从.gitmodules
refs
:删除未使用的函数invalidate_ref_cache
mv
:在存在子模块的情况下移动文件时修复虚假警告ignore=all
rm
:删除从工作树中删除的子模块的.gitmodules
条目mv
:更新.gitmodules
中已移动子模块的路径条目parse_pathspec
:支持剥离/检查子模块路径其中一个补丁可能会增强子模块功能的稳健性 例如,可以使用you mention解决msysgit问题issue 99(commit 4b054402833)。