使用Bazaar镜像Subversion存储库而不导入完整历史记录?

时间:2011-09-14 16:09:24

标签: svn version-control bazaar

我想使用Bazaar处理使用Subversion的项目并且历史悠久。例如svn://svn.freebsd.org/base/head

有一个很好的插件bzr-svn可以用来处理SVN存储库。有一些相关工作流程的示例here

我的问题是,我发现的所有内容似乎都是假设我想从SVN导入完整的历史记录。我不想那样做。它需要太多的磁盘空间(实际上,如果我尝试,导入将耗尽内存)。我真的不关心某个SVN revno / tag之前的任何变化。但是我确实希望在截止点之后让每个人都提交到巴扎方面。我怎么能做到这一点?

我基本上想要我的供应商分支的以下逻辑(我可以从中创建我的本地分支):

svn co svn://svn.freebsd.org/base/head -r CUTOFF_REVNO

while true
do
    svn up -r NEXT   # note: NEXT is not possible even though there is PREV
    bzr commit
    sleep N
done

显然上面没有在Bazaar中存储提交消息和其他类似的东西,这是一个问题。我可以将它作为svn up的日常cron作业,并在一天内将所有SVN更改一次性提交到Bazaar分支。

如何实现这一目标,以便将元数据和单个提交正确转换为Bazaar(具有与SVN端相同的粒度)?我不需要能够进入SVN。我所需要的只是单向解决方案。我希望有一个工具可以做到这一点!

1 个答案:

答案 0 :(得分:2)

我认为我找到了一个潜在的解决方案,所以我正在回答自己。

有一个名为Tailor的工具可以做到这一点。它是一个通用的解决方案,因此它适用于大多数流行的版本控制系统(如CVS,SVN,Bazaar,Mercurial,Git,Darcs和其他一些)。

要完成我的要求,我需要以下配置文件,例如freebsd-tailor.conf

[DEFAULT]
verbose = True
projects = freebsd-current

[freebsd-current]
root-directory = /home/tailor/freebsd-current
subdir = upstream
source = svn:freebsd-current
target = bzr:freebsd-current
start-revision = 225424

[svn:freebsd-current]
repository = svn://svn.freebsd.org/base
module = /head
encoding = iso-8859-1

[bzr:freebsd-current]

然后我只需运行tailor -c freebsd-tailor.conf在revno 225424进行初始同步,并在每次我想逐步获取新的更改时重新运行该命令。

我正在测试这个。无论成功与否,我都会更新我的答案。其他解决方案仍然受欢迎。 :)

<强>更新

我使配置示例更简单,并添加了encoding条目,这似乎是许多项目所必需的。

到目前为止,我的测试结果是 tailor 对于大型项目(例如在我的示例中)不太可靠。在我的bzr存储库中由于某种原因丢失了一个子目录,并且使用tailor拉动更新非常慢并且需要大量资源。也许它适用于小项目。我喜欢裁缝如何为不同的VCS提供如此多的后端,并对他们的差异保持中立。