通过SSH使用Eclipse完成远程项目

我有以下盒子:

a)带有Eclipse CDT的Windows盒子,
b)一个Linux盒子,我只能通过SSH访问

编译器和构建和运行我的项目所需的硬件都只在机器B上。

我希望工作“透明”;使用Eclipse CDT从该项目的Windows盒子中下载,并且能够从IDE中远程构建、运行和调试项目。

我如何设置它:

  • 这幢大楼能工作吗?还有比编写本地makefile更简单的解决方案吗?它会rsync项目,然后调用远程makefile来初始化实际的构建?Eclipse托管构建有相应的特性吗?
  • 调试会工作吗?
  • 最好- Eclipse CDT代码索引将工作?我是否必须将所有必需的头文件从机器B复制到机器A,并手动将它们添加到include路径?
208211 次浏览

尝试远程系统资源管理器 (RSE)。它是一组插件,可以做您想做的事情。

RSE可能已经包含在当前的Eclipse安装中。要在Eclipse Indigo中检查,请到窗口 > 开放的视角 > 其他……,并从开放的视角对话框中选择远程系统资源管理器来打开RSE透视图。

在Eclipse中从RSE透视图创建SSH远程项目:

  1. 定义一个新的连接,并在“新建连接”对话框中的“选择远程系统类型”窗口中选择“仅使用SSH”。
  2. 输入连接信息,然后选择Finish。
  3. 连接新主机。(假设SSH密钥已经设置。)
  4. 一旦连接,向下钻取到主机的Sftp文件,选择一个文件夹,并从项目的上下文菜单中选择创建远程项目。(在创建远程项目时等待。)

如果操作正确,现在应该有一个可以从project Explorer和eclipse中的其他透视图访问的新的远程项目。正确设置SSH连接后,密码可以成为正常SSH身份验证过程的可选部分。现在,通过SSH使用Eclipse创建了一个远程项目。

最简单的方法是在Linux Box上运行Eclipse CDT,并使用X11-Forwarding或VNC等远程桌面软件。

当然,这只有在Linux机器上有Eclipse并且到机器的网络连接足够快的情况下才有可能。

这样做的好处是,由于所有东西都是本地的,所以不会出现同步问题,也不会出现任何尴尬的跨平台问题。

如果您的机器上没有eclipse,您可以考虑通过SMB(或SSHFS)共享您的linux工作目录,并从您的windows计算机访问它,但这将需要相当多的设置。

两者都比拥有两个副本要好,特别是当它是跨平台的时候。

两年前我也遇到过同样的问题,我用下面的方法解决了它:

1)我用makefiles构建我的项目,而不是由eclipse管理 2)我使用SAMBA连接在Eclipse中编辑文件 3)项目建设: Eclipse使用一个打开SSH连接的makefile调用“本地”make 到Linux主机。在SSH命令行上,可以指定参数 在Linux主机上执行。我使用make .sh shell脚本作为该参数 在Linux主机上调用“真正的”make。 你也可以通过参数给出不同的建造目标 本地生成文件——> make .sh——> Linux主机上生成文件

我自己也在同样的地方(或者曾经是),我最终签出了Linux主机上的samba共享,并在Windows机器上使用notepad++在本地编辑共享,然后我通过PuTTY在Linux盒子上编译。(我们不允许在Linux主机上更新10个y/o版本的编辑器,它没有Java,所以我放弃了X11转发)

现在…我在Windows主机上的VM中运行现代Linux,将我想要的所有工具(例如CDT)添加到VM中,然后在与RTE非常相似的chroot jail中签出和构建。

这是一个笨拙的解决方案,但我想我应该把它加入到混合中。

我的解决方案与SAMBA类似,只是使用了sshfs。用sshfs挂载远程服务器,在远程机器上打开makefile项目。从那里开始。

似乎我也可以用这种方式运行mercurial的GUI前端。

构建远程代码非常简单:ssh address remote_make_command

我正在寻找一种合适的方法来调试。可能通过gdbserver?

在这种情况下,你可以使用ptp eclipse https://eclipse.org/ptp/来浏览和构建源代码。

您可以使用这个插件来调试应用程序

http://marketplace.eclipse.org/content/direct-remote-c-debugging

我尝试了ssh -X,但它是难以忍受的慢。

我也尝试了RSE,但它甚至不支持用Makefile构建项目(我被告知,自从我发布了我的答案后,情况已经发生了变化,但我还没有尝试过)

我读到NX的转发速度比X11快,但我不能让它工作。

最后,我发现我的服务器支持X2Go(如果你的服务器不支持,链接有安装说明)。现在我只需要:

  • 在服务器上下载并解包Eclipse,
  • 在我的本地机器上安装X2Go (Ubuntu上的sudo apt-get install x2goclient),
  • 配置连接(主机,ssh密钥自动登录,选择运行Eclipse)。

一切就像我在一台本地机器上工作一样,包括构建、调试和代码索引。而且没有明显的滞后。

如何在Eclipse 在本地中编辑,但使用我编写的基于__abc0的脚本(sync_git_repo_from_pc1_to_pc2.sh)来远程同步和构建

这个答案目前只适用于使用两台Linux电脑[或者也适用于Mac电脑?]——未在Mac上测试](从一个同步到另一个),因为我用bash写了这个同步脚本。不过,它只是git的包装器,所以如果你愿意,可以随意将它转换为跨平台的Python解决方案或其他东西


这并没有直接回答OP的问题,但它是如此接近,我保证它将回答许多其他人的问题谁登陆这个页面(我的包括,实际上,因为我第一个来到这里之前写我自己的解决方案),所以我张贴在这里。

我想:

  1. 然后在轻量级Linux计算机上使用强大的IDE(如Eclipse)开发代码
  2. 在另一台功能更强大的Linux计算机上通过ssh构建代码(从命令行,而不是从Eclipse内部)

让我们称我编写代码的第一台计算机为“pc1”。(个人电脑1),和第二台电脑,我在那里建立代码“pc2”。我需要一个工具来轻松地从PC1同步到PC2。我尝试了rsync,但它对于大型回购来说非常慢,并且需要大量的带宽和数据。

我该怎么做呢?我应该使用什么工作流?如果你也有这个问题,这是我决定的工作流程。我写了一个bash脚本,通过使用git通过远程存储库(如github)自动将更改从PC1推送到PC2,从而自动化这个过程。到目前为止,它工作得很好,我很满意。它比rsync快得多,在我看来更值得信赖,因为每台PC都维护一个功能齐全的git repo,并且使用更少的带宽来进行整个同步,所以它很容易在手机热点上完成,而不使用大量的数据。

设置:

  1. 在PC1上安装脚本(这个解决方案假设~/bin在你的$PATH中):

     git clone https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles.git
    cd eRCaGuy_dotfiles/useful_scripts
    mkdir -p ~/bin
    ln -s "${PWD}/sync_git_repo_from_pc1_to_pc2.sh" ~/bin/sync_git_repo_from_pc1_to_pc2
    cd ..
    cp -i .sync_git_repo ~/.sync_git_repo
    
  2. 现在编辑&;~/.sync_git_repo"文件,并更新其参数以适合您的情况。下面是它包含的参数:

     # The git repo root directory on PC2 where you are syncing your files TO; this dir must *already exist*
    # and you must have *already `git clone`d* a copy of your git repo into it!
    # - Do NOT use variables such as `$HOME`. Be explicit instead. This is because the variable expansion will
    #   happen on the local machine when what we need is the variable expansion from the remote machine. Being
    #   explicit instead just avoids this problem.
    PC2_GIT_REPO_TARGET_DIR="/home/gabriel/dev/eRCaGuy_dotfiles" # explicitly type this out; don't use variables
    
    
    PC2_SSH_USERNAME="my_username" # explicitly type this out; don't use variables
    PC2_SSH_HOST="my_hostname"     # explicitly type this out; don't use variables
    
  3. Git克隆你的回购,你想在PC1和PC2上同步。

  4. 确保您的ssh密钥都设置为能够从PC1和PC2推拉到远程回购。这里有一些有用的链接:

    1. https://help.github.com/en/github/authenticating-to-github/connecting-to-github-with-ssh
    2. https://help.github.com/en/github/authenticating-to-github/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent
  5. 确保您的ssh密钥都设置为ssh从PC1到PC2。

  6. 现在cd到PC1上的git repo中的任意目录,并运行:

     sync_git_repo_from_pc1_to_pc2
    
  7. < p >就是这样!大约30秒后,所有东西都会神奇地从PC1同步到PC2,它会一直打印输出,告诉你它在做什么,在你磁盘上的什么位置,在哪台计算机上。它也很安全,因为它不会覆盖或删除任何未提交的内容。它会先备份它!阅读下面的更多内容,了解它是如何工作的。

下面是这个脚本使用的过程(即:它实际上在做什么)

  1. 来自PC1:检查PC1上是否有任何未提交的更改。如果是,它将它们提交到当前分支上的临时提交。然后强制将它们推到远程SYNC分支。然后它会取消刚刚在本地分支上执行的临时提交,然后通过暂存之前调用脚本时暂存的所有文件,将本地git repo完全恢复到原来的状态。接下来,它rsyncs将脚本的副本传递给PC2,并执行ssh调用告诉PC2运行脚本,并使用一个特殊选项只做PC2的事情。
  2. 以下是PC2所做的:它cds到repo中,并检查是否存在任何当地的未提交的更改。如果是的话,它会创建一个新的备份分支,从当前分支中分离出来(示例名称:my_branch_SYNC_BAK_20200220-0028hrs-15sec <——注意那是YYYYMMDD-HHMMhrs——SSsec),并使用诸如备份pc2上所有未提交的更改(目标pc /构建机器)之类的提交消息向该分支提交任何未提交的更改。现在,它检出SYNC分支,如果它还没有在本地机器上,就从远程存储库中提取它。然后,它获取远程存储库上的最新更改,并执行硬重置以强制本地SYNC存储库与远程SYNC存储库匹配。你可以称之为“硬拉”。但是,这是安全的,因为我们已经在PC2本地备份了任何未提交的更改,所以没有任何损失!
  3. 就是这样!现在,您已经生成了一个从PC1到PC2的完美副本,甚至不需要确保干净的工作目录,因为脚本为您处理了所有的自动提交和其他事情!它速度很快,在大型存储库上运行得非常好。现在,您有了一种简单的机制,可以在一台机器上使用您选择的any IDE,同时在另一台机器上构建或测试,如果需要,可以通过手机的wifi热点轻松地进行,即使存储库有几十gb,而且您的时间和资源有限。

资源:

  1. 整个项目:https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles
  2. 在这个项目的源代码中看到更多的链接和引用。
  3. 如何做一个“硬拉”,正如我所说:Git:我如何强制“Git拉”?覆盖本地文件?

相关:

  1. git仓库在计算机之间同步,当移动?< / >

我解决这个问题的方法是:

windows:

  1. 使用samba从Linux机器导出“workspace”目录。
  2. 在本地窗口中挂载它。
  3. 运行Eclipse,使用挂载的“workspace”目录作为Eclipse工作空间。
  4. 导入您想要的项目并对其进行处理。

Linux:

  1. 使用sshfs挂载“workspace”目录
  2. 运行Eclipse。
  3. 运行Eclipse,使用挂载的“workspace”目录作为Eclipse工作空间。
  4. 导入您想要的项目并对其进行处理。

在这两种情况下,您既可以通过Eclipse构建和运行,也可以通过ssh在远程机器上构建。