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

dam*_*anb 7 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
Run Code Online (Sandbox Code Playgroud)

我的问题:我在git 1.7.9上,我需要克隆子模块的文件在我本地克隆中的确切位置,而不是git规定它们应该在哪里 - 就像git 1.7之前的行为一样. 8,我可以在子模块的克隆目录中找到克隆提交的所有文件.

关于如何......嗯,重新实现这一点的任何建议或想法?

dam*_*anb 8

找到了解决方案.

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

  • 您是否找到了更简单的解决方案?我遇到了同样的问题,并且我正在使用最新版本的 GIT。我应该能够像以前一样轻松地克隆,而不必搞乱所有这些废话。我希望我的子模块复制为可以修改和推送的合法存储库。 (2认同)