使用TortoiseSVN进入第一阶段

3

好的,在之前的帖子中我已经被说服SVN是前进的道路,但我还没有看到灵光一闪。 我不确定如何为我的开发环境设置SubVersion。

这是我目前的设置。 我不想对它进行任何更改,如果subversion可以与它并存,那将会非常好:

工作:

N:\Projects
N:\Projects\Lib
N:\Projects\App1
N:\Projects\App1\Help
N:\Projects\App1\Images
N:\Projects\App2
..等等

N:在楼里的一个独立服务器上。

有几台安装了工具的其他开发机器,但所有开发都是引用服务器上的文件进行的 - 即源代码不保存在工作站上。

家庭

笔记本电脑与相同的开发工具集,以及c:\Projects\App1等处的源代码,即与工作中n:\Projects上的设置镜像。

N:\Projects和C:\Project之间的源代码当前正在使用自定义应用程序和DropBox保持对齐。 文件排除确保不会同步非源代码文件。

我想在此设置中运行SubVersion。

  • 我应该把Repository放在哪里?
  • 假设我可以在相互访问的地方拥有存储库,那么SVN是否会消除当前在工作和家之间同步的需要?

1
如果你似乎非常喜欢使用独立的存储库,那么请考虑Git或Mercurial。Subversion是一种集中式版本控制系统,如Greg H所说,您可以将网络文件夹替换为Subversion服务器,而服务器是权威源,而不是网络文件夹。要从工作地点同步到家庭,您最好使用Mercurial而不是Subversion。 - Warren P
1
我要补充的是,由于您尚未承诺使用任何版本控制系统,因此请好好研究GIT和Mercurial两者。当然,一旦您处理了所有这些新技术,您可能会感到头晕目眩,但务必做出明智的决定。例如,我曾经使用SVN,并转向使用Mercurial。SVN也不错,但我更喜欢Mercurial的合并哲学。 - Cosmin Prund
1
只要你可以在家里访问工作,你也可以轻松地(即VPN)使用SVN,使用VCS或DVCS没有区别。如果你需要离线工作,那么DVCS更好。 - user160694
1
我唯一有经验的分布式版本控制系统是Mercurial。我选择它是因为它的“合并”行为非常好,可以了解一下它的“变更集”概念。而且作为一个分布式版本控制系统,我现在在多台机器上都有我所有仓库的完整备份,包括我家里的台式机和笔记本电脑。这也很不错! - Cosmin Prund
Mercurial非常棒。它是我最喜欢的版本控制工具。我真的很讨厌Subversion中合并的工作方式,也讨厌它的分支就像文件夹一样的设计,以及缺乏真正的标签功能。 - Warren P
@gabr,这些年我一直拼错了“tortoise”这个单词... - rossmcm
5个回答

8
为了使用Subversion,您需要将共享源代码目录替换为位于服务器上的Subversion仓库。每个开发工作站都会在本地检出整个源代码副本(但是,如果您愿意,这可以是网络服务器上的私有区域)。
您可以将N:\Projects树保留为每日构建的只读副本或其他内容。但是,Subversion的一个目标是调解大约同时编辑同一文件的两个人之间的冲突。这与包含可写源代码的共享目录不兼容。此外,以某种方式“共享”同一Subversion工作目录的多个开发人员注定会失败。

4

为什么不创建一个可访问互联网的(免费)试用Subversion帐户,并进行一些尝试,以便在将整个源代码树移入其中之前熟悉它。这样就不会意外删除您拥有的所有内容。也许从一个虚拟项目开始。将某些东西托管到互联网上。甚至不用花一分钱,您可以使用这个网站:

http://www.projectlocker.com/

然后你可以设置自己的起始subversion服务器。你可以创建一个全新的Delphi应用程序(文件->新建Delphi应用程序),添加一个按钮,双击该按钮,编写一个消息框或其他你喜欢在演示应用程序中做的事情。现在创建一个subversion存储库(也许他们称之为项目,在项目储物柜上),并将保存此项目的文件夹添加到该存储库中。
现在你可以使用(a) Tortoise SVN,(b) 如果你有Rad Studio XE,则内置SVN集成构建,以及(c) JCL中提供的版本控制插件,如果你没有Rad Studio XE。
另外,我建议如果你想知道你在做什么,你可以学习如何从命令行添加、提交和更新。这真的不难。以后它会产生回报。
了解到你可以键入svn co http://reposite.something.com/svn/myproject来将项目检出到您的磁盘上,非常方便。有时候,我认为GUI是大脑的训练轮。如果您不学习命令行,就会使自己残废。
像我上面展示的托管子版本服务的好处是,您有一个离线备份。当然,如果您正在编写开源软件,即使是大型项目,这样的托管始终是免费的。然后您可以在sourceforge上托管。否则,您需要(a)使用自己的互联网可访问主机或(b)支付托管费用,否则您将无法轻松地在家和工作中访问存储库。
就个人而言,如果这是我的企业或我的专业工作是编写软件,我会托管自己的子版本服务器,并且它将是私有的(LAN),我会使用VPN从家里访问它。

1
+1,拥有一个账户进行游戏非常有帮助。记得当我入门时,我进行了各种测试:将代码检出到多个文件夹中,对同一文件进行有意的更改并在多个副本上进行操作,尝试合并。 - Cosmin Prund

3

1: 你肯定希望有一个可以从两个位置访问的代码库。否则,你需要使用分布式版本控制系统,如Mercurial或Git。

2: 是的,你将不再需要使用自定义同步应用程序。这正是版本控制系统的工作。除了使用SVN之外手动同步是不必要的,甚至会导致很多冲突。


那么我该如何创建一个可以在工作和家中都能访问的代码库呢?我需要找到一个SVN服务器并安装它吗?它是否可以通过网络工作,以便家庭机器可以访问相同的代码库? - rossmcm
你必须安装一个Subversion服务器才能使用Subversion。仅有客户端对你来说并没有太大的帮助。没有服务器的Subversion客户端就像没有任何Web服务器的Web浏览器一样,它无法为你做任何事情。 - Warren P
1
@Warren P:并不完全正确。实际上,你可以让Subversion将更改与本地硬盘甚至是局域网中的共享磁盘同步。但我同意这不是一个可行的解决方案。 - Adrian Grigore

1
  1. 你的共享目录应该被删除,并且每台机器上都应该有SVN仓库的工作副本代码的副本。
  2. 使用拥有文件的服务器将SVN服务器放置在其中,或者任何所有人包括你的家用电脑都可以访问的服务器上。
  3. 每天多次提交/更新,并在需要时管理合并。

对于家庭访问,最简单的方法是在互联网上获取专用服务器或重定向路由器上的正确端口(但您显然需要一些访问控制),以便从外部访问您的存储库。如果需要,您可以通过良好的路由器限制来自您家庭IP或IP列表的访问。

其他解决方案是另一种称为“分布式”的版本系统,其中每个提交都在您自己的PC上的本地存储库中完成,并将此存储库合并到“主”存储库中以共享代码,并将团队其他成员的更改拉回到您的本地存储库中(在DVCS上您不需要任何“主”存储库,但对于公司而言,这就是您所拥有的)。

查看Git或Mercurial以获取良好的DVCS(Git语法很糟糕,但它是最广泛使用的系统,也是技术上最好的系统)。


嗨,@VirtualBlackFox。请看一下我对Adrian的问题。 - rossmcm
在我的回答中添加了一些细节。 - Julien Roncaglia

1
  1. 将代码库放在最安全的地方。通常意味着一个良好的冗余服务器(磁盘等),在受控的服务器房间里,并且有适当的备份。当您切换到版本控制系统时,要处理的源代码通常位于本地机器沙盒中,因为每个开发人员都必须拥有自己的沙盒。然后更改会被获取并发送到/从服务器。请注意,某些工具可能会在远程目录上出现问题,因为例如SMB协议的工作方式 - 如果需要使用它们,请检查它们是否得到明确支持。除非您有至关重要的安全需求,否则在本地沙盒中工作会更快,更容易。
  2. 如果您可以从家中访问SVN服务器(即通过VPN),那么与从办公室工作没有什么不同。您将以相同的方式“同步”(更新/提交)您的笔记本电脑沙盒,您不需要本地服务器和代码库。如果您需要本地服务器(原因可能是您无法从外部访问中央代码库,需要离线工作但版本文件,等等),则可能有方法在SVN服务器之间进行复制,但此时分布式版本控制系统应该在这种情况下更有效。

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