我遇到的问题与此问题相同: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")
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 -- .
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]>
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")
答案 0 :(得分:17)
答案 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
text
,eol
或crlf
找到您的罪魁祸首并根据需要进行修改。
您可以更改此文件并还原更改,而无需提交足够长的时间来解决您的问题。
答案 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
重新创建它们,因为它们'根本没有跟踪。