git的状态显示即使autocrlf =假修改git的状态显示即使autocrlf =假修改(git

2019-05-31 23:48发布

我遇到了同样的问题在这样一个问题: git的状态显示的修改,git的结帐- <文件>不删除它们

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的结帐 - 。

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的复位 - 硬

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的补充。 git的藏匿处; git的藏匿下降

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")

Answer 1:

这似乎是在msysgit确实是一个错误。 作为一种变通方法,尝试创建一个.gitattributes包含文件

* -text

这将告诉混帐不上的任何文件进行EOL转换。



Answer 2:

检查你有没有.gitattributes文件

随着中提到了“效果”一节gitattributes手册页 ,这些文件也可以对EOL和自动转换的效果:

text ^^^^^^

这种属性使并控制端的行归一化。
当一个文本文件是标准化的,它的行结束转换为LF在库中。
要控制行结束样式在工作目录时,使用EOL属性为单个文件和core.eol配置变量的所有文本文件。

还要检查你的配置为core.eol ,如“中提到的行结束转换如何一起工作git core.autocrlf不同的操作系统之间 ”。



Answer 3:

我调查MSysGit core.autocrlf的怪异行为,我发现有:

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

在全局配置文件,然后在另一台电脑复制回购NO core.autocrlf设置(不是克隆,只被复制),发出一个git status中标记为修改过的所有文本文件,命令的结果(周围没有gitattributes)。

但是,如果你添加本地(库)core.autocrlf设置为true,然后发出一个git status命令, 所有的变化消失,库变回是干净的

但(这是奇怪的行为),如果你从仓库里面删除配置文件刚添加的core.autocrlf设置(并返回到确切的初始状态), 通过git status命令继续报告没有变化

由于没有任何操作已在仓库进行,仅仅变更了配置设置,并恢复到原来的状态,已经做的伎俩...

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



Answer 4:

这个问题可以通过引起gitattributes'文字选项。

请仔细阅读文档,但本质上autocrlf如果只事项text是不是在设置.gitattributes

不明
如果文本属性是未指定的,GIT中使用core.autocrlf配置变量,以确定是否该文件应转换。

寻找你的.gitattributes通过文件:

find <root-dir> -name .gitattributes

grep用于texteolcrlf找到你的罪魁祸首,并根据需要修改。

你可能只是更改该文件,并恢复更改没有提交足够长的时间,通过您的问题来获得。



Answer 5:

“autocrlf”问题是(使用tortoisegit桑巴份额超过linux下的服务器IE) 多平台的回购典型问题

我意识到,有时(经常),它更多的是“文件模式”的问题比autocrlf之一: - git的状态窗口中显示挂起的修改 - 混帐地位的Linux什么都不显示

“模式改变100755 => 100644配置/ packager.xml”

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



Answer 6:

虽然我不知道是什么原因造成这种怪异的行为,我知道放弃可能的工作变化的另一种方式。

警告! 要特别小心和第一做一个备份; 这可能是极具破坏性的。

如果你关心在仓库中承诺的所有数据 ,你可以简单地在工作目录(除了隐藏.git目录当然)删除一切并运行git reset --hard HEAD有混帐从资源库中重新创建单独的工作目录数据。

记住要仔细检查,如果你没有那个不混帐在此之前跟踪的所有重要数据。 这是不够的,检查git status为未提交的更改-请记住,从工作目录删除所有文件也将删除您告诉混帐忽略文件,它们不会被重建git reset --hard HEAD ,因为他们不在所有跟踪。



文章来源: git status shows modifications even with autocrlf=false