2

我是 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
4

1 回答 1

2

与 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单独的分支初始化并关联的工作树。

并置分支允许您在同一个目录中拥有多个分支;这需要coloBzr 2.5.x 的插件;co-located 分支应该是 2.6 的核心功能,但可能还没有完全稳定。

于 2013-07-21T02:08:19.983 回答