这是我的系统对话:
unrollme-dev-dan:views Dan$ git reset --hard HEAD
HEAD is now at 3f225e9 Fix scan titles
unrollme-dev-dan:views Dan$ 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: app/signup/finish.html
# modified: app/signup/scan.html
#
我将autocrlf设置为false:
unrollme-dev-dan:unroll-website Dan$ git config core.autocrlf
unrollme-dev-dan:unroll-website Dan$
unrollme-dev-dan:unroll-website Dan$ git config --global core.autocrlf
unrollme-dev-dan:unroll-website Dan$
我没有任何.gitattributes文件弄乱这个:
unrollme-dev-dan:unroll-website Dan$ find . -name .gitattributes
[ only results are in different directory tree ]
这是由.gitattributes
一级提升引起的,如下面的答案中所述。
当我对显示od -c
的文件执行\r\n
时。我不知道他们“应该”是什么,大概是他们应该以{{1}}结束,这就是差异显示的原因。但我不明白的是,即使\n
为false,这些文件也可能在结帐时被修改。
除了autocrlf之外,什么可以导致git在checkout上修改文件?
答案 0 :(得分:17)
此问题可能是由gitattributes的文本选项引起的 https://www.kernel.org/pub/software/scm/git/docs/gitattributes.html
可以通过临时编辑项目文件夹中的.gitattributes
文件来解决此问题。
将* text=auto
更改为#* text=auto
对文件行结尾进行必要的更改并推送您的提交。然后,您可以在完成更改后再次启用它,或者选择可能更适合您的项目的其他选项之一。
答案 1 :(得分:3)
我没有接受答案中提到的gitattributes文件,在我的情况下这是一个文件权限问题。要查看这是否是您的问题,请检查更改的文件&#39;与git diff的差异,例如:
git diff path/to/file.html
如果您看到的唯一更改是旧模式/新模式,则可能是权限问题。您可以使用以下命令告诉git忽略文件权限更改:
git config core.filemode false
或
git config --global core.filemode false
(取决于你如何使用git)。
由于性能原因,我最近从使用Cygwin git转换为git for plus,加上TortoiseGit正常运行,这可能是我的情况下权限被抛弃的原因。
参考文献: