0

当我尝试 git pull 执行以下操作的提交(或一组提交)时,Git 中止合并:

  1. 删除位于子目录中的子模块
  2. 在子目录下添加子模块的内容(不同的文件,相同的文件名)

如果我将它拆分为每个操作的单独 git pull,我没有合并冲突。不过这是有问题的,因为其他用户在他们 git pull 第二次提交之前无法编译项目,只要有人没有拉第一次提交,我就无法推送。

有没有办法在 Git 中快速推进这种变化?

更新:

这是我的存储库结构:

|-- Common
|-- Components
|-- Lib
|-- Projects
|   |-- main_project
|   |   |-- some_binary
|   |   |-- some_other_binary
|   |   |-- Sources
|   |   |   |-- SUBMODULE_IS_HERE
|   |   |   |   |-- many_submodule_files.here
|   |   |   |-- files.here
|   |-- other_project
|   |-- other_project_2
|-- Resources
|-- .gitignore
|-- .gitmodules

这些是我从本地存储库执行的命令:

mv Projects/main_project/Sources/SUBMODULE_IS_HERE SUBMODULE_IS_HERE_tmp

git submodule deinit -f -- Projects/main_project/Sources/SUBMODULE_IS_HERE
rm -rf .git/modules/Projects/main_project/Sources/SUBMODULE_IS_HERE
git rm -rf Projects/main_project/Sources/SUBMODULE_IS_HERE
git rm .gitmodules
git commit -m "Removed submodule"
git push origin master

rm -rf SUBMODULE_IS_HERE_tmp/.git
rm SUBMODULE_IS_HERE_tmp/.gitignore
mv SUBMODULE_IS_HERE_tmp Projects/main_project/Sources/SUBMODULE_IS_HERE
git add .
git commit -m "Added submodule code back into main repository"
git push origin master

现在,这是不同本地存储库(例如同事的)的状态

$ git log --graph --oneline --all
* e8d95d3ec (origin/master, origin/HEAD) Added submodule code back into main repository
* 9a2fc256b Removed submodule
* 31aeff6da (HEAD -> master) fixed bug #4442

现在同事尝试 git pull 两个提交:

$ git pull origin master
From X:/repo-TEST
 * branch                master     -> FETCH_HEAD
error: The following untracked working tree files would be overwritten by merge:
        Projects/main_project/Sources/SUBMODULE_IS_HERE/many_files.here
        Projects/main_project/Sources
Aborting
Updating 31aeff6da..e8d95d3ec

我所说的“两个单独的 git pull”是指当我的同事拉出第一个删除子模块的提交时。这不会导致任何问题。之后,我推送第二次提交,它将文件添加回主存储库。最后,他们拉第二次提交。再一次,没有问题。

为什么这在上面段落中解释的“在两个 git pull 中”起作用,而在一个 git pull 中不起作用?

我能做些什么来让这项工作在一个 git pull 中完成吗?

4

0 回答 0