我处理行尾的过程如下(在许多存储库上经过了实战测试):
创建新的仓库时:
- 摆
.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会将许多文件标记为已修改。
解决的方法是先进行伪commit(git add -A . && git commit -m 'fake commit'
),然后执行git rebase master
。重新设置基准之后,伪造的提交将消失。