【问题标题】:Auto-merge single line conflicts in git在 git 中自动合并单行冲突
【发布时间】:2016-11-25 02:24:12
【问题描述】:

我们在一个 git repo 中有大量生成的 PHP 文件。当有人在应用程序中使用编辑器创建某些内容时,会生成这些文件。我们需要将内容保持为可部署的形式,这就是为什么要将其检入 git。

令人烦恼的是生成的文件顶部有注释,例如:

// 创建时间:2016-07-21 09:24:25

在很多情况下,此时间戳是文件的唯一更改。但是,当本地和远程都发生变化时,git 当然会将此视为冲突。这会导致需要在拉取时解决大量手动合并冲突。

有没有办法指示 git 将这一行自动合并到“我们的”而不是引发冲突?

我已经搜索并找到了可以自动合并整个文件、“我们的”或“他们的”以及“涂抹”的解决方案,但我认为这些都不能真正满足我们的需要。我们希望签入 // created: 注释,但我们只想让 git 自动合并该特定行的冲突。

有什么想法吗?

【问题讨论】:

  • 您应该完全删除该字段:“创建时间”不包含任何未包含在 git 日志中的新信息。
  • 不幸的是,这不是我的领域。然而,编辑应用程序并找到它在哪里生成 // created: 注释并删除它是一个很好的建议,谢谢。

标签: git merge


【解决方案1】:

有没有办法指示 git 将这一行自动合并到“我们的”而不是引发冲突?

不直接,不。您可以指示git merge 使用“合并工具”(通常是一些用于合并解析的 GUI)并实现一个自定义工具来满足您的需求;但我宁愿创建一个小脚本,它执行以下操作(根据您使用的环境,不应该那么难 - Windows/Unix/bash/ruby 等):

  • 使用正确的选项运行git merge
  • 如果脚本没有检测到冲突(解析来自git merge 的输出和/或退出代码),那么您就完成了。
  • 否则,加载冲突文件(您可以从 git status 获取它们,这应该比 git merge 的输出更容易解析)
  • 使用正则表达式自动检测和修复您感兴趣的冲突应该非常简单。
  • 保存文件。
  • 检查它是否包含更多的冲突标记;如果没有,git add
  • 当您处理完所有文件并且没有任何带有冲突标记的文件时,然后git commit

在此之后,要么合并完成,要么您必须在所有时间戳都已解决的情况下进行通常的冲突解决。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-17
    • 1970-01-01
    • 2017-07-24
    • 1970-01-01
    • 2019-06-10
    • 1970-01-01
    • 2015-10-15
    • 2014-10-07
    相关资源
    最近更新 更多