使用emacs tramp与rsync进行远程开发

时间:2008-09-29 13:10:15

标签: emacs rsync tramp

我一直在使用emacs tramp进行一些远程开发,发现它很慢。每次保存文件时,完成保存大约需要10秒钟。所以,现在我使用rsync远程传输文件,它运行得更快,大约需要一秒钟加上emacs的本地保存是即时的。在tramp中是否有任何配置选项可以让它像命令行上的rsync一样快速运行?使用tramp而不是rsync有什么好处,即使我看到这么糟糕的表现吗?

8 个答案:

答案 0 :(得分:12)

虽然可以将tramp配置为使用大量传输方法,但我认为您使用ssh连接到远程服务器。

我相信完成操作所需的大部分时间来自建立连接和身份验证。如果您使用的是足够新版本的OpenSSH,可以通过使用连接共享功能来帮助您,请参阅ssh_config(5)中的ControlMaster。

我建议你试试

ControlMaster auto

并查看是否可以改善这种情况。

答案 1 :(得分:6)

如果你正在使用tramp for ssh / scp功能,你会发现打开一个持久的SSH连接会使tramp操作更快:他们将重用现有连接,而不是每次创建一个新连接,切断大量的加密开销而不影响安全性。请参阅有关SSH ControlMaster功能的文章。

答案 2 :(得分:6)

有几个答案提到启用 ControlMaster 以保持持久性 ssh连接打开(这样可以避免每个Tramp需要昂贵的连接设置/握手)在ssh上运行,但你不需要在Emacs之外配置任何东西来使用它 - 如果你看一下tramp-methods变量,你会看到现有的方法可以启用ControlMaster。

具体来说,是rsynccscpc方法。

连接的两端当然需要支持ControlMaster(例如Cygwin不能这样做,这对Windows用户来说是一种耻辱*),但我建议将其中一个设置为tramp-default-method。< / p>

没有持久的连接会使扩展的Tramp使用非常痛苦,但有一个它非常难以使用(在某种程度上,如果连接速度相当快,你几乎可以忘记它正在发生)。

在回答问题的最后部分时,是的,有很好的理由使用Tramp而不是手动rsyncing文件。主要的一点是shell命令可以直接在远程服务器上执行,你甚至不必考虑它,因为Emacs会处理细节。

例如,从远程文件缓冲区, Mx shell RET 在远程服务器上打开一个shell,并且命令如 Mx < / kbd> rgrep RET Mx find-grep-dired RET 将运行远程服务器上的find + grep。我相信这通常适用于调用shell命令的函数。

对我来说,这是使用Tramp的充分理由(除非在远程服务器上安装Emacs并使用本地显示器是一种选择,在这种情况下,对于长期使用,我会考虑这样做)。

(*)当我使用Windows时,我曾在本地托管Linux VM并在其中运行Emacs(使用Cygwin提供X显示),因为唯一使用ControlMaster for Tramp({{3 }})。

答案 3 :(得分:3)

您是否了解gnu.org上使用rsync提及的tramp文档中的部分?它部分地说:

  

5.3外部转移方法

     

外部传输方法通过多个通道运行,使用   委派文件时,许多操作的远程shell连接   转移到外部转移实用程序。

     

这节省了多路复用的编码和解码开销   通过一个连接传输具有内联方法。

     

...

     

rsync - ssh和rsync       使用ssh命令安全地连接到远程计算机和       用于传输文件的rsync命令几乎与scp方法相同。

While rsync performs much better than scp when transferring files that 
exist on both hosts, this advantage is lost if the file exists only on one side 
of the connection.

The rsync based method may be considerably faster than the rcp based
methods when writing to the remote system. Reading files to the local
machine is no faster than with a direct copy.

This method supports the ‘-p’ hack.

答案 4 :(得分:1)

对我而言,加速很快!现在使用tramp真的很愉快。我也喜欢sshfs,因为我也在emacs中编译,tramp为我做远程编译并为我解释编译器的错误信息:)

答案 5 :(得分:0)

由于您之前说过在特定服务器上遇到问题,请检查问题计算机上的sshd配置文件。它可能类似于/ etc / ssh / sshd_config。

查找名为“UseDNS”的配置选项。将其设置为“否”。

看看这不会加快你的速度。如果是这样,那么ssh可能正在等待你可能不关心的反向dns查找。

答案 6 :(得分:0)

最近我开始接受sshfs,以便远程文件可以在本地编辑。适用于Linux,Mac和Unix系统,并将ssh部分放在一个命令而不是每个访问中。并完全存在于用户空间中。

答案 7 :(得分:0)

如果您使用的是ssh方法,则可以尝试使用sftp方法,我相信它会打开与远程ssh服务器的持久sftp连接。此外,如果您正在使用GNOME,则可以将sftp添加到tramp-gvfs-methods以使TRAMP使用GNOME的GVFS连接到sftp服务器,这可能会更快/更方便。