Как мне заставить 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   
Омар Алахмед
источник