我想使用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。我所需要的只是单向解决方案。我希望有一个工具可以做到这一点!
答案 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提供如此多的后端,并对他们的差异保持中立。