2011-09-14 41 views
3

我想使用Bazaar来处理一个使用Subversion并且历史悠久的项目。例如svn://svn.freebsd.org/base/head与Bazaar镜像Subversion版本库无需导入完整的历史记录?

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

我的问题是,我发现的一切似乎都是用我想从SVN导入完整历史的假设书写的。我不想这样做。它需要太多的磁盘空间(并且实际上如果我尝试导入将会耗尽内存)。我真的不关心某个SVN revno /标记之前的任何更改。但我确实希望让每个人在分界点之后提交,以便在集市一侧正确显示。我怎么能做到这一点?

我基本上要为我的卖主分支下面的逻辑(从中我可以让我的地方分支机构):

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 

显然,上述不存储犯集市,这是消息和其他类似的东西一个问题。我可以做这个日常的cron作业,只是做svn up,并且在一天内提交所有SVN的变化进入Bazaar分支。

我该如何做到这一点,以便元数据和单个提交被正确地转换为Bazaar(与它们在SVN侧发生的粒度相同)?我不需要能够推入SVN。我需要的只是一种单向解决方案。我希望有一个工具可以做到这一点!

回答

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做初始同步,我想每次都重新运行该命令在此之后逐步获取新的更改。

我目前正在测试这个。我将以任何成功或失败更新我的答案。其他解决方案仍然受欢迎。 :)

UPDATE:

我所做的配置示例简单一点,并添加encoding进入这似乎与许多项目需要。

到目前为止,我的测试结果是,裁缝不幸的是与大型项目(如我的例子)不是很强大。由于某种原因,在我的bzr存储库中缺少一个子目录,并且使用裁剪拉动更新非常缓慢并且需要大量资源。也许它在小项目中可以正常工作。我喜欢裁缝对于不同的VCS具有如此多的后端,并且对他们的差异保持中立。

相关问题