如何获取SVN存储库的本地副本?

时间:2016-05-10 13:16:23

标签: svn

我很想将我的SVN存储库迁移到Git存储库。为了做到这一点,我必须在我的机器中本地拥有我的svn存储库。到目前为止,我尝试了svn checkoutgit svn clonesvndump,但都没有效果。我找到rsync,但这也给出了一个我无法摆脱的错误。

我在我希望它复制存储库的目录中执行以下命令:

rsync -a . username@domain.host:http://someAddress/svn/repoName

并收到以下错误。

ssh: Could not resolve domain.host: Name or service not known rsync: connection unexpectedly closed (0 bytes received so far) [sender] rsync error: unexplained error (code 255) at io.c(605) [sender=3.0.9]

有人能举例说明这种情况的简单用例吗?

提前致谢。

更新:尝试以下操作:

svnadmin dump http://someAddress/svn/Reponame > Reponame-svn.out

并得到错误:

svnadmin: 'http://someAddress/svn/Reponame' is an URL when it should be a path

所以,这也行不通..

3 个答案:

答案 0 :(得分:1)

如果您没有直接访问Subversion服务器并且您正在使用最近的客户端(您应该使用它),则可以使用svnrdump创建转储文件,然后可以将其加载到本地存储库,制作完整存储库在该时间点的副本,然后您可以将其转换为git。

如果您确实可以直接访问服务器,请使用服务器上的NaN创建相同的转储文件,然后转移到您工作的任何位置,加载到新的存储库,然后运行转换。

答案 1 :(得分:0)

rsync仅适用于SSH连接,而不适用于HTTPS。它还要求您具有对服务器的控制台访问权限(即您的存储库托管在Linux / Unix服务器上)。因此,除非您拥有容纳SVN存储库的服务器的SSH密钥,这使您处于$#提示符,否则您将无法使用rsync获取存储库文件(或scp)。

如果它是Windows服务器,那么您将需要RDP访问(或某种方式来运行命令,然后将文件放在可以下载它们的地方)。

要制作SVN存储库目录的备份副本,svndumpsvnadmin hotcopy都可以。两者都必须在服务器上的命令行执行。然后,您需要将转储文件(svndump)或由svnadmin hotcopy创建的存储库目录传输到本地计算机。

答案 2 :(得分:0)

请注意,一旦您复制了svndump / svnadmin dump的结果(如accepted answer中的建议),则可以svn2gitsubgit用于将其导入到Git存储库。

从前(2009年至2012年),有一个vcs-svn实验将SVN“转储文件”转换为Git快速导入流,但是... Git 2.29(2020年第4季度)明确删除了该实验

请参见commit fc47391commit a006f87commit d7a5649commit b5dd96bcommit a04f653Jeff King (peff)(2020年8月13日)。
(由Junio C Hamano -- gitster --commit afd49c3中合并,2020年9月3日)

svn:删除vcs-svn实验

签名人:杰夫·金

vcs-svn中的代码始于2010年,其目的是构建用于与svn存储库(而不是git-svn进行交互)的远程帮助程序。
但是,我们还没有交付成熟的远程帮助程序,最后一次实质性提交是在2012年10月提交了[e99d012a6bc](https://github.com/git/git/commit/e99d012a6bc8b8647a0389d486b5489557364ea6,Git v1.8.1-rc0)。

我们确实有一个git-remote-testsvn,甚至将其安装为“ make install”的一部分。但是,有了这个名称,似乎不太可能被任何人使用(您必须明确地使用“ git clone testsvn::$url man,并且在该名称上几乎没有提及自2013年以来的邮件列表,甚至包括短语“ you might need to hack a bit to get it working properly”。

我们还发布了contrib/svn-fe,它是基于vcs-svn工作的。
但是,对于我来说,它似乎并不是开箱即用的,因为链接步骤会丢失一些使用libgit.a所需的库。
奇怪的是,对于我来说,原始的构建破坏被一分为二eff80a9fd9(允许自定义“ comment char”,2013-01-16,Git v1.8.2-rc0),这似乎无关。
尝试在da011cb0e7中进行修复(“ contrib/svn-fe:修复Makefile”,2014-08-28,Git v2.2.0-rc0-merge),但是在我的系统上只能切换错误消息。

因此看来,实际上任何人都无法真正使用该结果。
如果有人想再次讨论该主题,那将是很棒的,因此,出于这个原因值得进行。但另一方面,进行树级操作的人员必须处理此代码。
并且您可以看到带有(用适当的提交替换“ HEAD”)的列表:

{
  echo "--"
  git diff-tree --diff-filter=D -r --name-only HEAD^ HEAD
} |
git log --no-merges --oneline e99d012a6bc.. --stdin  

这表明通常由于编译或测试失败,树范围的样式修复或API更改而导致有人必须处理该代码58次。

让我们放下它,让任何想捡起来的人都可以通过从Git历史中恢复它来做到这一点。

作为奖励,这还将Git的剥离安装大小从21MB减小到19MB。