【问题标题】:Git mv doesn't work as expected (wrong files location)Git mv 无法按预期工作(文件位置错误)
【发布时间】: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


【解决方案1】:

答案与此线程中的相同(我写的时候没有意识到): https://stackoverflow.com/a/69114710/11705021

【讨论】:

  • 是的,新的合并策略 (ORT) 似乎是旧递归策略的一个很好的(最近的)替代品。
猜你喜欢
  • 1970-01-01
  • 2013-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多