现在已经有一段时间了,我一直在使用Dropbox在几个虚拟机(一个Windows,一个Mac,一个Linux)上同步一个Git存储库。我会在其中一台机器上提交我的更改,而Dropbox会将文件和repo的更改同步到其他机器上。
这非常无缝。我在OSX上编码,在Windows和Linux上测试代码,也许在那里进行一些更改,然后从三个中的一个提交。
然而,它有三个主要缺点:
那么,你如何管理这样的环境?
修改 实际上,所有三个虚拟机都存在于同一台笔记本电脑上,因此它们之间的网络连接不是问题。此外,我经常在一个操作系统上编码并在另一个操作系统上编译 - 然后来回查看所有错误。我不想通过数百次增量提交向公司回购邮件发送垃圾邮件。
编辑2:
为了让您了解我正在寻找的内容,这是我提出的部分解决方案:在每台机器上,我创建了一个我想要使用的文件的git存储库。通常,我将开始处理一台机器的bug /功能,然后提交我的工作。在下一台机器上,我将调用git reset origin
从第一台机器加载更改,然后使用git commit --amend
继续处理提交。这将来回几次。一旦完成,我将最终提交真实的更改(不再修改)并开始处理下一个功能/错误。
但是,这种工作流程既麻烦又不优雅。我正在寻找的是导致相同输出的东西 - 一个在repo上提交 - 但是在三台机器之间流利地创建了。
答案 0 :(得分:2)
您可以考虑设置自己的软件版本控制服务器。
这些服务器的大多数客户端都在不同的操作系统和平台上实现。 但是如果你想在不在局域网中的机器之间进行通信,那么你将需要一个互联网连接。
版本控制服务器网络通信可以通过网关暴露在互联网上。您可以通过设置隧道机制来实现安全性。然后,任何客户端都会隧道连接到网关服务器,然后与版本控制服务器通信。
至于控制哪些文件实际版本化:我有一些SVN的经验,您可以在文件级别选择要添加到版本控制的文件。然后,SVN客户端将简单地忽略其余的文件和目录。
修改:
阅读原作者问题的编辑: 也许设置第四台虚拟机,包含版本控制服务器。 SVN不是(通过任何想象力)难以管理。 (RTM)。让第三个虚拟机连接到服务器。 (这是当然的,如果可以在同一台机器上并行运行机器。)
答案 1 :(得分:0)
如果您可以在三者之间共享磁盘,请将主存储库放在该磁盘上。 (确保备份!特别是对于可移动媒体。)
编辑:更详细地说,您可以将主存储库放在USB记忆棒或硬盘驱动器上的共享分区上(因为您指示在同一硬件上使用多个虚拟机)。
要设置私人git
回购,只需创建一个空目录并运行git init
。
假设您使用的是Ubuntu盒子并且有一个带有文件系统的USB记忆棒,您可以在/media/usbgit
中安装的所有操作系统中进行读写,请运行:
vnix$ mkdir /media/usbgit/mycode
vnix$ cd /media/usbgit/mycode
vnix$ git init
Initialized empty Git repository in /media/usbgit/mycode/.git/
(鉴于你已经有一个git repo,你可能只想把它克隆到USB记忆棒上:
vnix$ cd /media/usbgit
vnix$ git clone /home/you/work/wherever/mycode
Initialized empty Git repository in /media/usbgit/mycode/.git/
现在将包含您从中提取的所有提交。)
现在您有一个空的存储库,您可以在所有框中克隆和提取。一旦安装了USB记忆棒,就可以从中进行克隆。
vnix$ cd
vnix$ mount | fgrep usbgit
/dev/whatever on /media/usbgit type NTFS (rw)
vnix$ git clone /media/usbgit/mycode
Initialized empty Git repository in /home/you/mycode/.git/
warning: You appear to have cloned an empty repository.
所有这些对SVN也是可行的(使用svnadmin create
来初始化存储库,并svn checkout file:///media/usbgit/mycode
来检查它),但是你将失去分布式VCS的好处,这似乎在你的情景。
特别是,对于分布式VCS,您可以拥有多个私有存储库(每个工作目录都是一个存储库),您可以与私有主和公共存储库同步和提取例如在Github上 - 只要确保你知道你在哪里。