Git(通过 TortoiseGit)在检测到冲突使其损坏时修改已编译的文件

Git (via TortoiseGit) modifies compiled file when a conflict is detected making it corrupted

我是 git 的新手,很抱歉可能无法 100% 清除。

我正在处理编译后的文件(更准确地说是 Rockwell for Studio5000 在 PLC 工业自动化中的 .acd 文件)。我很确定文件的格式并不重要。我们想与多个用户一起处理项目。我们使用 Git 作为中央服务器和 PLC 的品牌合并工具(本例中的示例是 Rockwell)。我们已将 Rockwell 的合并工具设置为 TortoiseGit 中的 MergeTool,一切正常 "mostly"。

但是,当我们拉取刷新本地存储库时,100% 会发生冲突,因为该文件不是 Git 通常使用的 .txt 文件。问题是,当我们拉动(发生冲突)并告诉 Git 我们想要合并时,它会修改本地文件(我猜测是通过在文件中的任何地方放置 THEIRS 和 OURS),即使我们不想以这种方式解决冲突,它会破坏文件的默认 reader。 BASE、REMOTE(THEIRS) 和 LOCAL(OURS) 文件仅在我们使用 TortoiseGit 的编辑冲突时出现(当我们指定要合并两个版本时它们不会自动出现)。

我的问题是,没有经验的 and/or 无人注意的人可以轻松地将损坏的文件推送到服务器上,因为解决损坏的文件(单击一次)允许用户提交。我知道我们可以很容易地 revert/reset 到以前的提交,但是它对于日志历史来说有点混乱,我们几乎不想跟踪损坏的版本。这也让我们浪费了很多时间,因为 "general user" 可能很难恢复到以前的版本并且可能需要帮助。

首先我想做的是:当用户尝试合并文件时,Git 不会修改工作目录(工作树等)中的编译文件。

其次:我很确定这是可能的我只是不知道如何,但我想在发生冲突时 selecting 合并时自动生成 BASE、LOCAL 和 REMOTE 文件,这会更直接然后必须手动 select 编辑冲突选项。我突然想到 .docx 文件已经可以做到这一点,但我的 .acd 文件却没有。有解释吗?

正如我所说,我是一个新手,对任何想法都持开放态度! :)

TortoiseGit 默认不修改冲突文件,但 Git 会修改文本文件。

Git 确实将冲突标记包含到基于文本的文件中。如果您不希望这种情况发生,您可以尝试添加一个 .gitattribtues 文件并将您的文件声明为 binarybinary-diff -merge -text 的快捷方式,因此如果文件是文本文件并且您仍然希望看到差异,-merge 也可以是一个选项。

您还可以创建一个提交挂钩,在允许提交之前检查文件中可能存在的冲突标记(参见 https://tortoisegit.org/docs/tortoisegit/tgit-dug-settings.html#tgit-dug-settings-hooks and prevent file with merge conflicts from getting committed in git)。