我有一个仓库,我为它添加了一个 gitattributes
,并且一直在正常工作。我通过 Dropbox 将其同步到另一台机器。当我在另一台机器上打开时,一堆文件突然出现在未暂存区中,并且显示为全部差异(所有的文件都有行尾差异),我的 crlf 结尾基本上是 .* text=auto
,而我是在 Windows 上工作的。我尝试将更改藏起来、重置分支等等。最终,我决定提交这些文件,然后进行一些其他的提交,我想在行尾提交之前重新排序(并压缩)。但是当我尝试变基时,出现了:
error: Your local changes to the following files would be overwritten by merge
# those same files
Please, commit your changes or stash them before you can merge.
Aborting
Could not apply 89b25b81fff1a1e7893319e123aaaca9c4162a95... <commit message>
当然,stash不起作用
这是一个bug吗?
相关:
- 如何在从SVN迁移到git后解决行尾问题?(是的,我的是git-svn克隆版本,但我不认为这真的很重要)
- 似乎无法放弃Git中的更改(是的,我想知道为什么)
- git认为文件已更改
- 有人能向我解释一下git diff在这里看到的区别吗?
编辑 与机器无关 - 在同一台机器上,某些(...)操作会使这些文件(它们在.gitattributes
中作为文本)出现在“更改”部分。唯一似乎存在的解决方法是:
git rm --cached -r .
git reset --hard
请谨慎使用
编辑:上述的黑客攻击已被移至别名状态:
[alias]
crlf = !git rm -r . --cached -q && git reset --hard
更新于2015年9月30日:我在一个NTFS分区中有一个git存储库,我在双启动环境下使用windows 7和arch linux。当我关闭Windows并启动Arch时,两个文件(html)显示为完全差异(行结尾差异)。上述解决方法不起作用 - 除非您多次应用它,在其中刷新gui...
我的.gitattributes
:
* text=auto
*.py text diff=python
*.html text
.project text
*.pkl -text
# M$ files
*.bat text eol=crlf
# UNIX files
**/generate_second_post text eol=lf
# git files - have them with LF, as I edit them via the shell (echo etc)
*.gitignore text eol=lf
*.gitattributes text eol=lf
NB: linux可以让我提交、切换分支,但无法让我变基(rebase) - 而且这些差异总是出现在gitk/git gui中。
2018/12/14转到了Mac,我的解决方法不再有效。我在git邮件列表中发布了一条消息:https://marc.info/?l=git&m=154482149623324&w=2
希望这会引起一些关注。
$ git --version
git version 2.19.2
git add -u .; git reset;
- Attila Szeremicore.eol
设置为什么? - Schwerngit config --list
在这里:https://www.dropbox.com/s/fnyajvn6tz1s7wq/windows-config-all.txt?dl=0 - 我没有设置core.eol
,但是core.autocrlf=false
。 - Mr_and_Mrs_D