我经常使用的 Github 存储库(Python gensim
)中最近的一些更改甚至在新克隆中也产生了明显的问题(对于带有 git-2.17.1 的 Ubuntu 系统):在克隆之后,几乎所有文件都已经显示为“已修改” ',即使是正常的 'git checkout --' 也无法重置这种不需要的、有效的虚假状态。(因此,不可能在该工作目录中做任何有用的事情,甚至切换到 alt 分支。)
具体来说,在一个全新的目录中,我运行:
git clone https://github.com/RaRe-Technologies/gensim.git
它似乎成功了。但是,agit status
会立即显示很多很多修改过的文件:
$ cd gensim
$ git status
On branch develop
Your branch is up to date with 'origin/develop'.
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: docs/notebooks/index
[...
140+ other files
...]
modified: jupyter_home.png
no changes added to commit (use "git add" and/or "git commit -a")
尝试类似的东西git checkout -- jupyter_home.png
没有效果:它仍然显示为已修改。
尝试git diff
打印一堆以下类型的警告,即使是二进制文件类型(如 PNG),也显示惊人的每个文件差异:
warning: CRLF will be replaced by LF in docs/notebooks/index.
The file will have its original line endings in your working directory.
虽然我最初在 Ubuntu 上遇到过这种情况,但它在 MacOS 下也可以在较小程度上重现。(只有 8 个文件,而不是 140 多个文件,以损坏的“修改”状态到达。)
我强烈怀疑最近的提交添加了一个.gitattributes
包含以下内容的文件:
% cat .gitattributes
* text eol=lf
但是,我不知道仅此一项会如何破坏工作目录,并且删除它对 . 报告的状态没有立即影响git status
。
我希望能够制作一个没有这个问题的新克隆 - 但我也想了解并修复任何触发这种新行为的远程问题,以便其他人可以做一个clone
没有问题的简单操作,并且没有无意行尾编辑损坏二进制文件的风险。
我怎样才能修复我的克隆,或者在没有这个问题的情况下进行新的克隆?是否可以修复远程存储库本身以防止它咬其他只想要工作克隆而无需其他本地配置更改的人?
(FWIW 没有一个core.autocrlf
配置选项经常针对类似问题提出建议,如果在 之前设置clone
,会以任何方式改变问题 - 不是git config --global core.autocrlf true
,,git config --global core.autocrlf false
也不是git config --global core.autocrlf input
。)