我有一个项目,最初我使用子模块来处理一些依赖的代码。事实证明子模块并不适合这个项目(而且在实际使用中很难),所以我正在将每个子模块转换为子树(使用新的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/
中的文件冲突。
我发现的解决方法是在git pull
之前使用rm -rf sub
,这样可以避免这个问题。
我的问题是,是否有任何命令行开关可以和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
git merge
的一个短板。而我正渴望着那个赏金。 - Maic López Sáenz