如何创建远程svn存储库的本地副本?

时间:2012-01-19 20:44:36

标签: visual-studio svn visualsvn

我有远程svn存储库。我想签出它(带历史记录),然后在Visual Studio中用作常规存储库。过了一会儿,我将从本地存储库提交(提交更改)到远程存储库(如果有的话,还会更新文件)。

所以看起来我只需要两个svn存储库副本,我需要能够同步它们。

怎么做?

4 个答案:

答案 0 :(得分:20)

这违背了SVN的意思。听起来你想要的是像Git或Mercurial这样的DVCS,因此为什么许多开发人员已经转向类似的东西。

我会用git;并使用git-svn网桥与SVN服务器进行通信。

当您从SVN克隆时,Git会保留存储库的完整副本(这意味着初始克隆可能需要 long 时间,因为它需要检出每个修订版本)。然后,您将在本地提交到您的Git存储库;并且dcommit(推送)回SVN存储库。

我不知道有任何干净的方法可以单独使用SVN。典型的工作流程可能是:

git svn clone http://yoursvnserver/svn --username vcsjones

#make some changes
git add -A
#stage your changes. add -A stages all changes;
#you can stage individial files too or use git add -i for interactive adding
git commit -m "My commit messages"

#repeat makes changes and commit as many times as you want
git svn dcommit
#commit all local commits back to the SVN repository.

如果你是一个男人的商店;将您的存储库保存在USB闪存驱动器上(并确保它以某种方式备份,以免丢失它;它变得有问题。)

答案 1 :(得分:7)

正如其他答案所述,您不能拥有2个具有双向同步的SVN回购。对于SVN-SVN对,您只能构建单向同步RO SVN镜像

对于可以与中心交换的本地仓库,您必须使用DVCS 。使用直接SVN无法使用辅助DVCS。如果你不想要Git,你可以使用Mercurial和hgsubversion,Bazaar ......但无论如何它都是额外的SCM。

对于单人工作(如果真的必须以这种方式工作),最好在服务器上进行分支。只是不要忘记定期将trunk连接到你的分支;这将有助于避免“合并头痛”。

答案 2 :(得分:5)

正如vsjones所回答的那样,您可以使用git-svn签出Subversion存储库,将其用作本地Git存储库,然后回发到它。您甚至可以使用Microsoft Git Source Control Provider来集成Git和VisualStudio。

HOWEVER ,我想问你为什么要这样做。看起来你可能就是我们在CM的用法中称之为爬进你的洞穴

爬进你的洞穴意味着你不会与其他人合作,而是在没有任何疏忽的情况下私​​下开展你的工作。你想让你的代码绝对完美。你想要一个计算机代码的杰作。然后,你将把它展示给那些将被你的编码技巧所震撼的毫无戒心的世界。你会被称为天才,甚至可能有机会与女孩交谈。

当然,问题是编码在公共视图中总是效果最好。代码评论不仅适用于已完成的代码。在编写代码时也是代码。在你走得太远的盲道之前。

另一个问题是开发商倾向于咀嚼的东西比他们咀嚼的多。如果我需要在与其他人相同的主干上检查我的工作,我更有可能采取更小的代码。 (是的,我本可以对字节进行双击,但我试图认真对待)。我将进行更改,可能会添加一些方法,测试和提交。然后,做更多的更改,测试和提交。

我曾经是ClearCase的管理员。在ClearCase中,每个开发人员都有自己的开发流。您在流上编码,然后将您的工作合并到集成流中。 (基本上,每个人都有自己的分支,并将您的更改合并到主干)。作为我工作的一部分,我会惹恼开发人员检查他们的更改。我查看了上次开发人员交付代码时的报告。我经常不得不处理合并问题。我觉得自己像个警察一样。

然后,我找到了一个每个人都使用CVS的工作。在CVS中,分支是一种痛苦,所以每个人都在同一个分支上工作。我无法想象这会如何运作。三十几个开发人员如何在同一个分支上工作?然而,随着时间的推移,我开始意识到,不仅每个人都可以在同一个分支机构工作,而且问题更少。我不再是被击败的警察,而不是确保所有开发人员遵守规则,我可以做其他我从未有时间做的CM功能。我与开发者的关系发生了变化。我不再是那个来到这里并告诉他们该怎么做的人。相反,我是一个可以提供帮助的人。

因此,请小心在您自己的私人存储库中完成工作,然后将完成的产品交付给您的团队。如果您正在进行需要长期开发的主要工作,可能会在您执行此操作时破坏构建,请在Subversion中请求您自己的功能分支。这样,每个人都会看到你要做的事情。

这并不是说使用git svn没有正当理由。我个人喜欢每隔几分钟检查我的代码。这使我能够在我开始弄乱之前五或十分钟恢复文件。我还是小咬一口,当我完成时我会检查我的代码。我平均每天向我们的主存储库提交大约3到4次提交。我也使用svn git,但不是这样,我可以爬进我的洞穴,但所以我有一条生命绳,我可以用来让我摆脱凌乱的编码情况。

所以,看看git svn,但请不要使用你自己的存储库来隐藏你的其他人的借口。您可以使用MS Git Provider(或来自AnkhSVN的[SVN提供商)。

答案 3 :(得分:0)

克隆SVN回购到不同的SVN站点

有一种方法可以将SVN存储库克隆到具有全部或部分历史记录的其他SVN站点。它就像在bash中运行以下命令一样简单。

clone-svn2svn.sh <source_svn_url> <destination_svn_url>

我花了很多时间来实现这个目标,并编写了一个脚本,以便自动化并记录下来。该脚本在场景后面使用git,但它将git从用户中抽象出来(除非当然出现问题)。

GitHub:clone-svn2svn

更新SVN存储库

还有关于如何在克隆存储库后从源更新存储库的说明。您可以在GitHub page上找到它们。不幸的是,我没有为此编写脚本,你需要用git命令行弄脏你的手。它也可以自动化。