Моя процедура поводження з закінченнями рядків така (битва перевірена на багатьох репостах):
Під час створення нового репо:
- поставити
.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. Після перезавантаження, фальшива фіксація повинна піти.