Як зробити так, щоб Git трактував файл як бінарний?


104

Проблема з проектом середнього розміру, де файли проектів візуальної студії продовжують виникати з-за 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

Відповіді:


135

Так, використовуючи атрибути . Помістіть щось подібне у свій .gitattributesфайл (створіть його, якщо його немає):

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

Тут binaryнасправді визначений макрос , еквівалентний -diff -merge -text.

Якщо ви все ще можете бачити відмінності, ви можете скористатися:

*.sln -merge -text

Таким чином, *.slnфайли не будуть об'єднані, не нормалізуються eol, але тим часом відрізняються.


1
де цей файл?
neves

@neves Скрізь може бути розміщений файл gitignore відповідно до документації, наданої за посиланням у даній відповіді.
Майкл Дикий

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

Що станеться з цими файлами, якщо вони автоматично не злиті? Вибрана одна версія чи вам доведеться об’єднати вручну?
ClydeTheGhost

1
@ClydeTheGhost вам доведеться вибрати його.
Майкл Уайлд

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   
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.