由于编辑器没有自动更新,有没有办法防止在 git pull 后意外覆盖?
Posted
技术标签:
【中文标题】由于编辑器没有自动更新,有没有办法防止在 git pull 后意外覆盖?【英文标题】:Is there a way to prevent accidental overwrite after git pull due to editor not updating automatically? 【发布时间】:2017-03-10 21:48:40 【问题描述】:当一个文件在编辑器(比如 Sublime 或 Atom)中打开,并且该文件在编辑器之外被编辑时,编辑器总是拒绝刷新它显示的文件。这种情况很少发生,因为很可能在特定时间范围内只使用一个工具来编辑文件。当文件为只读时,这显然不是问题。例如,读取系统错误日志时,文件会随着系统运行而更新,可能会有新的错误日志,但不会编辑日志文件,因此不会造成冲突。
但是,当文件被git pull
更新时,它会导致问题。
当一个人将最新的更新拉到 repo 时,他可能会在编辑器中打开一个文件,在更新中对其进行了一些更改。如果编辑器无法刷新文件,文件将与旧内容一起保存,并且所有新更改都将丢失。
有时,使用 sourcetree 反转大块很烦人,但是当有许多文件更新时,可能会在不注意的情况下将覆盖推送到 git 服务器 - 直到发生错误。目前我们正在使用git log --follow -p -- file
命令定位并恢复错误,但是如果不及时发现覆盖是不可能的,不得不手动复制这些行。有没有办法首先防止这种覆盖?
【问题讨论】:
我将使用的解决方案是远离这种行为方式的编辑器。大多数现代 IDE(Eclipse、IntelliJ、NetBeans 等)都没有这个问题。 php 有什么选择吗? (最好是免费的,所以 PHPStorm 不是一个选项) 我想我已经看到这种情况发生了几次,即使使用 IntelliJ 也是如此,但这从来都不是一个大到足以担心的问题。我不知道你可以为 PHP 使用什么编辑器来避免这种情况。 Notepad++ 似乎在这方面表现得非常好,即它不会吃掉你的更新。 有些成员使用的是 Mac,所以 notepad++ 不适合他们。 一种解决方法是在拉取之前关闭编辑器中的所有文件。如果编辑器与 Git 集成,这也是另一种选择。 【参考方案1】:当一个文件夹被编辑器(主要是我们团队中的Sublime或Atom)打开时,在编辑器外编辑代码时,有时会刷新编辑器中的内容,但有时不刷新。
这正是Atom issue 3594中讨论的内容
像file-watcher 这样的 Atom 包将有助于缓解此问题,如果检测到编辑器之外的修改,则会提示重新加载每个文件。
对于 SublimeText,您有同样的问题 reported in this thread。 正如that thread 中所述,当通过网络共享访问文件时,此问题在 Windows 上更为相关。File Reloader 可以提供帮助,但不会检测到外部更改。
SublimeText thread 提到设置 (2016)
"always_prompt_for_file_reload": true
但是当编辑器和保存的文件都发生变化时,这可能无济于事:editor like Visual Studio Code 解决了这个问题:
当您尝试使用 VSCode 保存文件时,如果双方(从磁盘和通过编辑器)都发生了更改,编辑器会警告您这种情况,并且文件比较将允许您决定做什么。
这就是为什么使用 SublimeText(除了"always_prompt_for_file_reload"
设置),您可能需要FileDiff plugin。
它确实允许使用 Saved 来区分文件:
【讨论】:
【参考方案2】:有没有办法从一开始就防止这种覆盖?
是的,因为您的编辑器无法通过文件系统中断进行检测,然后通过每 3 秒定期轮询文件系统来执行检测。
在 Notepad++ 上编程时,这种故障非常明显,这就是为什么需要定期检查文件系统以了解文件更改的轮询插件的原因。
对于Sublime Text
和Notepad++
,插件是:
-
https://packagecontrol.io/packages/Auto%20Refresh
https://superuser.com/a/592913/458103 (文档监控 => 开始监控)
由于在多个文本编辑器/IDE 上使用相同的文件进行编程,我使用了很长时间。然后在编辑器之间切换时,我大多数时候会因为他们没有从文件系统重新加载文件而失去我的工作。然而,在安装了上述插件后,我再也没有遇到过这个问题,也没有注意到由于定期重新加载而导致的性能问题。
【讨论】:
以上是关于由于编辑器没有自动更新,有没有办法防止在 git pull 后意外覆盖?的主要内容,如果未能解决你的问题,请参考以下文章