gpt4 book ai didi

git - Emacs 使用 Git-Rebase 将缓冲区恢复到奇怪的先前状态

转载 作者:太空狗 更新时间:2023-10-29 13:52:22 25 4
gpt4 key购买 nike

我在 OS X 上使用 Emacs (23.3.1)。我从终端发出 git 命令,没有使用 Emacs 的任何 VC 功能。我将 Emacs 设置为在修改文件时刷新,这是通过我的 .emacs 文件的这些行启用的:

(custom-set-variables
...
'(auto-revert-interval 1)
...
)
(global-auto-revert-mode 1)

这一直如我所愿;如果我 pull ,我的 Emacs 缓冲区将随着 merge 或冲突而更新,就好像我已经退出缓冲区并重新加载每个缓冲区一样。

最近我开始 rebase (调用 git-fetch 然后调用 git-rebase)而不是简单地 pull (使用 git-pull),我不知道这个问题是否真的与 git-rebase 有关,但我肯定之前没有注意到这个问题,现在就做。

问题来了:我更新了一个文件,使用 git commit -am "..." 提交更改,运行 git fetch origin,然后运行 ​​git rebase origin/master(有时在交互模式下将提交压缩在一起)。既然我已经引入了远程更新,我又去编辑文件,发现看起来我已经丢失了所有最近的更改。第一次发生时,我非常生气并诅咒 rebase 算法以某种方式丢失了我的更改,直到我意识到该文件完全完好无损,只是 Emacs 以某种方式恢复到我更改之前的文件版本刚刚 promise 。我总是可以通过关闭缓冲区并再次加载文件来解决问题,但每次都这样做很痛苦。

有人知道问题出在哪里吗?

最佳答案

我是 autorevert 的原作者,但是,由于我已经有一段时间没有使用它了,所以我必须深入挖掘我的内存。

我认为这归结为 Emacs 核心功能 verify-visited-file-modtime 的问题,该功能自动恢复用于检查缓冲区是否需要刷新。

这可能是由多种原因造成的:

  • 这可能是竞争条件,Emacs 在文件完全写入之前读取文件,但将缓冲区 modtime 设置为结束时间。 (发生这种情况时,Emacs 已经中途自动还原了缓冲区,但是新的自动还原不会触发还原文件的最终版本。)

  • 如果文件的两个变体具有相同的时间戳,那么 Emacs 将看不出差异。

我认为您在 lisp 方面几乎无能为力以使其正常工作(无需解决蛮力解决方案)。 Emacs 确实需要自动 获取已打开文件的指纹并将其读入缓冲区,而这只能从核心完成(这在我的领域之外)。此外,某些文件系统的时间戳分辨率不超过一秒,这使得使用时间戳来检测文件是否已更改在本质上是困难的。

关于git - Emacs 使用 Git-Rebase 将缓冲区恢复到奇怪的先前状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6512086/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com