如何使Git将文件视为二进制文件?


104

对于中型项目存在问题,由于git将它们视为文本并合并,因此Visual Studio项目文件一直存在问题。我只想将文件设置为二进制文件,以便git永远不会自动合并这些文件。

有没有办法做到这一点?


2
但是Visual Studio项目文件是文本文件,是否需要合并?
CB Bailey 2012年

1
@CharlesBailey他们将以最糟糕的方式定期合并,从而破坏您的所有构建。我不想摆弄XML,我想让它问我手动添加新文件,或者甚至运行知道如何正确处理XML的工具。
michael.bartnett

1
@ michael.bartnett:当然,只有搞砸合并了吗?
CB Bailey

1
@CharlesBailey当然,如果我手动合并,这不是问题。但这不是我必须手动合并的内容。通常是一个构建项目的添加/删除/编辑...这是完全可自动合并的,但不是通常的每行差异方法。请查看此演示文稿,以获取有关该概念的更多信息。
michael.bartnett

@ michael.bartnett:然后设置一个更好的合并驱动程序。我提出的要点(10个月前)是可以并且应该合并项目文件。就我个人而言,我更喜欢修复合理的机器尝试,而不是完全手动完成,这似乎是不必要的工作。
CB Bailey

Answers:


135

是的,使用attribute。在您的.gitattributes文件中放入类似的内容(如果不存在则创建它):

*.sln binary
*.suo binary
*.vcxproj binary

binary实际上是一个预定义的宏,等效于-diff -merge -text

如果您仍然希望看到差异,可以使用:

*.sln -merge -text

这样,*.sln文件将不会合并,也不会进行eol标准化,但同时也是可扩散的。


1
这个文件在哪里?
内夫斯

@neves根据给定答案中链接提供的文档,可以在任何地方找到gitignore文件。
Michael Wild

4
@neves:你必须做出一个,无论是在本地的回购或作为全球例如~/.gitattributes,然后运行git config --global core.attributesfile ~/.gitattributesstackoverflow.com/questions/28026767/...
扬-GLX

如果这些文件没有自动合并,会发生什么?是否选择了一个版本,还是必须手动合并?
ClydeTheGhost

1
@ClydeTheGhost,您必须选择一个。
Michael Wild

6

您应该在.gitattributes文件中定义二进制文件属性(如果不存在,请创建二进制文件),方法是将以下各行放入其中,以防止将其作为文本差异文件处理:

# Define binary file attributes.
# - Do not treat them as text.
# - Include binary diff in patches instead of "binary files differ."
*.sln     -text diff
*.suo     -text diff
*.vcxproj -text diff
*.gif     -text diff
*.gz      -text diff
*.ico     -text diff
*.jpeg    -text diff   
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.