如何从旧版本创建新的提交?

时间:2013-07-20 21:03:06

标签: version-control dvcs 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

1 个答案:

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

同位分支允许您在同一目录中拥有多个分支;这需要Bzr 2.5.x的colo插件;同位分支应该是2.6的核心特征,但可能还不完全稳定。