恢复到子模块文件系统位置的pre-git v1.7.8 git子模块行为

时间:2012-02-27 03:03:55

标签: git git-submodules

最近在git 1.7.8中,引入了一个“处理”子模块的变化与以前不同 - https://lkml.org/lkml/2011/12/2/316

  

使用“git submodule init”填充新的子模块目录时,   子模块的$ GIT_DIR元信息目录是在里面创建的   $ GIT_DIR / modules //超级项目的目录并引用   通过gitfile机制。这是为了使切换成为可能   在具有和没有的超级项目中的提交之间   树中的子模块没有重新克隆。

现在,不是将子模块克隆到指定的目录中,而是创建一个.git 文件,其中包含:

$ cat .git
gitdir: ../../../../.git/modules/app/src/emberlabs/openflame

我的问题:我正在使用git 1.7.9,我需要将克隆的子模块的文件放在我本地克隆中的确切位置,而不是git指示它们应该在哪里 - 就像之前的行为一样git 1.7.8,我可以使用子模块的clone目录并查找克隆提交的所有文件。

有关如何......好的, 重新 的任何建议或想法 - 解决这个问题?

1 个答案:

答案 0 :(得分:8)

找到了解决方案。

编辑文件{$project_root}/.git/modules/{$submodule_path}/.git/config并删除worktree下的[core]行,并将整个.git目录从{$project_root}/.git/modules/{$submodule_path}/复制到子模块的实际位置(删除后)子模块所在的.git 文件,然后运行git checkout -f {$branch}似乎已经重新启动了所有文件。但并不完全确定它是一个完整的解决方案。