【发布时间】:2021-09-12 10:58:04
【问题描述】:
作为我的任务的一部分,我需要将组件从三个地方合并到一个地方。换句话说,将文件夹(包括许多子文件夹和文件)移动到一个现有文件夹。
我正在使用 git mv 进行操作,但问题是,一旦我尝试将非合并分支合并(使用 git merge)到合并分支,我会遇到很多冲突,其中大部分与Git 刚刚移动到错误位置的文件。
知道为什么 Git 不知道如何正确处理它吗? (Git 版本是最新的。)
示例:
合并前:
│ └── dir1
│ │ └── python1
│ │ │ └── test1.py
│ └── dir2
│ │ └── python2
│ │ │ └── test2.py
│ └── dir3
│ │ └── python3
│ │ │ └── test3.py
合并后:
│ └── dir1
│ └── dir2
│ │ └── python1
│ │ │ └── test1.py
│ │ └── python2
│ │ │ └── test2.py
│ │ └── python3
│ │ │ └── test3.py
│ └── dir3
合并前(目标树):
│ └── dir1
│ │ └── python1
│ │ │ └── test1.py
│ │ │ └── test4.py
合并后:
│ └── dir1
│ └── dir2
│ │ └── python1
│ │ │ └── test1.py
│ │ └── python2
│ │ │ └── test2.py
│ │ │ └── test4.py
│ │ └── python3
│ │ │ └── test3.py
│ └── dir3
更新
我又添加了一个答案似乎不支持的案例:
合并后的源码树:
│ └── dir1
│ └── dir2
│ │ └── python1
│ │ │ └── test1.py
│ │ └── python2
│ │ │ └── test2.py
│ │ └── python3
│ │ │ └── test3.py
│ └── dir3
合并前(目标树):
│ └── dir1
│ │ └── python1
│ │ │ └── test1.py
│ │ │ └── test4.py
| | | └── new_test
│ │ │ └── test5.py
合并后(答案中出现ORT 命令):
│ └── dir1
│ │ └── python1
| | | └── new_test
│ │ │ └── test5.py
│ └── dir2
│ │ └── python1
│ │ │ └── test1.py
│ │ │ └── test4.py
│ │ └── python2
│ │ │ └── test2.py
│ │ └── python3
│ │ │ └── test3.py
│ └── dir3
如您所见,它检测到新文件及其新位置(test4.py),但没有检测到新文件夹(使用 test5.py)。我希望它也会将它移动到 python2 下的新位置,因为文件(test4.py)和文件夹(`new_test)都具有相同的父级(python1)。 我将与 GIT 支持团队核实并更新
【问题讨论】:
-
这需要细节或清晰,你不应该对不是代码的东西使用
code格式。 -
Tnx 的评论。我编辑了问题并添加了示例
-
除非我弄错了或事情发生了变化,否则 Git 内部并没有文件重命名的概念。
git mv只是为了方便,诸如git status之类的命令会尝试检测这种情况(删除了一个文件并创建了另一个内容大致相同的文件),但是当文件都被重命名时它会混淆 and 已修改,因此您可以在单独的步骤(提交)中执行这两项操作以保持清晰。不过我可能错了。 -
这可能不相关,但请自行决定:stackoverflow.com/questions/67067686/… 在那个问题中,我发现 Git 在移动文件方面的行为非常令人恼火且过度干预。
标签: git git-merge-conflict git-mv