2013-09-25 39 views
1

因此,我们刚刚收到有关我们的一些项目正在关闭的通知,目前托管在sourcerepo.com上。如何“转储”正在关闭的SVN远程存储库

当然,我可以从头版本更新,让一切都变得很酷,为了档案的缘故,我真的希望了解过去一年半以来对存储库进行的所有更改的历史。

我想出了正在开发一种快速而肮脏的解决方案,但吃了磁盘空间像疯了似的:

FOR /L %i IN (1, 1, 680) DO svn checkout <url>/[email protected]%i %i 
SVN LOG <url>/Project >> log.txt 

即使我不喜欢这样!

svnadmin dump <url>/Project出错,说它需要一个本地路径来处理。

是否有一个更干净的方式来做到这一点,即使我没有本地或SSH访问服务器本身(我只能通过https读取/写入svn访问,甚至无法登录到网站上客户门户网站)?

+0

您是否需要在本地使用SVN,或者您是否愿意使用更现代的DVCS,如git或mercurial?两者都可以从SVN导入,并可能实际上简化了这个过程。 –

+0

@TimoGeusch我很想将它迁移到git!我们将在未来几个月内建立一个内部服务器。不过,我上周在另一个个人项目上尝试了一次git svn导入,并没有将完整的svn历史记录导入到git日志中,这让我认为它可能无法记住以前对svn所做的任何修订,以及如果需要恢复到他们。基本上,我需要找到一个转储点,在那里我可以回顾整个项目生命周期的变化历史,看看它已经发生了什么,它是如何开始的,以及我们已经取得了多少进展。 – depwl9992

+0

我目前的计划是:做这个奇怪的600+循环结账,并手动(或批量)重新推到内部服务器。 – depwl9992

回答

1

通过上面详述的,然后做了些研究我的批处理脚本实际上是让我的电脑运行后,我相信,只是整个事情迁移到Git的是一个好主意,所以我发现这一点:http://git-scm.com/book/en/Git-and-Other-Systems-Migrating-to-Git

基本上,用五个贡献者填写users.txt文件,每行的格式为svn_username = Name <email>

我尝试了他们提出的从SVN日志中提取用户的方法,但没有奏效。因此,我只是打开SVN日志在Tortoise中,做了一个查看所有条目,并快速扫描所有条目,然后手动输入到文本文件中。

然后执行git clone https://<url>/Project --authors-file=users.txt --no-metadata Project(没有使用-s标志,作为我们公司项目的结构完全不符合标准......)。

它只是简单的工作。从r1开始,一路走好没有问题,除了一个“在users.txt中找不到此用户”,这个问题很容易解决。

没有任何标签或分支可以说任何一个,所以没有额外的转换甚至是必要的。

1

使用svnsync的:

svnsync help sync 
synchronize (sync): usage: svnsync synchronize DEST_URL [SOURCE_URL] 

使用Git并做克隆在REV 1,然后做一个pullupdate

安装Mercurial,安装hgsubversion并启用它,做一个克隆在REV 1,然后做一个pullupdate

因为在git和hg中克隆都可以出错,并且只剩下一点点拉就可以接受它离开/遇到问题的地方,它通常是一个很好的计划,在rev 1克隆然后pull/update。

您甚至可以考虑为每个修订版生成和存储修补程序文件,而不是每个修订版的整个存储库。

0
  1. 安装python和pysvn 假设您还没有
  2. 在您的本地机器上安装svn admin工具,假设您尚未拥有
  3. 在您自己的机器存储库上创建本地并启动本地服务器。
  4. 使用python脚本依次从远程服务器和该rev的日志条目中提取每个rev。
  5. 将每个rev及其日志消息提交给本地服务器。
  6. 当你准备好时,你可以使用svnadmin工具从你自己的机器移动到你可以直接访问的服务器。
1

Subversion的最后两个版本包括svnrdump tool。指向存储库的URL,它将生成一个转储文件,然后您可以使用该文件来加载(svnadmin load)本地存储库或用于转换为另一个VCS。