Merge 在文件更改时编辑缓冲区合并

Merge 在文件更改时编辑缓冲区合并,merge,text-editor,Merge,Text Editor,许多编辑会注意到,当文件从他们下面变出来时。如果您对文件有未保存的编辑,是否有任何编辑器允许您进行三方合并 常见的情况是,在执行SVN更新之前,我忘记保存一个文件,当我切换回编辑器时,我意识到我现在可以选择踩踏刚刚进行的更新、放弃更改或执行复制/粘贴/外部差异工具歌舞 是的,在我更新之前我知道正确的解决方案是ctrl+s,但我是人,希望在我把问题搞糟后有一个非常简单的解决方案来解决问题。这似乎是源代码管理的问题,而不是编辑器的问题 当然,Emacs可以通过编程实现这一点,但默认情况下,它似乎只是

许多编辑会注意到,当文件从他们下面变出来时。如果您对文件有未保存的编辑,是否有任何编辑器允许您进行三方合并

常见的情况是,在执行SVN更新之前,我忘记保存一个文件,当我切换回编辑器时,我意识到我现在可以选择踩踏刚刚进行的更新、放弃更改或执行复制/粘贴/外部差异工具歌舞


是的,在我更新之前我知道正确的解决方案是ctrl+s,但我是人,希望在我把问题搞糟后有一个非常简单的解决方案来解决问题。

这似乎是源代码管理的问题,而不是编辑器的问题

当然,Emacs可以通过编程实现这一点,但默认情况下,它似乎只是询问您是否要保存更改过的文件。尝试编辑已更改的文件将提供将缓冲区还原为文件内容的选项


Vi(至少是我正在使用的版本)甚至不检查文件是否已更改。(在我编辑文件之前,它也不会检查文件是否为只读,这让我抓狂。也许我需要找到一个更好的vi。)

使用vim,您可以使用:DiffOrig进入diff模式
可以使用强制检查修改:check t

要使其自动化,可以将以下内容放到.vimrc中:

au FileChangedShell * DiffOrig

一旦Vim意识到文件(mtime)发生了更改,它将立即进入差异分割。

听起来解决文件被修改的问题是一个糟糕的方法。正如我通常回答的那样:你到底想解决什么问题呢?

我很少遇到这种情况,可能是因为我的手指一不做任何事情就开始存钱,而不必真正去想它

否则,我建议您找到一个集成到编辑器中的SVN客户端。大多数这样的客户端在执行提交或更新之前都会自动(或请求)保存。

当它检测到您打开的文件中未保存的更改已在磁盘上更改时,会询问您是否要从磁盘重新加载该文件,忽略磁盘上的更改,或者查看磁盘上的文件与已打开的未保存更改的版本之间的差异

这是一个双向差异,而不是你要求的三向差异。我不知道有哪个文本编辑器会提供三向差异。如果磁盘上的文件被删除,文本编辑器就不再有原始文件的副本。这将是版本控制需要解决的问题


一个预防措施可能是让你的编辑器锁定你打开的文件。然后,SVN更新将在编辑器中打开的任何文件上失败。在EditPad Pro中,在选项、首选项、文件中有一个选项。

因此,您对文件有未保存的更改,然后对该文件进行SVN更新,对吗

在这种情况下,您应该在更新后保存更改,然后再次运行SVN更新。第二次运行SVN更新将尝试合并存储库中的更改,并告诉您是否存在冲突


更重要的更改是编辑器中未保存的更改,来自SVN更新的更改始终可以从存储库中再次提取。

好(后续)问题。我想知道真正的答案是否是使用某种源代码管理?问题正是我要求的,因为它只出现在“Oops”和“what now”之间。奇怪的是,问题通常是由于在使用源代码管理时忘记了一两步。(请参见编辑)@JesperE:对不起,我忘了在我的评论中留下这一点。编辑器可以保留上次加载的文件的副本(作为撤消缓冲区的一部分?)。回复:锁定,我从未喜欢过锁定解决方案:(保留原始文件的副本会在您进行第一次更改时立即使文件使用的内存增加一倍。EditPad Pro对此没有选择。要使其正常工作,必须首先还原文件,或者必须应用SVN合并。除此之外,…+1您可能认为需要还原文件是正确的,否则更新可能不会再次引入更改。但是,如果您只是保存更改,然后与repo版本进行比较,则可以手动合并必要的更改。