我正在编写一个框架以及一个使用该框架的项目。该项目是一个 Bazaar 存储库,框架位于项目下方的子文件夹中。
我想为框架提供一个自己的 Bazaar 存储库。我该怎么做?
您使用拆分命令:
bzr split sub_folder
这会在子文件夹中创建一个独立的树,您现在可以单独导出和处理它。
使用快速导入插件(http://bazaar-vcs.org/BzrFastImport):
1) 将所有历史记录导出到流中:
bzr fast-export BRANCH > full-history.fi
2)过滤历史以产生新的流:
bzr fast-import-filter -i subfolder full-history.fi > subfolder.fi
3)仅使用子文件夹重新创建新分支:
bzr init-repo .
bzr fast-import subfolder.fi
据我所知,没有办法通过集市轻松做到这一点。一种可能性是获取原始项目,将其分支,然后删除与框架无关的所有内容。然后,您可以将子目录中的文件移动到主目录。这是一件苦差事,但可以保留历史。
你最终会得到类似的东西:
branch project:
.. other files..
framework/a.file
framework/b.file
framework/c.file
branch framework:
a.file
b.file
c.file
据我所知,Bazaar 还不支持“嵌套”分支。Git 支持“子模块”,其行为类似于 Subversion 外部。
我曾尝试使用 bzr split 来执行此操作,但是,这并不符合我的预期。
我在上面 jamuraa 的答案中使用了该方法,这对我来说要好得多,因为我不必纠结于转换为新的存储库类型。这也意味着从该存储库进行完整的签出/分支只会重新创建我想要的文件。
但是,它仍然有一个缺点,即存储库存储了所有这些“已删除”文件的历史记录,这意味着它占用了不必要的空间(如果您不希望人们能够看到,这可能是一个隐私问题这些“其他”目录的旧版本)。
因此,将不胜感激更多关于将 Bazaar 分支切割到其子目录之一同时永久删除其他所有内容的历史的建议。
做一个
bzr init .
bzr add .
bzr commit
在框架目录中。
然后您可以分支并合并到该目录。
更高层的集市会忽略该目录,直到您加入。
Bazaar 明白当你做类似的事情时
bzr branch . mycopy
bzr branch . myothercopy
当前目录 .bzr 不会跟踪这些子目录的更改。
它使您免于寻找放置分支的地方。