现状
我正在运行 Bazaar 2.4.1
一个“项目托管”公司为我的 svn 存储库提供托管Project A
:
https://svn.example.com/myrepo/trunk/ProjectA/
我没有 的 repo 的 svn-admin 访问权限svn.example.com
。
在projectA
repo 中,有一个目录保存了 的所有代码Component X
。它的 svn 位置是:
https://svn.example.com/myrepo/trunk/ProjectA/ComponentX
目标
Component X
我正在尝试从Project A
的 SVN 存储库分离出来以成为Project B
。Project B
在 Bazaar 中版本控制在哪里。
计划
我的计划是:
- 创建本地 bzr 存储库
Project B
- 使用从
bzr svn-import
导入到我的本地Component X
Project A
Project B
- 然后推
Project B
送到 Launchpad - 然后,来自 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/
在projectA
repo 中,有一个目录保存了 的所有代码Component X
。它的 svn 位置是:
https://svn.example.com/myrepo/trunk/ProjectA/ComponentX
目标是Component X
从Project A
的 SVN 存储库分离出来成为Project B
。BazaarProject B
中对 进行版本控制。
该计划应如下:
- 创建本地 bzr 存储库
Project B
- 使用
bzr branch
转储Component X
到Project A
我的本地Project B
- 然后推
Project B
送到 Launchpad - 建议:不要忘记使用 svn-delete
Component X
来Project 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 X
Project A
Project 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
然后,也许调整目录结构并添加文件以将其转换为“项目”。