为什么 Git 写入我的文件?

Why does Git write to my files?

我在 Git 存储库中有一些源文件,main.c 和其他一些。我使用 Vim 来编辑这些文件。

假设我正在编辑 main.c。我做了一个更改,告诉 Vim 写出,然后切换到终端(不杀死 Vim)和 commit/push。如果我用 main.c 返回 Vim 并尝试再次写出,我会收到此警告:

WARNING: The file has been changed since reading it!!!
Do you really want to write to it (y/n)?

committing/pushing 如何修改我的源文件?为什么?

你能告诉我们你的 .gitattributes 文件吗?您是要让它更改行结尾吗?

你为什么不尝试做一个差异并向我们展示差异是什么。

可能是权限问题(git 更改文件的可执行位)。
git config core.filemode false 后重试。

解决方法很简单:用:e filename重新打开文件。
或者(如果您的文件已保存并且当前没有修改),运行 :bufdo e,这将使 Vim 重新打开每个缓冲区。

其他答案表明写入可能是由于 Git 执行行尾更改或扩展配置的属性。一个简单的解决方案是

:set autoread

在 Vim 中自动更新文件(只要您没有更改它,根据您的用例,这似乎不太可能)。

'autoread' 'ar'         boolean (default off)
        When a file has been detected to have been changed outside of Vim and
        it has not been changed inside of Vim, automatically read it again.