为什么 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.
我在 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.