我想使用Bazaar来处理一个使用Subversion并有很长历史的项目。例如svn://svn.freebsd.org/base/head
。
有一个很好的插件bzr-svn
,可以用来与SVN仓库一起工作。这里有一些相关的工作流here的例子。
我的问题是,我找到的所有东西似乎都是基于一个假设,即我想从SVN导入完整的历史记录。我不想那样做。它占用了太多的磁盘空间(实际上,如果我尝试的话,导入会耗尽内存)。在某个SVN revno/tag之前,我真的不关心任何更改。但我确实希望每个人都在截止点之后提交,以便在Bazaar一侧正确地显示出来。我如何才能做到这一点?
我基本上想要为我的供应商分支(我可以用它来创建我的本地分支)使用以下逻辑:
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中存储提交消息和其他类似的东西,这是一个问题。我可以将其设为每天的cron作业,它只需执行svn up
,并在一天内将所有SVN更改提交到Bazaar分支中。
如何才能将元数据和单个提交正确地转换为Bazaar (具有与SVN端相同的粒度)?我不需要能够推入SVN。我需要的只是一个单向的解决方案。我希望有一个工具可以完全做到这一点!
发布于 2011-09-15 02:36:10
我想我找到了一个潜在的解决方案,所以我回答自己。
有一个名为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]
然后,我只需在revno 225424中运行tailor -c freebsd-tailor.conf
来进行初始同步,然后在此之后每次我想增量地获取新的更改时重新运行该命令。
我目前正在对此进行测试。我会用任何成功或失败来更新我的答案。其他解决方案仍然很受欢迎。:)
更新:
我使配置示例变得更简单,并添加了encoding
条目,这似乎是许多项目所必需的。
到目前为止,我的测试结果是,不幸的是,对于大型项目(如我的示例),tailor并不是很健壮。由于某种原因,我的bzr存储库中缺少了一个子目录,并且使用tailor拉取更新非常慢,并且占用了大量资源。也许它在小项目中工作得很好。我喜欢tailor对不同的VCSes有如此多的后端,并且对它们的差异保持中立。
https://stackoverflow.com/questions/7419484
复制相似问题