Моя процедура поводження з закінченнями рядків така (битва перевірена на багатьох репостах):
Під час створення нового репо:
- поставити
.gitattributes
в першому фіксації разом з іншими типовими файлами як .gitignore
іREADME.md
У роботі з існуючим репо:
- Створіть / змініть
.gitattributes
відповідно
git commit -a -m "Modified gitattributes"
git rm --cached -r . && git reset --hard && git commit -a -m 'Normalize CRLF' -n"
-n
( --no-verify
це пропустити гачки, які попередньо здійснюють)
- Доводиться це робити досить часто, щоб я визначив це псевдонімом
alias fixCRLF="..."
- повторити попередню команду
- так, це вуду, але, як правило, я повинен виконувати команду двічі, перший раз вона нормалізує деякі файли, вдруге навіть більше файлів. Як правило, найкраще це повторити, поки не буде створено нове зобов’язання :)
- кілька разів переходити між старою (безпосередньо перед нормалізацією) та новою гілкою. Після перемикання гілки інколи git знайде ще більше файлів, які потрібно перенормувати!
В .gitattributes
я заявляю, що всі текстові файли явно мають LF EOL, оскільки інструменти для Windows зазвичай сумісні з LF, тоді як інструменти, що не належать до Windows, не сумісні з CRLF (навіть багато інструментів командного рядка nodejs передбачають LF і, отже, можуть змінювати EOL у ваших файлах).
Зміст .gitattributes
Моє .gitattributes
зазвичай виглядає так:
*.html eol=lf
*.js eol=lf
*.json eol=lf
*.less eol=lf
*.md eol=lf
*.svg eol=lf
*.xml eol=lf
Щоб зрозуміти, які чіткі розширення відстежуються git у поточному репо, дивіться тут
Випуски після нормалізації
Як тільки це зроблено, є ще один загальний застереження.
Скажіть, ваш master
уже оновлений і нормалізований, і тоді ви оформляєте замовлення outdated-branch
. Досить часто відразу після перевірки цієї гілки git позначає багато файлів як змінені.
Рішення полягає в тому, щоб зробити фальшивий фіксатор ( git add -A . && git commit -m 'fake commit'
) і потім git rebase master
. Після перезавантаження, фальшива фіксація повинна піти.