Git 踩坑

环境

软件: 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中换行符会有相应的处理:

    1. 提交转化: 在提交代码到git本地库中将文本文件中的换行符CRLF转为LF的过程.

    2. 检出转化: 在检出git本地库过程中将文本文件中的换行符LF转换为CRLF的过程.

    相关配置

    1. 全局配置

      利用core.autocrlf来进行配置, 可以自动完成提交转化与检出转化, 命令如下:

      1
      git config --global core.autocrlf [true | input | false]

      true 自动完成提交转化与检出转化
      input 只做提交转化, 不做检出转化
      false 提交与检出的代码都保持文件原有的换行符不变
      CRLFLF混合的文本文件不受此配置控制

    2. 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=lf

      attr有以下选项:

      text 自动完成提交转化与检出转化
      -text 不执行提交转化与检出转化
      text=auto 根据Git决定是否需要执行提交转化与检出转化, 若文件中只有这行时, 相当于自动填入core.autocrlf的设置
      不设置 使用core.autocrlf配置决定是否执行提交转化与检出转化以及由Git决定是否为二进制文件
      eol=lf 强制完成提交转化, 不执行检出转化
      eol=crlf 强制完成提交转化, 指定转化为CRLF格式
      binary 二进制文件不参与提交转化与检出转化

Reference

git push错误failed to push some refs to的解决

理解CRLF与LF

0%