最近Git的一次更改改变了在使用子模块时处理
然后,在每个子模块中,会创建一个文件来指向新位置的
在我的项目中,有以下
当我执行
.git
目录的方式。现在不再是每个子模块都有一个.git
目录,而是一切都在“根层级”.git
目录中(对应于包括子模块的工作副本)。然后,在每个子模块中,会创建一个文件来指向新位置的
.git
目录。在我的项目中,有以下
.gitmodules
文件:[submodule "tests/shared-tests"]
path = tests/shared-tests
url = git://github.com/roboptim/roboptim-shared-tests.git
[submodule "cmake"]
path = cmake
url = git://github.com/jrl-umi3218/jrl-cmakemodules.git
当我执行
git clone --recursive
命令时,我会得到以下结果:$ cat cmake/.git
gitdir: /home/moulard/profiles/default-x86_64-linux-ubuntu-12.04.1/src/unstable/roboptim/roboptim-core/.git/modules/cmake
我目前使用的是Git 1.8.1.5版本。
我的问题是:
- 为什么这种行为发生了变化?我没有看到任何明显的利益与这种新策略。
- 那么我该如何安全地移动工作副本呢?(如果我移动工作副本,我会收到一个错误消息,告诉我损坏的gitdir路径不再是Git仓库)
请注意,这不同于之前的问题移动包含子模块的git存储库的父目录,因为我确定这不是由于我的.gitmodules
文件中存在绝对路径所导致的问题。
git rm -rf cmake
会产生以下结果:fatal: Not a git repository: /home/moulard/profiles/default-x86_64-linux-ubuntu-12.04.1/src/unstable/roboptim/roboptim-core/.git/modules/cmake
(而且该目录仍然存在)。基本上,除非我手动编辑文件以修复路径,否则git
完全无法使用。 - Thomas Moulardgit rm
而不是简单的rm
] - Thomas Moulard