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
文件中存在绝对路径相关的问题。