> 先说下我的问题,因为公司有人用mac,有人用windows,所以在使用git的时候,会出现你没有修改这个文件,但是git显示这个文件被你修改了。
>
> 最初idea会提示换行符不一致,应该就是两个平台上的换行符的问题。
>
> 在我修改换行符后,git还是会出现文件修改,但是idea只是显示 `Contents are identical` ,后来才知道是文件权限的问题
>
> 下面总结一下这两种情况的解决方法
---
### git的换行符问题
一般,在linux/unix中,使用LF(0x0A)来作为换行符,早期的 mac os使用 `CR(0x0D)`,后面也os x也改成了 `LF` ,而windows使用 `CRCF` 来作为换行符
当换行符改变时,git也会认为文件被改变,所以在多个平台上时,最好配置一下换行符转换,来避免换行符的不一致
> 因为早期 git 是为了开发 linux设计,所以我们一般把 CRLF 转换为 LF
可以使用下面命令来配置git
```shell
#仅在当前项目配置
git config `配置key` `配置值`
#全局配置 加上--global
git config --global `配置key` `配置值`
#使用 --get 来获取配置值
git config --get `配置key`
#例如
git config --global core.autocrlf true
git config --get core.autocrlf
```
> git 可以在用户主目录下创建 `.gitconfig` 文件来进行全局配置,也可以为单个项目配置
主要可能涉及下面两个个配置
* `core.autocrlf`
该配置将会自动把 `crlf` 转换为 `lf`
有三个值
* `true` 提交时自动把 CRLF 转换为 LF,拉取时自动把 LF 转换为 CRLF
* `input` 提交时自动把 CRLF 转换为 LF, 拉取时不做处理
* `false` 默认关闭
* `core.safecrlf`
该配置检查同一个文件是否出现了两种换行符
* `true` 不允许一个文件出现两种换行符
* `false` 允许一个文件出现两种换行符
* `warn` 允许一个文件出现两种换行符,但是会有警告提示
#### .gitattributes
.gitattributes 是项目中的一个特殊文件,可以允许你为项目中的每个文件夹或者文件类型来配置文件属性,以及换行符转换,因为在有些文件中,换行符可能是有特殊意义的
具体我也知道的不多,github上有一些 gitattributes 的模板,有兴趣可以去看看
### git的文件权限问题
git 是支持 linux/unix上的文件权限的,当你更改了文件权限之后,这个文件也会被视为更改。
但是 linux上的文件到了 windows, windows自然是不支持的,所以git就会显示文件被更改。
可以设置 `core.filemode` 为 `false` 来忽略文件权限
```shell
git config core.filemode false
```
git在linux和windows下的莫名修改问题