我有一个远程svn仓库。我想将其检出(包括历史记录),然后在Visual Studio中使用它作为常规仓库。一段时间后,我将从本地仓库提交更改到远程仓库(并更新任何文件)。
所以看来我只需要两个svn仓库的副本,并且我需要同步它们的能力。
如何做到这一点?
我有一个远程svn仓库。我想将其检出(包括历史记录),然后在Visual Studio中使用它作为常规仓库。一段时间后,我将从本地仓库提交更改到远程仓库(并更新任何文件)。
所以看来我只需要两个svn仓库的副本,并且我需要同步它们的能力。
如何做到这一点?
这与SVN的本意是相悖的。看起来您需要使用像Git或Mercurial之类的分布式版本控制系统,这就是为什么许多开发者已经转向了这样的系统。
我建议使用git,并使用git-svn桥接工具来能够与您的SVN服务器通信。
当您从SVN克隆时,Git会保留整个存储库的副本(这意味着初始克隆可能需要很长时间,因为它需要检出每个修订版本)。然后,您可以在本地Git存储库中进行提交,并将其推送回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闪存驱动器上(确保备份以防意外丢失或损坏)。对于可以与中央交换的本地存储库,必须使用DVCS。没有办法使用直接的SVN来实现,不使用辅助的DVCS。如果不想使用Git,则可以使用带有hgsubversion、Bazaar等的Mercurial,但无论如何都是额外的SCM。
对于独立工作(如果您真的必须这样工作),最好在服务器上分支。只需不要忘记定期将主干合并到您的分支中;这将帮助您避免“合并头痛”。
因此,在您自己的私有存储库中完成工作并交付成品给团队时,要小心。如果您正在进行需要长期开发且可能在进行过程中“破坏构建”的重大工作,请在Subversion中请求您自己的功能分支。这样,每个人都可以看到您在做什么。
这并不是说没有使用git svn的正当理由。我个人喜欢每隔几分钟检查一次我的代码。这使我能够恢复一个文件,就像在我开始弄乱之前五或十分钟那样。我仍然采取小步骤,并在完成后检查我的代码。我每天平均向我们的主存储库提交约3到4个版本。我也使用svn git,但不是为了钻进我的洞穴,而是为了拥有一个可以用来将我从混乱的编码情况中拉出来的救生绳。
因此,请查看git svn,但请不要使用您有自己存储库的借口来躲避团队的其余成员。您可以使用MS Git Provider(或来自AnkhSVN的[SVN提供程序])。
有一种方法可以将 SVN 存储库与全部或部分历史记录克隆到不同的 SVN 站点。只需在 bash 中运行以下命令即可轻松完成。
clone-svn2svn.sh <source_svn_url> <destination_svn_url>
我花了相当长的时间来实现这个目标,并编写了一个脚本,使其自动化并为其他人记录下来。该脚本在幕后使用git,但它将git从用户中抽象出来(除非出现问题)。
GitHub链接: clone-svn2svn
在克隆源代码之后,还有关于如何从源代码更新仓库的说明。您可以在GitHub页面上找到它们。不幸的是,我没有为此编写脚本,您需要亲自使用git命令行。但这也可以自动化。
svn checkout svn://host/repos/test folder
svnsync
或git svn
(后者在上文中已经描述过)等工具克隆完整的服务器存储库。svnsync
创建存储库副本,请不要困惑于克隆的存储库不包含您提交的文件。这是因为SVN服务器将文件保存在db/revs/
文件夹中的FSFS格式中。您可以通过通常的svn checkout file:///path-to/SVNRepository/ folder
方式检索文件。
pull
和push
的示例怎么样? - AbdelHady