如何将 SVN 存储库的一部分导入 Bazaar

如何将 SVN 存储库的一部分导入 Bazaar

现状

我正在运行 Bazaar 2.4.1

一个“项目托管”公司为我的 svn 存储库提供托管Project A

https://svn.example.com/myrepo/trunk/ProjectA/

我没有 的 repo 的 svn-admin 访问权限svn.example.com

projectArepo 中,有一个目录保存了 的所有代码Component X。它的 svn 位置是:

https://svn.example.com/myrepo/trunk/ProjectA/ComponentX

目标

Component X我正在尝试从Project A的 SVN 存储库分离出来以成为Project BProject B在 Bazaar 中版本控制在哪里。

计划

我的计划是:

  1. 创建本地 bzr 存储库Project B
  2. 使用从bzr svn-import导入到我的本地Component XProject AProject B
  3. 然后推Project B送到 Launchpad
  4. 然后,来自 svn repo 的svn-delete旧目录。Component X

我卡在第 2 步了。

到目前为止,一切都很好

因此,在我的 Windows XP 上,我创建了一个 bzr 仓库Project B

# cd C:\me\OpenSource\
# bzr init-repo ProjectB

然后我进入该目录:

# cd ProjectB

有点不对劲

然后,我尝试bzr svn-import获取 svn 目录:

# bzr svn-import https://svn.example.com/myrepo/trunk/ProjectA/ComponentX/

然而,这会产生一个错误:

bzr: ERROR: The specified path is inside a branch. Specify a different URL or a
different repository layout (see also 'bzr help svn-layout').

我尝试了各种方法但仍然出现同样的错误。

我尝试过的事情

尝试:修改 subversion.conf 以表明 ComponentX 是一个分支

查看后'bzr help svn-layout',我修改C:\Documents and Settings\Me\Application Data\bazaar\2.0\subversion.conf并添加了一行以表明/ComponentX应将其视为一个分支:

[203ae883-c723-44c9-aabd-cb56e4f81c9a]
branches = */ComponentX

这不起作用。同样的错误:

bzr: ERROR: The specified path is inside a branch. Specify a different URL or a
different repository layout (see also 'bzr help svn-layout').

尝试:指定不同的存储库布局作为参数

即将其作为参数传递:(--layout=root因为我希望该路径被视为新 bzr 存储库的根目录):

# bzr svn-import --layout=root https://svn.example.com/myrepo/trunk/ProjectA/ComponentX/

这不起作用。同样的错误:

bzr: ERROR: The specified path is inside a branch. Specify a different URL or a
different repository layout (see also 'bzr help svn-layout').

因此,我试着说--layout=none

# bzr svn-import --layout=none https://svn.example.com/myrepo/trunk/ProjectA/ComponentX/

这不起作用。同样的错误:

bzr: ERROR: The specified path is inside a branch. Specify a different URL or a
different repository layout (see also 'bzr help svn-layout').

说实话我现在很黑客。

我只是不知道我错在哪里。

答案1

svn-import 专门用于导入 Subversion 存储库中的所有分支。--layout 选项用于指定它认为的分支。看来您正在尝试克隆单个分支,对此“bzr branch”确实是正确的命令。

解释一下布局:

“branches =”设置中的星号不会遍历多于一层的目录。在 subversion.conf 中设置“branches = trunk/*/ComponentX”是正确的值。不过,bzr-svn 的错误似乎有点令人困惑。实际上,它应该说您指定的路径不包含任何分支。

这意味着 --layout=root 只会让它考虑https://svn.example.com/myrepo分支。这解释了为什么您会收到有关在路径内指定分支的错误。

答案2

回答我自己的问题。

与其与 作斗争bzr svn-import,不如使用 来规避问题bzr branch。它并没有真正回答为什么bzr svn-import会抛出错误的问题,但解决了问题。

因此,在“项目托管”公司托管您的 svn 存储库的情况下Project A

https://svn.example.com/myrepo/trunk/ProjectA/

projectArepo 中,有一个目录保存了 的所有代码Component X。它的 svn 位置是:

https://svn.example.com/myrepo/trunk/ProjectA/ComponentX

目标是Component XProject A的 SVN 存储库分离出来成为Project B。BazaarProject B中对 进行版本控制。

该计划应如下:

  1. 创建本地 bzr 存储库Project B
  2. 使用bzr branch转储Component XProject A我的本地Project B
  3. 然后推Project B送到 Launchpad
  4. 建议:不要忘记使用 svn-deleteComponent XProject A避免重复。

就像这样:

1. 创建本地 bzr 仓库Project B

因此,在我的 Windows XP 上,我创建了一个 bzr repo Project B

# cd C:\me\OpenSource\
# bzr init-repo ProjectB

然后,进入该目录:

# cd ProjectB

2. 使用从bzr branch转储到我的本地Component XProject AProject B

然后,从 svn repo 子目录创建本地分支:

# bzr branch https://svn.example.com/myrepo/trunk/ProjectA/ComponentX/ ComponentX

3. 然后,推Project B送到 Launchpad

然后,按照以下说明推送它以创建启动板托管的分支bazaar 文档中的说明

# bzr push lp:~mylaunchpadteam/mylaunchpadproject/trunk

然后,也许调整目录结构并添加文件以将其转换为“项目”。

相关内容