版本控制:如何与自己协作

7
在业余时间编程时,我有一台台式机和一台笔记本电脑(都是Mac,不过我觉得这并不影响问题)。我在两台电脑上都安装了VMware,并运行Linux镜像来执行我的代码。它们是相同的镜像,因此我在两个地方都拥有相同的环境。
关键在于,即使我不与其他人协调,我也喜欢对所有编码使用版本控制。我希望在使用任何系统时都能看到最新版本的代码。
我不想依赖于始终具有网络访问权 - 我可能在没有Wi-Fi的地方进行编码(是的,这很少见,但有些地方仍然处于石器时代)。我正在考虑使用git,但如果我在本地有仓库可用,SVN之类的工具也可以。或者笔记本电脑成为SVN服务器,桌面访问它。
有人做过这样的事情吗?是否有任何陷阱/问题/教训?
8个回答

7
我强烈推荐使用Git,如果您不能始终拥有网络访问的话。
但是,如果您仍然需要使用Subversion存储库,您可以通过使用git-svn来同时获得最佳效果。

Git-svn或者一个类似于GitHub的离线git仓库,你可以将代码推送到这里。你可能需要在电脑以外的地方备份一份。 - Darcy Casselman
我不同意使用git-svn时可以获得最好的git体验。当然,相比于不使用git而直接使用svn,使用git-svn要好得多。 - Dustin

7

嗯,我强烈建议您考虑使用分布式系统而不是Subversion。这将满足您不依赖网络访问的要求,并且可能更适合您的工作流程。分布式版本控制系统的主要选择包括gitMercurial(也称为“hg”)和Bazaar(或“bzr”)。我个人更喜欢Mercurial,但它们都差不多。

然而,Mercurial在其他版本控制系统中有一个优点(这对您的情况非常有帮助),那就是“hg serve”命令。您可以在此处阅读有关它的信息:使用“hg serve”进行非正式共享。基本上,它设置了一个非常简单(临时)的服务器,允许通过网络拉取您的存储库。我经常使用它来保持桌面电脑和笔记本电脑之间的代码同步。如果我在笔记本电脑上进行了一些更改,我只需在那里运行“hg serve”,然后从桌面电脑上运行“hg pull”,或者反过来,如果我在桌面电脑上工作。

因此,总体而言,我绝对建议研究分布式系统,我认为它们将最好地设置您想要的环境。网络上有大量关于使用它们的信息。我没有花太多时间研究其他系统,但如果您想尝试Mercurial,这本免费在线书籍涵盖了您需要开始的几乎所有内容


听起来你是唯一一个以某种方式真正做到了这一点的人。我对完全分布式的担忧在于,我将不得不在计算机之间来回合并,这会导致我忘记合并事物。有什么神奇的解决方法吗? - edebill
任何版本控制系统都需要您记得提交/更新,因此没有什么可以消除这一点。在所有分布式版本控制系统中合并非常好,因此您不应该将其视为困难的任务。 - Chad Birch
除非你在不同的机器上以不同的方式更改了相同的代码(而且你的记忆力可能比那好),否则就不应该出现任何合并冲突,一切都将自动合并在一起,无需任何交互。 - Chad Birch
1
值得一提的是,Bazaar也有一个bzr serve命令,并且可以通过FTP、HTTP和其他一些协议进行同步。 - PhiLho

2

无论你做什么,一定要确保你的代码库经常备份。如果你的笔记本电脑存储着代码库,那尤其需要注意。你还需要考虑如果你的笔记本电脑被盗了会发生什么。在这种情况下,使用git并将代码库留在台式机上可能更好。


我一定会做些事情来确保它在离线的地方备份。也许是设置一个cron job频繁地将它同步到我的iDisk上,或者定期将repo复制到已备份的桌面上。 - edebill
这就是Mercurial的美妙之处...每台计算机都有一个存储库的“克隆”。 - Pete

1

作为 Git 的替代方案,我强烈推荐 Bazaar。它是一个分布式版本控制系统,就像 Git 一样,但也有一些不同之处。

如果您想进行(有点偏见的)比较,请查看this page


我同意这个观点。Bazaar比git更符合我的可用性口味,但我认为它们的效果几乎相同。 - Darcy Casselman
@Darcy,同意。不过有一个显著的区别,就是在支持Windows方面所付出的努力(虽然这似乎与OP无关)。 - Simon B. Jensen
不行,这跟我的需求无关。我需要支持 MacOS 和 Linux。听起来我应该去调查一下 Mercurial 和 Bazaar(我已经试过 Git 了)。 - edebill

1

如果你追求简单(设置),SVN就可以了。它可以在没有网络连接的情况下工作,因为你的整个历史记录都保存在每个同步的电脑上,而且SVN+SSH的设置非常简单。它使用SSH的内置功能来运行程序,所以如果你已经设置好了SSH服务器,你只需要创建一个仓库,一切都能正常工作,无需任何服务器设置。

这也可以作为你的备份,因为你的整个仓库都保存在你与之同步的每台电脑上。

分布式版本控制系统也很有趣,但我认为前期投入更高,但它的优点是你可以在没有连接的情况下保存到你的仓库(如果你独自工作,这并不太重要,但随时进行检查点和回滚可能会有优势)。


那种简单性就是为什么在笔记本电脑上运行 SVN 存储库似乎很诱人的一部分。由于我总是要么本地工作,要么保证有笔记本电脑可用,所以永远不会出现访问存储库的问题。只有一个存储库,我就不必与自己合并了。 - edebill
试试SVK吧,我听说它应该和Git一样简单,但是始终有一个本地仓库。虽然我没有亲身经历过。 - Bill K

0

当你没有访问存储库的权限时,使用SVN会变得非常棘手。由于我在一台计算机上进行所有开发工作,因此我已经很好地使用了SVN,但您可能不会觉得那么容易。据我所知,这正是git旨在解决的问题-它允许您进行在本地副本中注册的提交,然后在获得访问权限时将它们全部上传到存储库。


0

或者只需选择一个提供SVN功能的常规Web主机。 - Kibbee
不幸的是,如果我在没有即时网络访问的地方工作,这将无法运行。 - edebill

0

我最喜欢的版本控制系统是darcs,因为它支持补丁挑选。它是一种分布式版本控制系统,非常容易使用。


Git和Mercurial也对cherry-picking有非常好的支持。 :) - Dustin
但据我所知,使用Git和Hg不可能实现:repo A包含补丁1、2、3和4;repo B包含补丁1、5、6;repo C什么也没有。使用Darcs,我现在可以从A中拉取补丁1、2、4和B中的6,因此C现在包含1、2、4和6,而A和B保持不变。 - Johannes Weiss
啊,还有一个重要的补充:我以后可以撤销任何补丁,现在只能撤销最后一个!Darcs 中没有版本。 - Johannes Weiss

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接