git 确保在每个文件末尾换行

git ensure newline at end of each file

git 不喜欢不以换行符结尾的文件(例如参见 [​​=12=])。假设我想清理我的存储库并确保每个文件都以换行符正确结束(不添加无用的换行符),是否有某种工具或命令可以帮助我做到这一点?

for f in $(git grep --cached -Il ''); do tail -c1 $f | read -r _ || echo >> $f; done

说明

  • git grep --cached -Il '' 列出 git 索引中的所有 text 文件 (link)
  • tail -c1 读取最后一个字符
  • 如果
  • read 内置函数在找到 \n
  • 之前检测到 EOF,则它退出非零值
  • echo >> $f只在读取命令失败时执行

ps:灵感来自 https://backreference.org/2010/05/23/sanitizing-files-with-no-trailing-newline/