git搞坏了换行符?设置git像FTP一样处理文件格式

时间:2024-12-19 17:59:53

        git默认自动识别哪些文件是文本文件,自动在不同系统之间转换文件格式。

        回车换行格式有三种:

  • windows 回车换行(\r\n)
  • unix/linux 换行(\n)
  • Mac 回车(\r)

        git默认提交文件时改为unix/linux格式,获取时则改为本地文件格式。我们知道ftp工具为了正确处理文件格式可以使用三种不同的模式来传输:强制文本、强制二进制、根据文件扩展名处理,git也差不多,git库可以控制,用户也可以单独控制,为了统一,最好用git库控制。

目录

.gitattributes

官方示例

完整示例  

另:提防.gitignore


.gitattributes

        git库控制的方法是在git库根目录添加一个“.gitattributes”文件,在里面设置处理方式,该文件会覆盖用户自己的设置。

官方示例

        官方示例:

# Set the default behavior, in case people don't have core.autocrlf set.
* text=auto

# Explicitly declare text files you want to always be normalized and converted
# to native line endings on checkout.
*.c text
*.h text

# Declare files that will always have CRLF line endings on checkout.
*.sln text eol=crlf

# Denote all files that are truly binary and should not be modified.
*.png binary
*.jpg binary

完整示例  

      我根据FTP工具的设置设置了这个文件:

# Set the default behavior, in case people don't have core.autocrlf set.
* -text

# Explicitly declare text files you want to always be normalized and converted
# to native line endings on checkout.
*.*html text
*.htm text
*.txt text
*.php text
*.php3 text
*.cgi text
*.c text
*.cpp text
*.h text
*.pas text
*.bas text
*.tex text
*.pl text
*.js text
*.htaccess text
*.xtml text
*.css text
*.cfg text
*.ini text
*.sh text
*.xml text
*.mk text
*.sql text


# Declare files that will always have CRLF line endings on checkout.
*.sln text eol=crlf

# Denote all files that are truly binary and should not be modified.
*.png binary
*.jpg binary

        注意,重点是将*的处理方式改为“-text”禁用自动处理。

另:提防.gitignore

        如果合并不同来源的代码,最好检查一下有多少个.gitignore,以防止错误的设置导致文件没有签进去。

        如果确认全部都要签入,最好删掉所有的.gitignore。