跟踪从svn切换到git的大型项目

跟踪从svn切换到git的大型项目,svn,git,Svn,Git,我正在跟踪一个最近从svn迁移到git的项目。我已经获得了最新的svn代码,并希望开始使用git中的代码。有没有一种方法不需要通过慢速连接重新下载相当大的代码库?本质上,我希望能够说“从这里开始(旧的svn代码),从git获得更改”。我认为您无论如何都需要克隆该项目您可以通过预先为git存储库植入您已经拥有的内容来节省一些时间,您可能还需要下载很多内容(我不确定它在计算出它所需要的最低限度方面会有多聪明)但它可能会有所帮助 如果创建新的git存储库并将subversion签出添加到该存储库中,则

我正在跟踪一个最近从svn迁移到git的项目。我已经获得了最新的svn代码,并希望开始使用git中的代码。有没有一种方法不需要通过慢速连接重新下载相当大的代码库?本质上,我希望能够说“从这里开始(旧的svn代码),从git获得更改”。

我认为您无论如何都需要克隆该项目

您可以通过预先为git存储库植入您已经拥有的内容来节省一些时间,您可能还需要下载很多内容(我不确定它在计算出它所需要的最低限度方面会有多聪明)但它可能会有所帮助

如果创建新的git存储库并将subversion签出添加到该存储库中,则该存储库应包含许多本应下载的对象。然后,您可以使用新存储库作为参考克隆上游git存储库:

git clone --reference /local/reference/repo git://remote/upstream/repo

请注意,新克隆的repo将取决于对象是否存在被黑客攻击的repo;您可以通过重新克隆本地存储库来解决这一问题。

本例中的问题是,git不仅保存最新签出,还保存程序的整个历史(所有提交、标记、分支等),因此,您可以轻松地在不同转速之间切换。因此,最新的结帐不会保存在任何位置-它只是根据数据临时生成的


但是,如果你想节省带宽,AFAIK有一个选项,只需下载从给定日期开始的所有对象,只需谷歌一点或搜索,以找到名称(我忘了)。这样做的明显缺点是,在此之前的任何历史记录都不可用。但对于简单的跟踪来说,这可能就足够了。

SVN&Git可能看起来很相似,因为它们都是SCM工具,但实际上,它们的实现非常不同,即

从fresh开始,git克隆它。即使对于像Linux内核这样的大型项目,git克隆速度也非常快

您还可以使用
--depth
选项加快速度:

--深度 创建一个浅层克隆,其历史记录被截断为 指定的修订数。浅存储库具有 限制数量(您无法从中克隆或获取) 它,也不是从它或推入),但是足够的,如果你 我们只对大型项目的近期历史感兴趣 有很长的历史,并且希望发送修复程序 作为补丁。 资料来源:

下面是一个检查存储库最新版本的示例:

git clone git://source.winehq.org/git/wine.git ~/wine-git --depth 1
资料来源:

稍后,您可以将
--depth
选项与
git pull
一起使用:

--深度= 深化由创建的浅层存储库的历史 按指定的提交次数使用--depth=选项进行git克隆。 资料来源:

也许,如果您为深度输入了足够大的数字(或者-1?),以便引入存储库的整个历史记录,那么您将拥有普通存储库的所有功能,例如,克隆或从中获取,或从中推送或插入

如果没有,您可以正常地在单独的位置克隆它(可能是在您有更快的连接时),并使用和将您的提交从浅存储库移动到新存储库中


Matt

此选项不认为
/local/reference/repo
也是git repo吗?是的,这是您刚刚通过签入subversion签出内容创建的repo。邮件列表上还有实验性的惰性克隆。