GIT使用常见问题汇总

问题列表

  • 不同系统(windows|linux|macos)之间协作git遇到问题:
    [git] warning: LF will be replaced by CRLF | fatal: CRLF would be replaced by LF
  • git撤销未提交的修改
  • git提交目录,但是忽略目录中的文件

问题说明

[git] warning: LF will be replaced by CRLF | fatal: CRLF would be replaced by LF

遇到该错误,是由于GIT的换行符检查功能造成的。主要原因是不同的系统,使用的换行符不同。
windows使用回撤+换行两个字符来表示一行的结束。
Macos or Linux使用换行一个字符,来表示结束一行。

  1. core.safecrlf配置项,是换行符检查功能,可以在提交是检查文件是否混用了不同的换行风格的换行符,功能选项:
    false:不做任何检查
    warn:在提交时检查并警告
    true:在提交时检查,如果发现混用则拒绝提交
    配置形式:# git config --global core.safecrlf false

  2. core.autocrlf 自动将CRLF转换成LF选项配置。

Git可以在你提交时自动地把行结束符CRLF转换成LF,而在签出代码时把LF转换成CRLF。用core.autocrlf来打开此项功能,如果是在Windows系统上,把它设置成true,这样当签出代码时,LF会被转换成CRLF:
# git config --global core.autocrlf true


Linux或Mac系统使用LF作为行结束符,因此你不想 Git 在签出文件时进行自动的转换;当一个以CRLF为行结束符的文件不小心被引入时你肯定想进行修正,把core.autocrlf设置成input来告诉 Git 在提交时把CRLF转换成LF,签出时不转换:
# git config --global core.autocrlf input


如果你是Windows程序员,且正在开发仅运行在Windows上的项目,可以设置false取消此功能,把回车符记录在库中:
# git config --global core.autocrlf false

GIT撤销未提交的修改

恢复某个已修改的文件(撤销未提交的修改):git checkout file-name

git提交目录,但是忽略目录中的文件

前提是目录中的文件未提交
空目录,git会自动排除提交的,因此,我们要将该目录变为不空的,但是又要忽略目录中的其他文件提交,所以就要用到git的忽略提交:.gitkeep
比如,有目录:runtime,目录下有文件1.log、2.log、3.log
需要提交runtime目录,但是不提交1.log、2.log、3.log
mkdir runtime && touch log/.gitkeep && git add log/.gitkeep即可。