【发布时间】:2018-08-25 10:28:05
【问题描述】:
我遇到了解决 sql 文件中的合并冲突的问题。
MenkeTTA@909086 MINGW64 //FILE0019 (master)
$ git pull
remote: Microsoft (R) Visual Studio (R) Team Services
remote: Found 5 objects to send. (5 ms)
Unpacking objects: 100% (5/5), done.
From https://***
d58a69b..4830c58 master -> origin/master
warning: Cannot merge binary files: example_StoredProcedure.sql (HEAD vs. 4830c5886d3e1eac5ac76d1d49496afb43f444c3)
Auto-merging WRR - example_StoredProcedure.sql
CONFLICT (content): Merge conflict in example_StoredProcedure.sql
Automatic merge failed; fix conflicts and then commit the result.
当创建合并冲突时,git 不会像通常的结构那样创建具有竞争更改的预合并文件:
/SQL-文件/
<<<<<<< HEAD
competing change A
=======
competing change B
>>>>>>> branch-a
Git 将这两个文件都视为二进制文件——但仅用于合并冲突操作(没有冲突的正常合并工作正常)。我可以选择我自己版本的文件或从远程拉取的竞争文件作为下一次推送的新头。
我用一个普通的 .txt 文件重现了这个冲突。 Git 正在处理合并冲突,然后按预期创建一个具有竞争更改/提交的预合并文件,我可以在其中手动修复我想要的代码。
为了让 git 将 sql 文件识别为我添加的文本
.sql diff
到 .gitattributes 文件,就像它在here 中描述的那样。有谁知道在处理 sql 文件时如何让 git 创建一个包含两个版本的竞争提交的普通预合并文件?
【问题讨论】:
-
我认为您关于 Git 将纯文本 SQL 文件视为二进制文件的假设是不正确的。相反,我的猜测是 Git 只是自动合并,也许在某种程度上你不同意。虽然有一种方法可以强制 Git 在每次合并时发生冲突,但我会首先查看您的 Git 工作流程,并尝试更好地分离关注点。
-
感谢您的回复。我将来自 git 客户端的原始输出添加到帖子中,以便更深入地了解我的 git 工作流程。 Git 正在中止自动合并并将 sql 文件解释为二进制文件。当我之后检查文件时,我发现了我以前的更改。
标签: sql git git-merge merge-conflict-resolution