Как мне заставить Git рассматривать файл как двоичный?


104

Возникла проблема с проектом среднего размера, в котором файлы проекта Visual Studio продолжают иметь проблемы из-за того, что git обрабатывает их как текст и объединяет. Я хотел бы просто установить файл как двоичный, чтобы git никогда не объединял эти файлы автоматически.

Есть ли способ сделать это?


2
Но файлы проекта Visual Studio - это текстовые файлы, и их нужно объединить?
CB Bailey,

1
@CharlesBailey Периодически они будут сливаться самым худшим образом, испортив все ваши сборки. Я не хочу возиться с XML, я хочу, чтобы он попросил меня вручную добавить новые файлы или, возможно, даже запустить инструмент XML-сравнения, который знает, как правильно с этим справиться.
michael.bartnett

1
@ michael.bartnett: Разумеется, только если вы испортите слияние?
CB Bailey

1
@CharlesBailey Конечно, если я вручную сливаю, это не проблема. Но это не то, что мне нужно вручную объединять. Обычно это добавление / удаление / редактирование элемента сборки ... которое полностью автоматически объединяется, но не с помощью обычного метода сравнения строк. Ознакомьтесь с этой презентацией, чтобы узнать больше об этом понятии.
michael.bartnett

@ michael.bartnett: Тогда установите лучший драйвер слияния. Я говорил (10 месяцев назад) о том, что файлы проекта можно и нужно объединять. Лично я предпочитаю отремонтировать разумную машину, чем делать это полностью вручную, что кажется ненужной работой.
CB Bailey

Ответы:


136

Да, используя атрибуты . Поместите что-то подобное в свой .gitattributesфайл (создайте его, если его нет):

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

Вот binaryна самом деле предопределенный макрос , эквивалентный -diff -merge -text.

Если вы хотите по-прежнему видеть разницу, вы можете использовать:

*.sln -merge -text

Таким образом, *.slnфайлы не будут объединены, не будут нормализованы, но при этом будут различаться.


1
где этот файл?
neves 07

@neves Везде можно найти файл gitignore в соответствии с документацией, предоставленной по ссылке в данном ответе.
Майкл Уайлд,

4
@neves: вам нужно сделать его либо локально в вашем репо, либо глобально, например, ~/.gitattributesа затем запустить, git config --global core.attributesfile ~/.gitattributesсм. stackoverflow.com/questions/28026767/…
jan-glx

Что произойдет с этими файлами, если они не будут автоматически объединены? Выбрана одна версия или нужно вручную слить?
ClydeTheGhost

1
@ClydeTheGhost вам нужно будет выбрать один.
Майкл Уайлд

6

Вы должны определить атрибуты двоичного файла в своем .gitattributesфайле (создать его, если он не существует), поместив в него эти строки, чтобы он не обрабатывал его как текстовый файл diff:

# 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   
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.