我是集市的新手,但对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
答案 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的核心特征,但可能还不完全稳定。