Відповіді:
З документів :
Кожен рядок у
.gitattributes
(або.git/info/attributes
) файлі має форму:pattern attr1 attr2 ...
Так ось, шаблон є *
, що означає всі файли, а атрибут є text=auto
.
Що робить text=auto
? З документації:
Коли для тексту встановлено значення "авто", шлях позначається для автоматичної нормалізації кінця рядка. Якщо Git вирішить, що вміст - це текст, його закінчення нормалізуються на LF під час реєстрації.
Яка поведінка за замовчуванням, якщо вона не включена?
Не визначено
Якщо текстовий атрибут не визначений, Git використовує змінну конфігурації core.autocrlf, щоб визначити, чи слід перетворити файл.
Що робить core.autocrlf
? З документів:
core.autocrlf
Якщо встановити цю змінну на "true", це майже те саме, що встановити текстовий атрибут "auto" для всіх файлів, за винятком того, що текстові файли не гарантуються нормалізуватися: файли, що містять CRLF у сховищі, не будуть торкатися. Використовуйте це налаштування, якщо ви хочете мати у своєму робочому каталозі закінчення рядків CRLF, навіть якщо сховище не має нормалізованих закінчень рядків. Цю змінну можна встановити на вхід, і в цьому випадку перетворення вихідних даних не проводиться.
Якщо ви вважаєте, що все це зрозуміло, як грязь, ви не самотні.
Ось, що * text=auto
стосується моїх слів: коли хтось робить файл, Git здогадується, що це файл - це текстовий файл чи ні, і якщо він є, він зробить версію файлу, де всі байти CR + LF замінені байтами LF. Це не впливає безпосередньо на те, як виглядають файли у робочому дереві, є й інші параметри, які перетворюють байт LF у байти CR + LF під час перевірки файлу.
Я б НЕ рекомендував покласти * text=auto
в .gitattributes
файл. Натомість я б рекомендував щось подібне:
*.txt text
*.html text
*.css text
*.js text
Це явно позначає, які файли є текстовими файлами, які перетворюють CRLF в LF в об'єктній базі даних (але не обов'язково в робочому дереві). У нас відбулося репо * text=auto
, і Гіт здогадався помилково для файлу зображення, що це текстовий файл, що призвело до його пошкодження, коли він замінив CR + LF байти на байти LF в об’єктній базі даних. Це не було весело налагоджувати.
Якщо вам потрібно скористатися * text=auto
, поставте його як перший рядок .gitattributes
, щоб наступні рядки могли його замінити. Це, здається, стає все більш популярною практикою.
everyone
посилаєтесь на git-scm
це, це, мабуть, тому, що вони розробляють пакет * nix і, таким чином, використовують символ * nix newline - це нормально .
git-scm
* nix. MacOS використовує LF. Тільки Windows (враховуючи лише основні ОС) використовує CRLF. Це ускладнює розробникам програми за допомогою інструментів * nix у Windows та для всіх під час обміну файлами. Дивіться також Чому CRLF .
*.txt text=auto
і *.txt text
будь ласка? Я подумав, що всі 4 рядки у вашому прикладі вище повинні були бути text=auto
не лише text
після розширення файлу. Наприклад, файли слідів KiCad (розширення ".kicad_mod") нормалізуються за допомогою цього рядка у файлі gitattributes: *.kicad_mod text=auto
( kicad-pcb.org/libraries/klc/G1.7 ).
Це забезпечує нормалізацію закінчень рядків. Джерело: Kernel.org
Коли текст встановлено на "авто", шлях позначається для автоматичної нормалізації кінця рядка. Якщо git вирішує, що вміст - це текст, його закінчення нормалізуються на LF під час реєстрації.
Якщо ви хочете взаємодіяти із системою управління вихідним кодом, яка застосовує нормалізацію кінця рядка, або ви просто хочете нормалізувати всі текстові файли у вашому сховищі, замість цього слід встановити текстовий атрибут на "авто" для всіх файлів.
Це гарантує, що всі файли, які git вважає текстовими, матимуть нормалізовані (LF) закінчення рядків у сховищі.
When a text file is normalized, its line endings are converted to LF in the repository.
LF
, навіть на windows?
Ця конфігурація стосується того, як обробляються закінчення рядків. Якщо ввімкнено, усі закінчення рядків перетворюються на LF у сховищі. Існують і інші прапори, які стосуються того, як перетворюються закінчення рядків у вашому робочому каталозі. Повна інформація про проблему нам тут: https://www.kernel.org/pub/software/scm/git/docs/gitattributes.html