git нещодавно почав розуміти кодування, такі як utf16. Див. Gitattributes документи , шукайтеworking-tree-encoding
[Переконайтеся, що ваша сторінка чоловіка збігається, оскільки це зовсім нове!]
Якщо (скажімо), файл UTF-16 без BOM на машині Windows, тоді додайте до свого .gitattributes
файлу
*.vmc text working-tree-encoding=UTF-16LE eol=CRLF
Якщо UTF-16 (з бомбою) на * nix зробити це:
*.vmc text working-tree-encoding=UTF-16-BOM eol=LF
(Замініть *.vmc
на*.whatever
дляwhatever
файлів типу вам потрібно ручкою)
Див.: Підтримка кодування робочого дерева "UTF-16LE-BOM" .
Додано пізніше
Після @Hackslash можна виявити, що цього недостатньо
*.vmc text working-tree...
Щоб отримати гарні текстові відмінності, вам потрібно
*.vmc diff working-tree...
Поклавши обидві роботи також
*.vmc text diff working-tree...
Але це, певно,
- Надлишки -
eol=...
має на увазіtext
- Багатослівний - великий проект міг легко мати десятки різних типів текстових файлів
Проблема
Git має макроатрибут, binary
що означає -text -diff
. Протилежність+text +diff
вбудоване, але git дає інструменти (я думаю!) Для його синтезу
Рішення
Git дозволяє визначати нові атрибути макросу.
Я пропоную ту верхню частину .gitattributes
файлу, яку ви маєте
[attr]textfile text diff
Тоді для всіх шляхів, які мають бути текстовими та різними
path textfile working-tree-encoding= eol=...
Зауважте, що в більшості випадків нам потрібно, щоб кодування за замовчуванням (utf-8) та eol за замовчуванням (нативно) було відмінено.
Більшість ліній має виглядати
textfile *.c
textfile *.py
Etc
Чому б просто не використовувати diff?
Практично. У більшості випадків ми хочемо рідного еолу. Що означає ні eol=...
. Таким чином text
, не мається на увазі, і це потрібно чітко ставити.
Концептуальна: Текст Vs бінарний - це основна відмінність. eol, кодування, відмінності тощо - лише деякі аспекти цього.
Відмова від відповідальності
Через химерні часи, в які ми живемо, у мене немає машини з поточною робочою щіткою. Тому я не в змозі перевірити останнє доповнення. Якщо хтось виявить щось не так, я виправляю / видаляю.