我是 bazaar 的新手,但对 Git 非常熟悉。我正在尝试了解基础知识。
假设我有一个分支,其历史如下所示:
* 3 bar
|
* 2 foo
|
* 1 initial commit
我有一系列补丁想要转化为提交,但它们基于旧版本。我想创建旧版本的提交,然后将结果合并回来。生成的图表应如下所示:
* 4 merge
|\
| * 2.1.3 apply patch #3
| |
| * 2.1.2 apply patch #2
| |
| * 2.1.1 apply patch #1
| |
* | 3 bar
|/
* 2 foo
|
* 1 initial commit
如何使用 bzr
执行此操作?
使用 Git,我会做这样的事情:
git checkout -b import-patches master^
for p in 1 2 3; do
git apply --index /path/to/"${p}".patch
git commit -m "apply patch #${p}"
done
git checkout master
git merge import-patches
git branch -d import-patches
最佳答案
与 Git 不同,Bzr 的模型是每个分支使用一个工作目录,而不是每个存储库使用一个工作目录(除非您使用共置分支)。您的示例的基本工作流程大致相同:
首先,将当前分支分支到新目录 ../import-patches
。您可以使用负修订号或 last:n
表示从分支头部开始的修订(或直接使用修订号):
bzr branch . ../import-patches -r last:2
然后,转到新的分支目录并应用补丁(bzr 补丁可能需要 -p/--strip
选项):
pushd ../import-patches
for p in 1 2 3; do
bzr patch /path/to/"${p}".patch
bzr commit -m "apply patch #${p}"
done
现在,返回到原来的分支目录并合并。您需要在单独的步骤中提交合并:
popd
bzr merge ../import-patches
bzr commit
请注意,每个分支都将有一个独立的存储库,除非您使用 bzr init-repo
设置共享存储库。共享存储库只是一个目录,其修订数据存储在其 .bzr
中。子目录和其他包含各个分支的子目录(包括嵌套子目录);这些分支将在共享存储库中存储所有常见修订。如果您熟悉git-new-workdir
,这类似于主存储库是没有工作树的 Git 存储库,每个子目录都是用 git-new-workdir
初始化的工作树。并与一个单独的分支相关联。
并置分支允许您在同一目录中拥有多个分支;这需要 colo
Bzr 2.5.x 插件;共置分支应该是 2.6 的核心功能,但可能尚未完全稳定。
关于version-control - 如何根据旧修订创建新提交?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17766682/