即使使用autocrlf = false,git status也会显示修改

时间:2012-06-12 22:18:36

标签: git revert git-status core.autocrlf

我遇到的问题与此问题相同:git status shows modifications, git checkout -- <file> doesn't remove them

Git继续显示工作目录修改,即使使用git config --global core.autocrlf false

E:\_dev\github\Core [master +0 ~93 -0]> git config --get-all core.autocrlf
false
false

(请注意,我甚至将--system设置为false

为什么看起来Git仍在修改我的行尾?

试图摆脱修改

基线

E:\_dev\github\Core [master +0 ~93 -0]> git status
# On branch 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:   tools/StatLight/StatLight.EULA.txt
... more changes ...
no changes added to commit (use "git add" and/or "git commit -a")

git checkout - 。

E:\_dev\github\Core [master +0 ~93 -0]> git checkout -- .
E:\_dev\github\Core [master +0 ~93 -0]> git status
# On branch 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:   tools/StatLight/StatLight.EULA.txt
... more changes ...
no changes added to commit (use "git add" and/or "git commit -a")

偶尔会以奇怪的方式产生影响:

E:\_dev\github\Core [master +0 ~628 -0]> git checkout -- .
E:\_dev\github\Core [master +0 ~361 -0]> git checkout -- .
E:\_dev\github\Core [master +0 ~93 -0]> git checkout -- .
E:\_dev\github\Core [master +0 ~93 -0]> git checkout -- .
E:\_dev\github\Core [master +0 ~93 -0]> git checkout -- .

git reset --hard

E:\_dev\github\Core [master +0 ~93 -0]> git reset --hard
HEAD is now at 11a7f9a Merge pull request #8 from RemiBou/master
E:\_dev\github\Core [master +0 ~93 -0]>

git add。; git stash; git stash drop

E:\_dev\github\Core [master +0 ~93 -0]> git add .
... warnings ....
warning: CRLF will be replaced by LF in tools/StatLight/StatLight.EULA.txt.
The file will have its original line endings in your working directory.

E:\_dev\github\Core [master +0 ~93 -0]> git stash
Saved working directory and index state WIP on master: 11a7f9a Merge pull request #8 from 
RemiBou/master
HEAD is now at 11a7f9a Merge pull request #8 from RemiBou/master

E:\_dev\github\Core [master +0 ~93 -0]> git stash drop
Dropped refs/stash@{0} (de4c3c863dbad789aeaf563b4826b3aa41bf11b7)

E:\_dev\github\Core [master +0 ~93 -0]> git status .\tools\StatLight\StatLight.EULA.txt
# On branch 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:   tools/StatLight/StatLight.EULA.txt
#
no changes added to commit (use "git add" and/or "git commit -a")

6 个答案:

答案 0 :(得分:17)

这似乎是msysgit中的一个错误。要解决此问题,请尝试创建包含

.gitattributes文件
* -text

这将告诉git不要对任何文件执行EOL转换。

答案 1 :(得分:10)

检查您是否没有.gitattributes

"Effect" section of the gitattributes man page中所述,这些文件也可能对eol和自动转换产生影响:

text ^^^^^^
  

此属性启用并控制行尾标准化   对文本文件进行规范化后,其行结尾将转换为存储库中的LF   要控制工作目录中使用的行结束样式,请对单个文件使用eol属性,对所有文本文件使用core.eol配置变量。

另请参阅core.eol的配置,如“How line ending conversions work with git core.autocrlf between different operating systems”中所述。

答案 2 :(得分:6)

我正在调查MSysGit中core.autocrlf的奇怪行为,我发现它有:

[core]
    autocrlf = false
    safecrlf = true
    ignorecase = true
    eol = native 

在从另一台PC复制的repo中的全局配置文件和NO core.autocrlf 设置中(未克隆,仅复制),发出git status命令会导致所有文本文件被标记经过修改(没有gitattributes)。

但是,如果将本地(存储库) core.autocrlf 设置添加为true,然后发出git status命令,所有更改都会消失,存储库将返回干净

但是(这是奇怪的行为)如果从存储库配置文件中删除刚刚添加的core.autocrlf设置(从而返回到确切的初始状态), git status命令继续报告没有更改< /强>!

鉴于没有对存储库执行任何操作,只更改配置设置,并恢复到原始状态,这已经成功了......

如果这不是一个错误,我无法想象世界上谁可以称之为“正常”行为。

答案 3 :(得分:5)

此问题可能由gitattributes' text option.

引起

请仔细阅读文档,但基本上autocrlf仅在text中未设置.gitattributes时才会发生:

  

未指定
  如果未指定text属性,git将使用core.autocrlf配置变量来确定是否应转换该文件。

通过以下方式查找您的.gitattributes文件:

find <root-dir> -name .gitattributes

grep texteolcrlf找到您的罪魁祸首并根据需要进行修改。

您可以更改此文件并还原更改,而无需提交足够长的时间来解决您的问题。

答案 4 :(得分:1)

“autocrlf”问题是交叉多平台回购的典型问题(即在linux下的服务器上使用tombaisegit的samba共享)

我意识到,有时候(通常),它比autocrlf更像是一个“chmod”问题: - git status窗口显示挂起的修改 - git status linux什么都不显示

“模式更改100755 =&gt; 100644 config / packager.xml”

检查你的“静态”文件是不是+ x,(在这种情况下,tortoisegit不喜欢它)

答案 5 :(得分:0)

虽然我不知道是什么导致了这种奇怪的行为,但我知道了另一种方法,可以放弃可能有用的变化。

警告!要非常小心并先备份;这可能是非常具有破坏性的。

如果您关心的所有数据都已在存储库中提交,您只需删除工作目录中的所有内容(当然除了隐藏的.git目录)并运行git reset --hard HEAD即可git仅从存储库数据重新创建工作目录。

在执行此操作之前,请务必仔细检查您是否没有任何git未跟踪的重要数据。检查git status未提交的更改是不够的 - 请记住,删除工作目录中的所有文件也会删除您告诉git忽略的文件,并且不会使用git reset --hard HEAD重新创建它们,因为它们'根本没有跟踪。