我处理行尾的程序如下(在许多 repos 上测试过):
创建新仓库时:
- 将
.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 在当前 repo 中跟踪了哪些不同的扩展,请看这里
标准化后的问题
完成此操作后,还有一个更常见的警告。
假设你master
的已经是最新的并且已经标准化,然后你 checkout outdated-branch
。很多时候,在签出该分支之后,git 会将许多文件标记为已修改。
解决方案是做一个假的 commit( git add -A . && git commit -m 'fake commit'
) 然后git rebase master
. 在 rebase 之后,虚假提交应该消失。