通过SSH使用Eclipse处理远程项目

c86crjj0  于 2023-01-20  发布在  Eclipse
关注(0)|答案(9)|浏览(116)

我有以下几个箱子:
a)带有Eclipse CDT的Windows盒,
B)一个Linux盒子,我只能通过SSH访问。
编译器和构建和运行我的项目所需的硬件都只在机器B上。
我希望使用EclipseCDT从Windows框中“透明地”处理该项目,并且能够从IDE中远程构建、运行和调试该项目。
我该如何设置:

  • 构建会成功吗?还有比写一个本地makefile更简单的解决方案吗?本地makefile将rsync项目,然后调用一个远程makefile来启动实际的构建?Eclipse托管构建有这样的特性吗?
  • 调试会成功吗?
  • 最好是-Eclipse CDT代码索引将工作?我必须复制所有需要的头文件从机器B到机器A,并添加到手动包含路径?
kmbjn2e3

kmbjn2e31#

试试Remote System Explorer(RSE),它是一组插件,可以完全按照您的要求完成任务。
RSE可能已包含在当前Eclipse安装中。要签入Eclipse靛蓝,请转到窗口打开透视图其他...,然后从 * 打开透视图 * 对话框中选择远程系统资源管理器以打开RSE透视图。
要在Eclipse中从RSE透视图创建SSH远程项目:
1.定义一个新连接,然后从“新建连接”对话框的“选择远程系统类型”屏幕中选择“仅SSH”。
1.输入连接信息,然后选择“完成”。
1.连接到新主机。(假设已设置SSH密钥。)
1.连接后,深入到主机的 *Sftp文件 *,选择一个文件夹,然后从项目的上下文菜单中选择创建远程项目。(等待远程项目创建。)
如果操作正确,现在应该有一个新的远程项目可以从Project Explorer和eclipse中的其他透视图访问。正确设置SSH连接后,密码可以成为常规SSH身份验证过程的可选部分。现在创建了一个通过SSH使用Eclipse的远程项目。

92dk7w1h

92dk7w1h2#

最简单的方法是在LinuxBox上运行EclipseCDT,并使用X11-Forwarding或远程桌面软件(如VNC)。
当然,只有当Eclipse存在于Linux机器上并且与机器的网络连接足够快时,这才有可能。
其优点是,由于所有内容都是本地的,因此不会出现同步问题,也不会出现任何棘手的跨平台问题。
如果您的机器上没有eclipse,您可以考虑通过SMB(或SSHFS)共享Linux工作目录,并从Windows机器访问它,但这将需要相当多的设置。
两者都要比有两个副本好,尤其是跨平台的时候。

bfrts1fy

bfrts1fy3#

我自己也遇到过同样的情况(或者曾经遇到过),FWIW我最终 checkout 了Linux主机上的一个桑巴舞共享,并在Windows机器上用记事本++本地编辑了该共享,然后我通过PuTTY在Linux机器上进行了编译。(我们不允许更新Linux主机上的编辑器的10个y/o版本,而且它没有Java,所以我放弃了X11转发)
现在...我在Windows主机上的VM中运行现代Linux,向VM添加我想要的所有工具(例如CDT),然后 checkout 并构建一个与RTE非常相似的chroot监狱。
这是一个笨拙的解决方案,但我想我会把它扔在混合。

xytpbqjk

xytpbqjk4#

除了使用sshfs之外,我的解决方案类似于桑巴舞的解决方案。用sshfs挂载我的远程服务器,在远程机器上打开我的makefile项目。从那里开始。
看起来我也可以用这种方式运行Mercurial的GUI前端。
构建远程代码非常简单:ssh地址远程生成命令
我正在寻找一个体面的方式来调试虽然。可能通过gdbserver?

dpiehjr4

dpiehjr45#

我试过ssh -X,但是它慢得让人无法忍受。
我也尝试过RSE,但它甚至不支持使用Makefile(I'm being told that this has changed since I posted my answer,但我还没有尝试过)构建项目
我读到NX比X11转发速度快,但我无法让它工作。
最后,我发现我的服务器支持X2Go(如果你的服务器不支持,链接中有安装说明)。现在我只需要:

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

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

jckbn6z7

jckbn6z76#

我有同样的问题2年前,我解决了它在以下方式:
1)我使用makefile构建项目,而不是由Eclipse管理2)我使用桑巴舞连接来编辑Eclipse中的文件3)构建项目:Eclipse使用makefile调用“本地”make,该makefile打开到Linux主机的SSH连接。在SSH命令行上,您可以给予在Linux主机上执行的参数。我使用makeit.shshell脚本来调用该参数,该脚本调用Linux主机上的“真实的”make。您还可以通过本地makefile --〉makeit.sh --〉中的参数提供不同的构建目标Linux主机上的生成文件。

1yjd4xko

1yjd4xko7#

我解决这个问题的方法是:
对于窗口:
1.使用samba从Linux机器导出"workspace"目录。
1.在windows中本地挂载。
1.运行Eclipse,使用装载的'workspace'目录作为Eclipse工作区。
1.导入所需的项目并处理它。
对于Linux:
1.使用sshfs装载"workspace"目录
1.运行Eclipse。
1.运行Eclipse,使用装载的'workspace'目录作为Eclipse工作区。
1.导入所需的项目并处理它。
在这两种情况下,您都可以通过Eclipse构建和运行,或者通过ssh在远程机器上构建。

yiytaume

yiytaume8#

对于这种情况,您可以使用ptp eclipse https://eclipse.org/ptp/来浏览和构建源代码。
您可以使用此插件调试应用程序
http://marketplace.eclipse.org/content/direct-remote-c-debugging

k5ifujac

k5ifujac9#

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

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

我想:

1.在轻量级Linux计算机上使用Eclipse等功能强大的IDE开发代码,然后
1.在另一台更强大的Linux计算机上通过ssh构建代码(从命令行,而不是从Eclipse内部)
让我们把我编写代码的第一台计算机称为“PC 1”(个人计算机1),把我构建代码的第二台计算机称为“PC 2”。我需要一个工具来轻松地从PC 1同步到PC 2。我尝试了rsync,但对于大型repos来说,它非常慢,而且占用了大量的带宽和数据。
那么,我该怎么做呢?我应该使用什么工作流呢?如果你也有这个问题,这是我决定使用的工作流。我编写了一个bash脚本来自动化这个过程,使用git通过远程存储库(如github)自动将更改从PC 1推送到PC 2。到目前为止,它运行得非常好,我对它非常满意。它比rsync快得多。在我看来更值得信赖,因为每台PC都维护了一个功能强大的git repo,并且使用更少的带宽来完成整个同步,所以在手机热点上很容易做到,而不需要使用大量的数据。

设置:

1.在PC 1上安装脚本(此解决方案假定$PATH中包含~/bin):

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

1.现在编辑你刚才复制的“~/.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
  1. Git克隆你想在PC 1和PC 2上同步的存储库。
    1.确保ssh密钥已设置为能够从PC 1和PC 2推送和拉入远程存储库。以下是一些有用的链接:
  2. https://help.github.com/en/github/authenticating-to-github/connecting-to-github-with-ssh
  3. https://help.github.com/en/github/authenticating-to-github/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent
    1.确保ssh密钥已全部设置为从PC 1到PC 2的ssh。
    1.现在把cd放到PC 1上git repo的任意目录下,然后运行:
sync_git_repo_from_pc1_to_pc2

1.就是这样!大约30秒后,所有的东西都会神奇地从PC 1同步到PC 2,而且它会一直打印输出,告诉你它在做什么,在你的磁盘上做什么,在哪台计算机上做什么。它也很安全,因为它不会覆盖或删除任何未提交的东西。它会先备份它!阅读下面的详细信息了解它是如何工作的。

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

1.从PC 1:它检查PC 1上是否有未提交的修改,如果有,就提交到当前分支的临时提交中,然后强制推送到远程SYNC分支,最后取消在本地分支上的临时提交。然后,它会暂存你调用脚本时暂存过的文件,从而将本地git repo恢复到原来的样子。接下来,它rsync将脚本的副本复制到PC 2,并执行ssh调用,告诉PC 2运行脚本,并使用一个特殊选项仅执行PC 2的操作。
1.以下是PC 2的操作:它cd s到repo中,并检查是否存在任何 local 未提交的更改。如果存在,它将创建一个从当前分支分叉的新备份分支(示例名称:my_branch_SYNC_BAK_20200220-0028hrs-15sec〈--请注意,这是YYYYMMDD-HHMMhrs--SSsec),并使用提交消息(如DO BACKUP OF ALL UNCOMMITTED CHANGES ON PC 2(TARGET PC/BUILD MACHINE))将任何未提交的更改提交到该分支。现在,它 checkout SYNC分支,如果SYNC分支尚未在本地计算机上,则从远程存储库中将其拉出。然后,它获取远程存储库中的最新更改。并执行硬重置以强制本地SYNC存储库与远程SYNC存储库匹配。您可以将此称为“硬拉取”。不过,这是安全的,因为我们已经备份了PC 2本地的任何未提交更改,因此没有任何丢失!
1.就是这样!您现在已经生成了一个从PC 1到PC 2的完美副本,甚至不必确保工作目录干净,因为脚本为您处理了所有自动提交和其他工作!它速度快,在大型存储库上运行得非常好。现在您有了一个简单的机制,可以在一台机器上使用您选择的 * 任何 * IDE,同时在另一台机器上轻松地进行构建或测试。如果需要,可通过手机上的WiFi热点进行访问,即使存储库有数十GB,而且您的时间和资源有限。

资源:

1.整个项目:https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles

1.在这个项目的源代码中可以看到更多的链接和参考。
1.如何做一个“硬拉”,正如我所说:如何强制“git pull”覆盖本地文件?

相关:

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

相关问题