2012-01-11 118 views
1

在虚拟机和中央SVN存储库之间管理代码的最佳方式是什么?在笔记本电脑和台式机上的ubuntu虚拟机中编码

更具体地说,我有一个Linux VM环境的台式机,以及一台带有VM环境的笔记本电脑。两者都在VMWare工作站下运行。我总是在台式机和笔记本电脑之间来回切换,但无法使桌面和笔记本电脑保持同步。

最明显 - 但可能效率最低的选择是在切换机器之前完成所有操作。但是,这会导致提交部分完成的代码,这样我就可以在不同的机器上工作。

我曾考虑过使用像rsync这样的东西来保持我的两个开发环境同步。我认为这会更好,因为那时我仍然可以在需要时对svn进行更改,同时保持桌面和笔记本电脑的同步。

所以,虽然我很想走rsync路线,但我仍然担心我必须主动同步。就我而言,我想象的是我正在桌面上工作的场景,然后离开去咖啡店与我的笔记本电脑一起工作,只是意识到在离开家之前我没有同步( DOH!)。

我不知道是否真的有办法解决这个问题。也许我可以rsync一切到一直在线的中央服务器?并设置cron作业来运行每隔几分钟或任何与我的各种开发环境同步?

有更好的选择吗?

回答

0

您可以考虑使用分布式版本控制。如果你没有能力改变中央服务器,那么还有像git-svn这样的包装器,它允许你在与Subversion服务器交互的同时在你的末端使用git。

在DVCS设置工作流程:

  1. 使机器#1的变化,本地提交,重复。
  2. 在切换时,在本地提交。
  3. 从机器#1将机器#1更改为机器#2
  4. 继续在机器#2上工作。
  5. 在切换时,在本地提交。从机#2
  6. 拉或推变更机器#1
  7. 重复

当它的时候实际发送到服务器中,你在哪个电脑应该有最新的代码,你可以推直到主服务器(SVN或其他)。

这确实会让您提交中间更改 - 但我发现使用DVCS而不是负担的好处更多。

此替代方案可能是将整个开发目录保存在Dropbox文件夹或一些等效文件夹中。那么你不必自己处理rsync或任何东西,但是你对同步的控制很少。

+0

这是一个合理的方法。但是,我结束了使用rsync的路线。首先,在对此提出一些建议后,我尝试与inotify协调一致。然而,这是一个挑战,因为统一映射了一切,包括.svn文件。因为元数据文件和其他所有的东西都被复制,所以我不断地以破坏性的svn链接结束。我想,如果我会花更多时间在上面,我可能已经开始工作了,但它看起来仍然有点麻烦,最后我决定把它抛弃。 – dustin999 2012-02-01 03:09:21

+0

因此,我去了rsync路线。这个解决方案比我最初想象的要少一点优雅,但我觉得我对于正在发生的事情有更多的控制权,并且不太担心由于控制而出现的可怕错误。 – dustin999 2012-02-01 03:10:22

0

syncd可能是你正在寻找的:https://github.com/drunomics/syncd。它使用inotify和rsync来侦听文件系统更改rsync已更改的文件到远程服务器。

虽然这是一种单向同步,所以当您停止在一台机器上工作并在另一台机器上启动时,您将不得不停止它。你还需要在两台机器上运行ssh服务器。