如何使本地目录自动与远程同步,而不会出现延迟问题?

Don*_*lon 5 remote synchronization latency

我开发了一个包含大量文件的 git-tracked 代码库。此代码必须在远程计算机上运行。因此,每次我在本地进行更改时,我都必须将其同步到远程并在远程上运行新代码。

我想消除手动同步步骤。我尝试过的事情:

  • 简单地git push(本地)和git pull(远程)进行工作是可行的,但会导致许多无用的提交。另外,有时我只是尝试一些小的改变,但我不希望这些改变被实施。
  • 在本地挂载远程目录可以sshfs工作,但文件访问有轻微的延迟。我不介意,但 PyCharm 依赖它并且许多功能都被破坏了。

有更好的方法来实现这一点吗?

小智 0

这种用例实际上很常见(尤其是在嵌入式开发中),因为正如您提到的,有时会发生本地计算机无法具有运行应用程序的正确环境的情况。

因此,许多/大多数 IDE 都有“远程运行”功能,但我没有使用 PyCharm 的经验。看这里的 PyCharm。

另一种与环境无关的方法是使用scprsync传输/同步文件,然后远程运行它们。

为了使其正常工作,您应该配置从主机到目标的 ssh 公钥身份验证ssh-copy-id user@target

然后您可以使用如下脚本将文件夹传输到远程,如果传输成功 - 运行一些命令:

#!/bin/bash

TARGET="<your-remote-here>";
USER="<your-user-name-on-remote-here>";
FOLDER_TO_TRANSMIT="<folder-to-transmit>";
FOLDER_TO_TRANSMIT_TO="<folder-path-on-target>";
REMOTE_COMMANDS="touch ~/testdir/z; ls ~/testdir;"

#transmit only (inefficiant, transmits everything, every time)
#scp -r $dir_to_transmit $USER@$TARGET:$FOLDER_TO_TRANSMIT_TO;
rsync -rv --delete $dir_to_transmit $USER@$TARGET:$FOLDER_TO_TRANSMIT_TO

if [ $? -eq 0 ]
then
    ssh -t $USER@$TARGET "$REMOTE_COMMANDS"
fi
Run Code Online (Sandbox Code Playgroud)

使用此设置,您唯一需要担心的是正确清理每次传输到的文件夹。(rsync:--delete源文件夹中不存在的所有内容也会在目标文件夹中删除,这可以通过排除模式来避免)(scp:如果适用,您可以例如删除整个远程文件夹,如果您愿意的话)

如果您的设置过程稍微复杂一些,您还可以创建一个每次都会传输的脚本,然后调用该脚本。