SVN:一个工作副本,两个仓库?

19

我想知道如何为我的一个工作副本设置两个仓库。我需要一个仓库在我的服务器上,这样我就可以在两台电脑之间进行签入/签出;我需要另一个仓库在我的本地电脑上,以便我可以快速查看差异结果(我的svn服务器在一个慢速的共享主机上)。

我该怎么做?


这对于开源项目非常有用,当提交一个补丁时,不想等待它被批准就可以构建另一个补丁。 - dbkk
现在大多数项目都使用Git,我所做的是,克隆了一个GIT仓库并进行了Subversion化。我能够更新Git副本并保持其更新,并维护我的更改,尽管冲突较少。想给你一个提示! - asyncwait
可能是Can I have one project in two SVN repositories?的重复问题。 - JasonMArcher
8个回答

11

请看仓库复制

您可以设置定期从一个仓库同步到另一个仓库的cron作业。但您必须确保提交只发生在两个仓库中的一个上。

如果提交将会发生在两个仓库中,可能更适合使用分布式版本控制系统,如GitBazaarMercurial。例如,Git甚至让您直接从和向Subversion仓库拉取和推送。


7
Subversion在执行diff操作时不使用网络访问。这是Subversion相对于CVS的一个巨大优势。因此,我不确定为什么会出现您遇到的特定问题。
另一种选择是在本地PC上使用Git,特别是使用git-svn。您可以得到整个存储库历史记录的完整副本,并能够在本地进行diff和查看历史记录(以及Git提供的许多其他功能)。尽可能地,我现在使用git-svn来访问Subversion存储库。

1
这只是将本地版本与原始工作副本进行比较的本地操作。如果您要将其与早期修订版进行比较,则为远程操作。 - Evan
当然,本地差异比较是你90%的时间所做的事情,但问题并没有明确指定。 - Evan

3
如果您不必使用SVN,建议您使用分布式版本控制系统,例如Mercurial或Git。每台计算机都将拥有其自己的代码库副本,并且更改可以直接在计算机之间同步,也可以通过中央服务器上的另一个副本进行同步。由于每台计算机都将完整的代码库存储在本地,因此您可以在没有网络访问的情况下执行diff或任何其他操作。

1
如果您的本地计算机是Linux,您可以创建一个crontab条目来每隔X分钟更新svn,以使其与服务器保持同步。从那里开始,您将拥有最新的副本在本地svn服务器上进行差异比较。

1

你可以尝试使用svk作为本地客户端,而不是svn。Svk是一种伪分布式版本控制系统,使用svn存储库。

您可以使用svk设置镜像存储库,同步它,您可以随心所欲地进行差异比较,回溯到您喜欢的任何修订版本,并且所有操作都是本地的。

您还可以创建镜像存储库的分支,并将其用作您的检出,然后您的提交也是仅限本地的操作,当您准备好一批提交时,将它们推送到远程svn存储库(并拉取其他用户的更改,类似于svn update命令)。

两个注意事项:

  1. 准备使用命令行。据我所知,没有TortoiseSVK或其他GUI。
  2. 我只在Linux上使用过svk。如果您使用Windows,我不确定客户端的质量如何。

除此之外,我赞成使用其他人建议的bazaar、mercurial或git。Bazaar可能是最容易使用的,并且有一个TortoiseBzr GUI,我的一个同事说它非常稳定。

Git 是最难使用的。它就像是一把瑞士军刀,几乎比它长还宽,里面装满了各种小工具和小玩意儿,还有很多挂在上面的东西,弹簧非常紧,有时候你试图拿出一把刀片时会不小心割伤手指。


1

SVN并不天生适合这种用例。你需要在这里和那里进行一些调整(比如编写cron)。如果你想要一个开箱即用的东西来适应这种用例,请尝试GIT。


0

我不确定标准的仓库复制会给你想要的结果。在那种设置下,一个代理始终是只读的,而我认为在你的情况下并非如此。

在提交之前,您必须执行 svn switch --relocate 来切换要查看的存储库。这有点容易出错。

你需要的是一个写入代理

如果您在本地计算机上使用apache和mod_svn_dav进行设置,您将拥有一个本地存储库,该存储库接收所有更新,并且您可以轻松地对其进行差异比较和检出,但是所有写操作都会返回到实际存储库,其他人正在使用该存储库并获取更新。


0

svn diff 的结果不受您与服务器连接速度的影响,它是完全本地操作。


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