我很想将我的SVN存储库迁移到Git存储库。为了做到这一点,我必须在我的机器中本地拥有我的svn存储库。到目前为止,我尝试了svn checkout
,git svn clone
,svndump
,但都没有效果。我找到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
所以,这也行不通..
答案 0 :(得分:1)
如果您没有直接访问Subversion服务器并且您正在使用最近的客户端(您应该使用它),则可以使用svnrdump
创建转储文件,然后可以将其加载到本地存储库,制作完整存储库在该时间点的副本,然后您可以将其转换为git。
如果您确实可以直接访问服务器,请使用服务器上的NaN
创建相同的转储文件,然后转移到您工作的任何位置,加载到新的存储库,然后运行转换。
答案 1 :(得分:0)
rsync
仅适用于SSH连接,而不适用于HTTPS。它还要求您具有对服务器的控制台访问权限(即您的存储库托管在Linux / Unix服务器上)。因此,除非您拥有容纳SVN存储库的服务器的SSH密钥,这使您处于$
或#
提示符,否则您将无法使用rsync
获取存储库文件(或scp
)。
如果它是Windows服务器,那么您将需要RDP访问(或某种方式来运行命令,然后将文件放在可以下载它们的地方)。
要制作SVN存储库目录的备份副本,svndump
或svnadmin hotcopy
都可以。两者都必须在服务器上的命令行执行。然后,您需要将转储文件(svndump)或由svnadmin hotcopy
创建的存储库目录传输到本地计算机。
答案 2 :(得分:0)
请注意,一旦您复制了svndump
/ svnadmin dump
的结果(如accepted answer中的建议),则可以svn2git或subgit用于将其导入到Git存储库。
从前(2009年至2012年),有一个vcs-svn实验将SVN“转储文件”转换为Git快速导入流,但是... Git 2.29(2020年第4季度)明确删除了该实验
请参见commit fc47391的commit a006f87,commit d7a5649,commit b5dd96b,commit a04f653,Jeff 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。