【问题标题】:Eclipse Synchronize Workspace OfflineEclipse 离线同步工作区
【发布时间】:2016-01-11 15:08:19
【问题描述】:

我在学校的一个 Java 开发人员团队中工作。让每个人的工作空间与其他人保持同步是一件很痛苦的事情。

“好吧,你为什么不使用 git”这里的问题是:我们没有网络。这个实验室里所有的电脑都离线了,导师对安全性非常关注,他厌倦了孩子们破坏他的机器,所以他把它们都离线了。即使对于这个项目,说服他让机器联网也是没有用的。他太紧张是没有意义的。

到目前为止,我的小组已经通过记录我们所做的每一个更改、我们创建的每一个类等来“完成”。然后我们将所有工作区转移到一台 PC 上,让一些不幸的人不得不手动进行更改。随着程序变得越来越复杂,更改变得越来越难,我们的方法将变得毫无意义,甚至更加痛苦和乏味。

我确实有使用 git 的经验,并且 eclipse 有这个惊人的同步工作区工具,但我不知道如何让它工作,比如 USB 上包含的工作区。

另一个想法;一个简单的 ad-hoc 网络。假设我们组中有两台 PC,只需用一根以太网电缆将它们连接在一起,一台可以充当服务器,一台可以从中访问内容。这似乎不切实际,因为我没有管理员,也没有足够的时间来破解 PC 并获得管理员访问权限。顺便说一句,它的Windows 7。

我希望这就是您需要的所有信息,我很乐意回答有关可能被忽略的问题和信息的任何问题。

编辑:实验室没有网络基础设施,我没有网络或网络基础设施。

【问题讨论】:

  • 计算机是否相互连接,但从互联网脱机,或者它们甚至没有相互连接?在第一种情况下,您可能仍然可以使用 git(使用自己作为“远程”);在后一种情况下,可能是您传递并与之同步的 USB 设备上的 git-repo?
  • 我确实问过老师!他给了我最慢的方法:使用一台电脑并绕过键盘。鉴于项目的规模;您可能会因为像井字游戏但国际象棋这样的事情而侥幸逃脱?可能不是。并且计算机没有互连,所有机器的网络基础设施都被移除了。嗯,USB 上的 git repo 听起来很合理。但是我将如何同步更改?有 2 个 USB 和 2 个存储库,如何同步它们?
  • 我不完全确定如何使用 git 执行此操作(因此是评论,而不是答案),但您可以在自己的计算机上将另一个 repo 设置为远程。您应该能够对 USB 驱动器上的 repo 执行相同的操作。你们每个人的 PC 上都有一个 git repo,USB 驱动器上还有一个。您每天左右绕过驱动器一次,每个人都从该驱动器拉出并推入该驱动器(您可能需要两次迭代,直到每个人都同步)
  • 这可以工作,理想情况下这就是 id 想要做的。然而,这样做似乎需要一些手续。

标签: git version-control offline collaboration


【解决方案1】:

将您的 Git 存储库放在 U 盘上,并让每个人都提交/合并/重新定位到其中。只需配置将存储在那里并定期与摇杆同步的新“遥控器”。那应该可以正常工作。比构建 ad-hoc 网络更容易。

更新

例如,假设您想在某个 U 盘上共享和同步该存储库(来自 Git repositories 视图):

在棒上创建一个新的裸仓库:

S:\> git --bare init myProject

将您的仓库添加为远程:

S:\myProject> git remote add myRepo M:\sources\learnyounode

从中获取所有数据,包括分支(因此 *):(更新我刚刚意识到您将希望在第一次获取时使用不同的规范,而不是 *:* 使用 '+refs/heads/*:refs/heads/*'

S:\myProject> git fetch myRepo '+refs/heads/*:refs/heads/*'

存储库将准备就绪。现在在您的每台机器上,为您的每个存储库做(在您的 repo 文件夹中):

M:\sources\learnyounode> git remote add mainRepo S:/myProject

在 Eclipse 中刷新 Git repositories 视图以查看:

您也可以使用 Eclipse 而不是命令行 Git 来完成所有这些操作,但它会是非常重的屏幕截图描述。

【讨论】:

  • 我已经做到了。它运作良好。只要确保棒上的 Git 存储库是“裸露的”。
  • 它不必是裸露的。在 Git 中,您无法更新已签出的分支,因此使用非裸仓库您可以通过签出特定提交轻松“分离头”。这将让你提交到 repo。
  • 这听起来会奏效!谢谢你。我将如何在 Eclipse 中创建它?主要是如何确保 git repo 棒是裸露的?
  • 它不一定是裸露的,尽管你很可能想要一个裸露的仓库。用git --bare init 在棒上初始化一个新的repo,然后add remote 指向你自己的repo,fetch 指向它,你应该没问题。为了使所有同事的工作流程相同,请在存储库中定义指向 USB 记忆棒上的存储库的新远程(你们每个人都可以有不同的路径来容纳驱动器号)。您将能够使用基本的 Git 工作流程与这个新的遥控器同步。
  • 正如我在问题中提到的,计算机是 Windows 7,我不能使用 git 命令。我没有管理员权限,也无法将 git 添加到机器上。我唯一的 git 选项是 eclipse。那么我可以通过 Eclipse 创建一个裸存储库吗?
【解决方案2】:

您可以使用 Git,并使用“捆绑包”在团队成员之间传递提交。这相当于您记录更改并手动合并它们的方法,但不那么繁琐且不易出错。

This article 描述了如何创建和合并包。

【讨论】:

  • 有趣。那也可以。但是eclipse有能力做到这一点吗?
【解决方案3】:

即使您的计算机不在网络上,您仍然可以使用 Git 进行代码合并。你的基本设置应该是这样的:

  1. 在其中一台计算机上初始化 Git 存储库。这将是您的“远程”,一个真正的真相来源,
  2. 使用您的某个工作区中的代码进行“初始提交”
  3. 通过用他们的工作区代码覆盖 git repo 代码逐渐添加您同事的更改。通过这种方式,您可以从“git diff”功能中受益,该功能使您可以轻松地进行代码合并。事实上,在典型的分布式 Git 存储库场景中,您可以疯狂地进行分支、合并和其他任何您可以做的事情。唯一的区别是这一切都发生在一台计算机上,使用 U 盘从其他人那里复制代码。

【讨论】:

  • 所以我会复制其他人的工作空间,在 Eclipse 中打开它并将其同步到 git 存储库?另外,我将如何同时打开两个空间?我是否必须更改到其他人的工作区然后提交?
  • 实际上,我的想法是使用命令行 git 进行所有合并,而不使用 Eclipse 插件。我会严格使用 Eclipse 进行代码编辑。
【解决方案4】:

如果您的计算机不在网络中,则无法使用(非分布式)版本控制软件(例如 CVS、Subversion)。

如果您的计算机位于网络中无法访问互联网,您可以运行版本控制引擎网络计算机中的软件并同步你的代码使用它。


拥有一台服务器用于版本控制系统(也是标准的,不仅是分布式的),另一种可能性是手动同步代码,如下所示:

  • 为服务器中的每个用户创建一个工作目录
  • 从用户1的PC复制代码到服务器上用户1的目录
  • 在用户 1 的服务器目录上同步
  • 对所有其他用户执行相同操作

版本控制系统应该易于使用。如果您需要从 USB 卡复制数据以同步您的代码,这并不容易。

因此,我建议将您的代码分成几部分,并将每一部分分配给特定的人。使用定义明确的接口,这样所有接口都可以在没有其他代码的最新版本的情况下工作。

【讨论】:

  • 我认为使用 GIT 作为分布式版本控制系统是可能的。与任何其他非分布式版本控制系统都没有。
  • 我在答案中添加了该详细信息。
  • 有趣的想法。但是计算机不在网络中。我会更新这个问题,但所有的网络基础设施都被删除了。如果有的话,我们需要一种在 2 个 USB 之间同步 2 个工作空间的方法。
  • "如果您的计算机不在网络中,则无法使用版本控制软件。" - 这是非常不正确的。没有什么可以阻止您在未连接到网络的计算机上使用 Git。是的,您将无法推动和拉动他人。但这并不意味着您无法在本地跟踪您的更改。
  • @Alin Git 是一个分布式版本控制系统。这意味着您可以拥有版本的本地副本。它不适用于非分布式版本控制系统。我已经更新了答案(在您发表评论之前)以解释这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-25
  • 2019-12-26
  • 1970-01-01
  • 2019-07-13
  • 1970-01-01
相关资源
最近更新 更多