Synchronization 如何使用ssh将代码同步到远程计算机?

Synchronization 如何使用ssh将代码同步到远程计算机?,synchronization,development-environment,Synchronization,Development Environment,对于我正在学习的当前课程,我们使用远程计算机运行代码 我正在我的MacBook上本地编码,我正在寻找一种好方法,使我的本地代码在集群上保持最新 我当时的做法是打开一个终端来运行SCP来复制目录,另一个终端通过SSH连接到集群中来生成和运行我的代码 这对我来说似乎不太理想。有没有一种方法可以在修改文件时自动将其发送到集群 还是我只能用一行命令来移动所有内容?除了分布式版本控制之外,最好的选择是通过ssh使用rsync。我通过在每台机器上执行以下操作来保持两台机器的同步: rsync -urltv

对于我正在学习的当前课程,我们使用远程计算机运行代码

我正在我的MacBook上本地编码,我正在寻找一种好方法,使我的本地代码在集群上保持最新

我当时的做法是打开一个终端来运行SCP来复制目录,另一个终端通过SSH连接到集群中来生成和运行我的代码

这对我来说似乎不太理想。有没有一种方法可以在修改文件时自动将其发送到集群


还是我只能用一行命令来移动所有内容?

除了分布式版本控制之外,最好的选择是通过ssh使用rsync。我通过在每台机器上执行以下操作来保持两台机器的同步:

rsync -urltv --delete -e ssh /src.dir user@othermachine:/src.dir
你提到使用MacBook-rsync是在MacOSX上的。据我所知,它不需要额外安装。rsync的美妙之处在于它寻找修改,只复制修改过的文件。它不会像分布式版本控制系统那样合并同时修改,但如果你像我一样,在笔记本电脑上做一些工作,然后在桌面上做一些工作,rsync是切换模式时将所有更改的文件(仅更改的文件)从一个发送到另一个的最佳方式

注意:此处使用的rsync选项有:

  • -u
    ,--更新接收器上更新的跳过文件
  • -r
    ,--递归到目录中
  • -l
    ,--链接将符号链接复制为符号链接
  • -t
    ,--时间保留修改时间
  • -v
    ,--冗长增加冗长
  • --delete
    从dest dirs中删除无关文件,在
最后,
-e
是允许您指定远程shell的选项,在本例中,ssh

如果可以使用,这可能是最好的方法


是否可以使用(保险丝)安装远程文件夹?您可以直接编辑文件,也可以使用rsync或任何文件夹到文件夹的同步工具。

我知道这不是您知道的答案,但您可以设置SVN或CVS服务器,这将非常简单


否则我会选择rsync。

可能不是您想要的,但您应该看看像git这样的DSCM:

  • 在远程服务器中创建存储库
  • 使用ssh将其克隆到您的开发机器上
  • 添加/修改代码
  • 使用提交和推送(同样,通过ssh)合并更改

  • 比rsync更好的是,它将允许您在任意一端进行更改,并将检测和帮助解决任何冲突。它通过ssh工作。

    rsync是否仅在我的comp上运行?我只是想知道我是否可以访问集群上的rsync。不,在ssh隧道的两端都需要rsync。这是很常见的,所以我肯定会吸它看看。我回家后会检查一下。还有一个问题,rsync是否寻找修改?是的,rsync进行增量备份。值得一提的是,如果您不想更新已知未更改的旧文件,您应该使用
    --忽略现有的
    标志并放弃
    -u
    ,并且它只能安装在两台机器中的一台机器上?来自
    unison-doc教程
    :“服务器机器上安装的unison版本必须与客户端机器上安装的unison版本相同。”因此,似乎必须在两台计算机上都安装
    unison
    。使用源代码管理进行文件共享是“容易”的,正如您所建议的,但也是“讨厌”的。这种方法在几个场景中可能特别有问题。如果文件已受源代码管理,则使用现有的SCM(源代码管理系统)将“弄脏”历史记录。或者,无论是同一SCM的第二个实例还是不同SCM的第二个实例,尝试使辅助SCM工作都会有很大的问题。我认为即使使用了源分支,在现有的SCM上也没有干净的方法。就我个人而言,我会尽量避免使用SCM,但还是坚持使用rsync之类的。使用源代码管理进行文件共享是“讨厌的”。(请看我对邪恶博士回答的评论。)