他们添加的 git 重命名冲突 - git 将重命名目录中的相同文件识别为新文件

2023-12-13

我已经重命名了一个目录并将其合并到我的主分支中,当合并另一个分支时,git 将重命名的目录中的相同文件识别为新文件。

当合并到另一个分支时,我得到该目录中相同文件“由他们添加”的合并冲突:

added by them: theirDir/same_file_name.xxx

我已重命名他们分支中的目录以匹配并继续遇到“由他们添加”冲突。

当我尝试结帐时——我们的我得到了

$ git checkout dir/same_file_name.xxx --ours

error: path 'dir/same_file_name.xxx' does not have our version

此时实际删除这个文件,合并完成后删除该文件。

我该如何解决这个冲突?

--- m ----\ ------------  m1 --------------- mx ------- *!*
     \     \            /   \                /         /  
      \     dir-rename-/     file_revisions-/         /
       \                                             /
        f2 ---------- file added by them conflict --/

在合并冲突之前,已发生来自多个分支的多个文件修订。


不要使用 msysgit 1.9.5,而是尝试适用于 Windows 的最新 Git:

从 Git 2.18 开始, git status更好地检测重命名(文件和文件夹)


使用 Git 2.33(2021 年第 3 季度),它将更进一步,管理基于内容的重命名检测and目录重命名检测。

但仅限于新的合并策略ORT ("表面上递归的双胞胎").

See commit 3585d0e, commit a492d53, commit 806f832 (30 Jun 2021) by Elijah Newren (newren).
(Merged by Junio C Hamano -- gitster -- in commit d3b88be, 16 Jul 2021)

merge-recursive:处理重命名为自身的情况

Reported-by: Anders Kaseorg
Signed-off-by: Elijah Newren

目录重命名检测可能会导致传递重命名,例如如果历史的两个不同方面各做一半:

A/file -> B/file
B/     -> C/

然后目录重命名检测传递重命名给我们

A/file -> C/file

然而,当 C/ == A/ 时,请注意,这给了我们

A/file -> A/file.

合并递归假设任何重命名D -> E将有D != E.
虽然这几乎总是正确的,但上面的情况是一个特殊情况,但事实并非如此。
因此,我们不能执行诸如删除重命名源之类的操作,我们不能假设路径 E 中存在的文件意味着重命名/添加冲突,并且我们必须小心输出中最终出现的阶段。

这个改变感觉有点hackish。
令人惊讶的是,我花了很多时间才找到,并且考虑到合并递归的设计导致它尝试枚举边缘和角落情况的所有组合,并为每个组合提供特殊代码,我担心如果我们可以的话,其他地方还需要其他类似的修复提出正确的特殊测试用例。
也许审计可以排除这种可能性,但我没有精力。
merge-recursive 应该消亡,而且由于它无论如何都会被淘汰,因此狭隘地修复这个特定的错误必须足够好。


Git 2.35(2022 年第一季度)修正了 ort 合并策略中的一个极端情况错误。

See commit d30126c (28 Dec 2021) by Elijah Newren (newren).
(Merged by Junio C Hamano -- gitster -- in commit 2c54104, 10 Jan 2022)

merge-ort:修复重整化和重命名/删除冲突的错误

Reported-by: Ralf Thielow
Signed-off-by: Elijah Newren
Reviewed-by: Derrick Stolee

自从提交a492d53 (merge-ort:确保我们查阅 df_conflict 和 path_conflicts,2021-06-30,Git v2.33.0-rc0 --merge列于batch #5) (“merge-ort:确保我们协商df_conflict and path_conflicts",2021-06-30),当重新规范化处于活动状态并且文件涉及重命名/删除冲突但文件未修改(无论是在重新规范化之前还是之后)时,merge-ort 会遇到断言失败。

在提交之前(或者如果断言被编译出来),merge-ort 会错误合并,忽略重命名/删除冲突,只删除文件。

删除断言,适当修复代码,在代码中留下一些好的注释,并针对这种情况添加测试用例。


Git 2.38(2022 年第 3 季度)修复了长期存在的极端情况错误目录在合并或策略中重命名。

See commit 751e165, commit 3ffbe5a, commit 6dd1f0e, commit 51e41e4, commit 0565cee (05 Jul 2022) by Elijah Newren (newren).
(Merged by Junio C Hamano -- gitster -- in commit e3349f2, 18 Jul 2022)

merge-ort:修复双重重命名和添加/添加冲突的问题

Signed-off-by: Elijah Newren

merge-recursive 和 merge-ort 中都有代码来避免双重传递重命名 (i.e.
一侧重命名目录A/ -> B/,另一端重命名目录B/ -> C/),因为这种组合否则会使添加到的新文件变得混乱A/在第一面并想知道它们最终会进入哪个目录 - 特别是如果有更多重命名,例如第一面重命名C/ -> D/.

在这种情况下,它只是“关闭”高阶传递情况的目录重命名检测。

另一种看待这个问题的方法是,如果一侧目录重命名中涉及的源名称是另一侧文件的目录重命名操作的目标名称,那么我们就避免了双重传递重命名。

(更具体地说,如果目录在一侧重命名D想要重命名侧面的文件E from OLD_NAME -> NEW_NAME,和侧面D已经有一个名为NEW_NAME,和侧面的目录重命名E想要重命名 D 面NEW_NAME -> NEWER_NAME,然后我们关闭目录重命名检测NEW_NAME以防止NEW_NAME -> NEWER_NAME重命名,并最终导致添加/添加冲突NEW_NAME.)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

他们添加的 git 重命名冲突 - git 将重命名目录中的相同文件识别为新文件 的相关文章

  • `git add --patch` 和 `--word-diff`

    git add patch提供了一个很好的界面 用于检查未暂存的更改 然后仅暂存下一次提交中需要的更改 很好 除了一件事 没有明显的方法来选择哪个diff视图来使用 特别是 我希望能够配置git add patch以同样的方式向我呈现差异g
  • 您对版本控制进行到什么程度了? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Git - 显示远程分支的远程名称

    是否有一个 Git 命令可以显示远程分支的远程名称 目前 我坚持使用 shell utils 从远程分支引用中提取远程名称 例如 echo remote name branch name sed r s 1 remote name 有时出于
  • 致命:早期 EOF 致命:索引包失败

    我用谷歌搜索并找到了很多解决方案 但没有一个适合我 我试图通过连接到 LAN 网络中的远程服务器来从一台计算机进行克隆 从另一台机器运行此命令会导致错误 但是在服务器上使用 git 192 168 8 5 运行相同的克隆命令 一切正常并且成
  • .gitignore 文件夹内容[重复]

    这个问题在这里已经有答案了 可能的重复 在 Windows 上忽略 Git 存储库中的目录 https stackoverflow com questions 343646 ignoring directories in git repos
  • 尽管有 svn 复制,如何 git svn 克隆完整历史记录

    在我的公司 我们即将从 svn 切换到 git 我们使用的 SVN 非常大 没有 svn 布局 并且在每个版本拆分上我们都制作了一个 svn 副本 SVN存储库结构 svnserver company de product xy 主要版本号
  • 将 svn 存储库添加到现有的 git 存储库中?

    我知道你可以使用 git svn init 来跟踪 svn 存储库 但这是为了你想创建一个全新的存储库 我的情况是 我目前已经有一个现有的 git 存储库 并且希望通过将 svn 存储库设为我当前 git 存储库中的远程分支来跟踪 svn
  • 如何获取第一次提交的 Git diff?

    我创建了一个存储库 在其中创建了一个文件 在文件中放入了一些内容 然后提交了该文件 现在 我想查看该提交的差异 理想情况下应该显示添加的文件以及添加到其中的行 然而 git diff HEAD HEAD回报fatal ambiguous a
  • “git add”返回“致命:外部存储库”错误

    我刚刚进入 git 的奇妙世界 我必须提交我对程序所做的一系列更改 位于名为的目录中 var www myapp 我创建了一个新目录 home mylogin gitclone 从这个目录中 我做了一个git clone针对公共回购 我能够
  • Eventmachine start_tcp_server 无接受器 - 端口正在使用或需要 root 权限(运行时错误)

    我已经 3 天无法运行本地服务器了 重新启动我的计算机没有帮助 有几次 在反复尝试大约 40 50 次之后 它随机地起作用了 我不明白为什么 我尝试过一次不同的端口并且有效 但从那以后 没有端口有效 每次我尝试运行我的 Rails 服务器时
  • 为什么在 Eclipse 中对 Egit 管理的项目禁用合并工具?

    根据Egit 用户指南 http wiki eclipse org EGit User Guide Using Merge Tool 要使用合并工具 应右键单击存在合并冲突的资源 然后选择Team gt 合并工具 但是 当我执行此操作时 合
  • 如何使用“gem install”命令从私有 GitHub 存储库安装 gem

    如何在本地安装托管在 GitHub 上的私人存储库中的 gem 特别是 我们通过gem install命令而不是在 Bundler 中使用 因为它是一个命令行工具 我尝试这样做 gem install githubname repo s h
  • 如何查看 github 的 SSH 密钥?

    我最近收到一封来自 Github 的电子邮件 要求我检查我的 SSH 密钥 请检查您的钥匙并确保您 认出他们 如果您有任何疑问 请拒绝钥匙并 上传新密钥 如何在 ubuntu 11 10 上使用 git 检查我的密钥 您可以按照 GitHu
  • 如何使用 vim 作为“git show”编辑器?

    全部如所述如何使用 vim 作为 git log 编辑器 https stackoverflow com questions 16666009 how do i use vim as git log editor不适用于 git show
  • ssh 连接超时

    我无法在 git 中 ssh 到 github bitbucket 或 gitlab 我通常会收到以下错误消息 如何避免它 输出 ssh T email protected cdn cgi l email protection i ssh
  • TeamCity 将功能分支推送到主分支

    有没有办法将成功构建的功能分支推送到另一个分支 我想要这样的东西 Git 存储库 Gitorious GitHub 等 分支机构 master 当前项目的代码 质量保证 代码等待 QA 的分支 功能分支 许多远程分支 开发人员可以在其中开发
  • 获取最新远程提交的 SHA1 [重复]

    这个问题在这里已经有答案了 可能的重复 git bash 如何检查是否有新的提交可用 https stackoverflow com questions 6006759 git bash how to check if theres a n
  • 是否可以在 git 存储库之外添加和提交文件?

    我们的文本文件分布在系统的各个角落 我们计划将这些文件中所做的所有修改添加到 git 存储库中 每次对这些文件进行修改都是由脚本进行的 因此 我们计划向该脚本添加新命令 以将文件添加到 git 存储库 但是 这些修改是同时进行的 我们可以为
  • gitlab 请求将分支 A 合并到开发中(落后 3 次提交)我应该担心吗?

    在 gitlab 中创建合并请求时 我经常收到一条消息 请求将分支 A 合并到开发中 x 提交落后 gitlab想告诉我什么 我应该担心还是需要修复某些东西 什么 一段时间后合并请求在项目中打开时 由于其他人合并了自己的更改 您尝试合并到的
  • 自动生成/删除詹金斯工作

    我正在寻找一种自动创建一组詹金斯作业的方法 通常在创建新的 git 分支之后 我已经为maven尝试过这个插件 http evgeny goldin com wiki Maven jenkins plugin http evgeny gol

随机推荐

  • 将 rxGlm 转换为 GLM 时出错

    我在将 rxGlm 模型转换为普通 glm 模型时遇到问题 每次我尝试隐藏我的模型时 都会遇到相同的错误 Error in qr lm object lm object does not have a proper qr component
  • 数据网格视图标题网格颜色

    这是一个 VB NET 应用程序 我们在数据网格视图中显示 SQL 语句的输出 我正在使用 NET 2005 我们需要使网格控件上的标题分隔符的颜色与窗体上的 GridColor 的颜色相同 我们尝试查看 DataGridView 控件的所
  • 如何在 NSDictionary 中 POST NSDictionaries 的 NSArray 而不会出现问题?

    我确实知道如何做到这一点 这相当简单 问题是它不起作用 这是我用来发布数据的函数 void updateWebsitesUsingParameters NSDictionary parameters AFHTTPRequestOperati
  • Sitecore:打开 HTML 缓存会阻止回发行为

    我有一个带有 ASP 下拉列表的 sitecore 页面 表单上的数据是从下拉列表中选定的值填充的 当下拉列表中的所选项目发生更改时 会触发回发 在回发中 新选定的项目将添加到查询字符串中 并且用户将被重定向 为了可链接性 我最近启用了 H
  • Python Tkinter 使用 PIL 将画布保存为图像

    我有这段代码 可以让用户在画布上绘图并将其保存为jpeg file 正如中提到的这个帖子 我尝试使用 PIL 在画布上和内存中并行绘制 以便我可以将其保存为jpeg代替postscript 它似乎一直有效 直到我发现我用 PIL 保存的一些
  • docx4j 查找和替换

    我有带有一些占位符的 docx 文档 现在我应该用其他内容替换它们并保存新的 docx 文档 我开始于docx4j并找到了这个方法 public static List getAllElementFromObject Object obj
  • 通过转换器绑定每个按钮,使背景颜色变亮

    我想在单击时使按钮背景变亮 所以我做了以下事情
  • 如何修复错误 E0277:不满足特征绑定 `[usize]: std::marker::Sized` ?

    我正在尝试将数组传递给函数 fn my func xs usize gt usize 0 fn main let arr 329 457 657 let res my func inp 我收到错误 error E0277 the trait
  • 如何从 C# 以编程方式控制 Win7 中的麦克风和麦克风增强设置?

    Windows 7 有一些新的音频设置 我无法从我的 C 应用程序中控制这些设置 具体来说 在输入 麦克风 属性中 有一个包含麦克风和麦克风增强滑块的 级别 选项卡 以及一个麦克风静音切换 复选框 我需要以编程方式确保麦克风没有静音 但尚未
  • Grails + GORM:GORM 中默认的 equals() 实现是什么?

    当我做domainObj1 domainObj2Grails 中的对象是按 ID 进行比较的吗 如果不是 它们如何比较 首先 您需要了解 GORM Grails 并没有做任何特别的事情equals 除非你自己实现equals 在您的域类上
  • 摇动动画(3d版)

    我想在错误上使用此动画 如图所示here 如何在wpf中实现这一点 我感觉这应该是多个转换的组合 组合 但是具体是哪些转换以及如何转换 这是一个初学者 mcve或称之为 我的尝试 它很丑陋 甚至与我想要的不接近
  • 将操作添加到操作栏面板

    我想向操作栏添加一个操作 但它在我的操作栏中显示为下拉列表 如何向操作栏添加按钮 我的代码是 menu menu
  • 为什么Python中的像素值会自动变化?

    我正在 VideoCapture 的帮助下从视频中提取帧 提取第一帧 借助 PIL 将帧转换为图像 打印位置 1 1 处的前一个像素值 打印新创建图像的位置 1 1 处的像素值 谁能解释为什么 提取帧的函数 import cv2 from
  • 使用 Dapper,如何将 sql 类型的值作为参数传递?

    我正在尝试使用 dapper 并将我在此处使用 DDL 定义的整数列表传递给存储过程 CREATE TYPE dbo BrandIDSet AS TABLE BrandID INT NULL 我创建了这个存储过程 CREATE PROCED
  • 如何使用 jQuery 从多个事件触发相同的函数?

    有没有办法拥有keyup keypress blur and change事件在一行中调用相同的函数 还是我必须单独执行它们 我遇到的问题是 我需要通过数据库查找来验证一些数据 并希望确保在任何情况下都不会错过验证 无论是键入还是粘贴到框中
  • 在 Python 中使用 SHA256withRSA 数字签名验证失败

    我正在尝试使用离线 aadhaar KYC 验证应用程序的给定证书文件来验证数字签名 该说明在验证文档中给出 读取整个 XML 并将 s xxxx 标记从中分离出来 使用基于 SHA256withRSA 的哈希和加密技术的签名验证算法 s
  • 将二进制文件添加到 Visual Studio 中的资源

    请这听起来可能是新手 但我就是无法让它工作 因为 在 Visual Studio 2012 中将文件 例如 file exe 添加到资源中的步骤是什么 以便我可以使用以下命令找到资源FindResource hInstance MAKEIN
  • 如何在 Json 控制器中渲染部分视图

    如何渲染要在控制器中的 JsonResult 中使用的部分视图 return Json new Html this RenderPartialView EditMovie updatedMovie Message message JsonR
  • 与 glfw3 链接时发生错误[重复]

    这个问题在这里已经有答案了 我最近一直在尝试编译C 代码并且不依赖IDE 我决定使用编辑器和命令行来编写和编译代码 问题是我想制作一个 glfw 应用程序 但是当我链接 glfw3 lib 和 opengl32 lib 时出现错误 a ex
  • 他们添加的 git 重命名冲突 - git 将重命名目录中的相同文件识别为新文件

    我已经重命名了一个目录并将其合并到我的主分支中 当合并另一个分支时 git 将重命名的目录中的相同文件识别为新文件 当合并到另一个分支时 我得到该目录中相同文件 由他们添加 的合并冲突 added by them theirDir same