是否有允许“增量上传”的FTP或类似FTP的客户端-即仅上传文件中已更改的部分?


9

我经常通过FTP(用于Web开发的CSS文件)对相当大的文本文件进行小的更改,并且由于我的互联网连接速度非常慢,所以这是一个非常痛苦的过程。

即使仅更改文件的一个字符,我仍然必须坐下来等待相当长的时间,然后才能将整个文件重新上传到服务器。

有什么方法可以编辑本地计算机上的远程托管文件,并且在保存文件时,仅上传文件中已更改的部分

编辑:我想我目前尚不清楚如何使用我的FTP客户端。基本上,我使用WinSCP通过SFTP打开一个远程文件。WinSCP将其保存到一个tmp文件夹,启动Sublime Text,然后开始编辑它。当我点击保存时,WinSCP会自动重新上传文件。我从未真正将文件永久保存在计算机上-一切都通过WinSCP的temp文件夹完成。这就是为什么我正在寻找一种可以以“即插即用”类型的方式使用的解决方案。


先前的讨论

我之前曾在ServerFault发布过此问题,建议使用git之类的内容,但是正如我所解释的那样:

使用git或类似的版本控制工具,每次保存文件时我都必须提交一次,对吗?即使可以自动完成(即,如果我有一个宏在Sublime Text中保存了Ctrl-S并同时执行了git push),我每小时可能会对CSS文件进行50-100次小修改;我肯定会收到垃圾邮件提交日志吗?另外,git解决方案不灵活,因为它依赖于我正在编辑的任何文件作为git repo的一部分。

到目前为止,我唯一能想到的解决方案是使用rsync进行某种骇客入侵的过程,但即使如此,它还是很奇怪:

  1. 我将需要的文件下载到我的计算机上(通过FTP / rsync /任何方式)。
  2. 我在(例如)Sublime Text中打开文件并开始进行编辑。
  3. 后台进程正在监视文件夹中的文件修改。当我保存文件时,该过程立即触发从计算机到服务器的rsync操作,从而传输文件的更改部分。

但是,我需要手动设置或指定远程文件或目录路径,否则本地rsync脚本将不知道在何处rsync文件,因此此方法仍然很不灵活。这种方法不会让我立即浏览到一个随机文件,无法像FTP客户端一样打开并保存它。

此方法也没有可见的反馈,例如上传进度栏。


7
正确使用git是正确的答案。您在这里寻找的是不良做法的解决方法。如果您做错了什么并弄坏了怎么办?Git给您回滚。
TRiG

1
我不同意。如果您只想更改不属于仓库的大文本文件的一行,该怎么办?如果您的组织不允许或支持git怎么办?我的用例是,我正在对远程托管的文件进行数百次微小的更改,这些文件必须“实时”和“就地”编辑。
WackGet

我现在没有时间测试一个大文件,因此将其发布为注释,而不是答案,而是查看Beyond Compare-这是一个跨平台的GUI差异文件,可以通过FTP / SFTP进行编辑,您可以选择要同步的行。可能仍然不理想,但可行。他们也有免费试用版。
尼克,

Answers:


7

Vim有一个称为netrw的内置插件,该插件允许Vim编辑远程文件。Rsync是它可以使用的协议之一:

:e rsync://user@hostname:port/path
:w rsync://user@hostname:port/path

当然,如果您具有对远程计算机的SSH访问权限,并且已在其中安装了Vim,则远程使用Vim可能会更简单。在这种情况下,Nano,Emacs和其他具有命令行界面的编辑器也是可选的。但是,取决于连接的严重程度,这可能不是一个不错的选择。


都说

对远程托管的文件进行数百次微小的更改,这些文件必须“实时”和“就地”编辑

如果没有可靠的回滚系统(例如git可以提供的内容),您和您的组织就会在遇到不可避免的错误时恳求痛苦,而在您完全忘记所做的事情之前,这些错误很可能不会被注意到。


如果服务器运行任何版本的Linux,则SSH似乎是显而易见的答案。如果它尚未在服务器上运行,请按服务器管理员进行设置。
Charles Burge

谢谢你俩; 我确实具有完全的SSH访问权限,并且可以在服务器上配置任何必需的内容。我不能远程使用Vim,因为延迟通常很高。我也希望能够使用Sublime之类的桌面编辑器。我想我目前尚不清楚如何使用FTP客户端-基本上,我使用WinSCP打开一个远程文件,开始对其进行编辑,当我单击“保存”时,WinSCP会自动重新上传该文件。我实际上并没有将其下载到计算机上的任何永久目录中-一切都通过WinSCP的temp文件夹完成。我将编辑问题并进行澄清。
WackGet '16

@WackGet Vim也可以在桌面上运行,它称为GVim。Cream是Vim的一种特殊配置,对于像Sublime,Notepad或Textmate这样的更加习惯编辑器的用户来说,相对而言这应该是相对容易的。实际上,您使用WinSCP所做的就是netrw的工作方式。它会下载到一个临时位置,等待您保存,然后使用指定的任何协议将其写回到远程服务器。
8bittree '16

@ 8bittree谢谢,这肯定会有用。我不会将其标记为我的原始问题的答案,因为它限制了您使用基于Vim的插件。如果有人可以将类似于netrw的增量传输实施到FTP或类似FTP的客户端中,那将是完美的。目前我还没有找到这个,但是我希望它存在。
WackGet '16

1

Beyond Compare是一个差异工具,可以比较和合并文件夹和文件。FTP服务器也受支持,可以像本地文件夹一样进行处理。它是专有的,终身安装一次许可证的费用为标准版(带FTP)为30美元,专业版(带SFTP)为60美元。它可以在Windows,Mac OS和Linux上运行。我个人在自己的家用计算机上开发网站,并在满意时将更改上传到Web服务器。我通过Beyond Compare手动进行了更改,但这也可以自动进行。您可以尝试一下,看看它是否仅上传完整的文件或大块更改。我不确定。


超越无比棒极了-如果您没有SSH访问权限,那就完美了,但是您仍然需要确保文件在远程服务器上进行了同步(支持基于SSL的FTP)
Sam Heuck
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.