环境
软件: Git for Windows10 version 2.22.0
系统: Windows10 version1903
经历(一)
-
git push错误: failed to push some refs to
问题描述: 一般是远程库相对于本地库有多出来的修改, 而我们却没有对本地库进行同步, 所以当想要push到远程库的时候, 就会出现上述错误.
解决办法: 只需要将远程库同步到本地库, 使用指令.
1
git pull --rebase origin master
--rebase
的作用是取消掉本地库中最近的一次commit, 并且会把这次commit临时保存为patch(.git/rebase), 并将远程库的最近的一次内容接到更新后的版本库中.
-
git 配置时有CRLF和LF的问题
问题描述: CRLF, LF是用来表示文本换行的方式. 其中CR(Carriage Return)表示回车, 对应转义字符
\r
, LF(Line Feed)表示换行, 对应转义字符\n
. 不同的系统间一般使用CRLF或LF作为文本的换行符.Windows系统: CRLF
Unix系统: LF
所以, 在Windows系统上换行符是CRLF, 转义字符为
\r\n
, 而Unix系统的转义字符故为\n
. 在Git for Windows中换行符会有相应的处理:-
提交转化: 在提交代码到git本地库中将文本文件中的换行符CRLF转为LF的过程.
-
检出转化: 在检出git本地库过程中将文本文件中的换行符LF转换为CRLF的过程.
相关配置
-
全局配置
利用
core.autocrlf
来进行配置, 可以自动完成提交转化与检出转化, 命令如下:1
git config --global core.autocrlf [true | input | false]
true 自动完成提交转化与检出转化
input 只做提交转化, 不做检出转化
false 提交与检出的代码都保持文件原有的换行符不变
CRLF与LF混合的文本文件不受此配置控制 -
gitattributes文件
利用
.gitattributes
文件, 我们可以在项目的根目录下添加一个.gitattributes文件, 其优先级高于core.autocrlf的设置, 命令如下:每行的基本形式:
1
filter attr1 attr2
filter代表匹配文件的通配符, 之后则是相应的属性, 用空格间隔.
1
2
3
4
5
6* text=auto (匹配所有文件)
*.cs text
*.txt -text
*.png binary
*.html
*.js eol=lfattr有以下选项:
text 自动完成提交转化与检出转化
-text 不执行提交转化与检出转化
text=auto 根据Git决定是否需要执行提交转化与检出转化, 若文件中只有这行时, 相当于自动填入core.autocrlf的设置
不设置 使用core.autocrlf配置决定是否执行提交转化与检出转化以及由Git决定是否为二进制文件
eol=lf 强制完成提交转化, 不执行检出转化
eol=crlf 强制完成提交转化, 指定转化为CRLF格式
binary 二进制文件不参与提交转化与检出转化
-