我在bitbucket.org上有一个git库,方便我在单位和家里的机子上同步代码,但是每次从服务器上拉下来代码都会出现很多修改,重新clone也不行,用文件对比工具查看也没有看到修改。
怀疑是line endings的问题,把git重新安装了下,选择了checkout what,commit what那个选项,仍然不行,求解释求指导,谢谢 o(╯□╰)o
-----补充----
现在确定是line endings问题了,下面是commit的log,一满屏,都是这样的。怎么设置?需要重新安装还是修改配置?
另外这个问题是什么原因导致的呢?我两台机子上设置的一样呀,难道是服务器给转了?
The file will have its original line endings in your working directory.
warning: CRLF will be replaced by LF in src/Presentation.Seedwork/Resources/Mess
ages.Designer.cs.
The file will have its original line endings in your working directory.
37 files changed, 3234 insertions(+), 3234 deletions(-)
试试在你本地的repo上设置一下
根据你的描述,看起来你公司和你家里用的是不同的操作系统,所以换行符的差异会让 Git 认为文件的内容发生了变化。这个是可以设置成让 Git 智能帮你转换的:
在 Windows 系统下,安装 Git 时应当置选项
core.autocrlf
为true
,也就是下图所示的那一个:在 Linux/Unix/Mac 系统下,一般来说保持默认设置就好了(没有安装界面供选择)。当然你可以手工编辑
~/.gitconfig
设core.autocrlf
为input
,如我机器上的设置:以上两种设置最终的结果就是提交的时候 Git 总是将换行符自动转为
LF
,并且在 Windows 下checkout
回来时自动帮你转换为CRLF
,以便适应 Windows 下的编辑器。如果你做了上述设置依然会碰到题目中描述的问题,那么不用想,一定是你的团队中另外有别的成员没有做对以上两点的设置(很大的可能性是使用 Windows 的),你们可以逐一排查。
另外,安装 Windows Git 时另外一个设置也比较让人费解,建议选下图这样的:
选择这种,所需要的配置量最少,CLI 和 Linux 的兼容性也比较高,唯一的缺陷就是 Windows CLI 里和 Linux 重名的命令会被 Linux 版本覆盖掉,比如
find
之类的。在我看来,反正 Windows CLI 是个渣渣,覆盖了也无所谓了。能比较出line ending是任何比较工具的基本能力