【发布时间】:2016-08-22 10:13:55
【问题描述】:
我在 Windows 上,我禁用了 core.autocrlf:
$ git config core.autocrlf; git config --global core.autocrlf
false
false
现在,我假设 git 不会弄乱任何行尾,但我的 repo 中的一些文件不断导致问题。
我刚刚克隆了一个新的 repo 副本,git 已经告诉我有未暂存的更改。当我git diff -R 时,我可以看到 CRLF 行结尾已添加到文件中:
diff --git b/nginx-1.11.1/contrib/geo2nginx.pl a/nginx-1.11.1/contrib/geo2nginx.pl
index bc8af46..29243ec 100644
--- b/nginx-1.11.1/contrib/geo2nginx.pl
+++ a/nginx-1.11.1/contrib/geo2nginx.pl
@@ -1,58 +1,58 @@
-#!/usr/bin/perl -w
-
-# (c) Andrei Nigmatulin, 2005
+#!/usr/bin/perl -w^M
+^M
+# (c) Andrei Nigmatulin, 2005^M
我不明白这些行尾是从哪里来的,但我也无法“恢复”这个更改。当我再次签出文件时,它仍然会被修改:
$ git checkout -f nginx-1.11.1/contrib/geo2nginx.pl
$ git status
On branch dev
Your branch is up-to-date with 'origin/dev'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: nginx-1.11.1/contrib/geo2nginx.pl
no changes added to commit (use "git add" and/or "git commit -a")
这对我来说毫无意义,所以我只是在文件上运行dos2unix:
$ dos2unix nginx-1.11.1/contrib/geo2nginx.pl
dos2unix: converting file nginx-1.11.1/contrib/geo2nginx.pl to Unix format...
现在肯定不应该有任何变化,对吧?但文件仍显示为在git status 中修改,git diff 仍会在工作副本中报告 CRLF 行结尾。
当我现在暂存并提交文件时,生成的文件将具有 LF 行结尾,即使差异显示为 CRLF 行结尾。
我没有全局 .gitattributes(git config --global core.attributesfile 不输出任何内容)。并且项目中的.gitattributes设置了* text eol=lf(full .gitattributes)。
这是怎么回事,我该如何解决?
重现问题
我可以使用开源 project I'm maintaining 重现此问题:
$ git clone git@github.com:fairmanager/fm-log.git
Cloning into 'fm-log'...
remote: Counting objects: 790, done.
remote: Total 790 (delta 0), reused 0 (delta 0), pack-reused 790
Receiving objects: 100% (790/790), 201.71 KiB | 138.00 KiB/s, done.
Resolving deltas: 100% (418/418), done.
Checking connectivity... done.
$ cd fm-log/
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: .idea/dictionaries/OliverSalzburg.xml
modified: .idea/inspectionProfiles/Project_Default.xml
modified: .idea/inspectionProfiles/profiles_settings.xml
no changes added to commit (use "git add" and/or "git commit -a")
【问题讨论】:
-
在黑暗中拍摄:
git ls-tree HEAD:nginx-1.11.1/contrib是否显示了geo2nginx.pl的两个版本,只是大小写不同? -
@torek 不,只有一个文件。