我有一个项目,我最初将子模块用于一些依赖代码。事实证明,子模块并不真正适合这个项目(而且它们在实践中很难使用),所以我将每个子模块转换为子树(使用新git-subtree
功能)。
在我的工作存储库中,我已成功删除每个子模块并将旧的子模块存储库添加为子树。这没问题。
当我转到另一个克隆并尝试从第一个克隆中提取时,合并步骤中出现以下错误:
error: The following untracked working tree files would be overwritten by merge:
sub/.gitignore
sub/Makefile
sub/README
sub/src/main.c
... and so on for all files in sub/
Aborting
这似乎是因为文件从一开始sub/
就从未真正存在于主存储库中,并且当 Git 应用补丁进行更新.gitmodules
时,它不会删除包含子模块文件的目录。在处理下一次提交时,Git 尝试在其中创建新文件,sub/
这些文件现在是主存储库的一部分,所有这些文件都与sub/
.
我发现的解决方法是使用rm -rf sub
before git pull
,这样可以避免这个问题。
我的问题是,有没有我可以使用的命令行开关git merge
,上面写着“覆盖工作目录中碰巧存在的任何文件”?更好的功能git merge
是查看现有文件的内容,如果内容与它要创建的文件相同,则禁止显示错误消息并继续。
更新:我已经创建了演示这个问题的 Git 存储库,以准确显示我在说什么。重现:
$ git clone https://github.com/ghewgill/q14224966.git
$ cd q14224966
$ git submodule init
$ git submodule update
$ git merge origin/branch
这应该会导致错误消息
error: The following untracked working tree files would be overwritten by merge:
sub/Makefile
sub/README
sub/src/main.c
Please move or remove them before you can merge.
Aborting