version-control - 如何根据旧修订创建新提交?

标签 version-control dvcs bazaar

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

相关文章:

git - JetBrains : Show local changes made in this branch

git - 如何在 TFS 2012 Update 2(自托管)中启用 GIT 支持

mercurial - merge 方向在 Mercurial 中重要吗?

bazaar - 如何告诉 Bazaar 文件是二进制的

git - IPython Notebook %%bash 魔术错误

version-control - 从 ",v"文件恢复 CVS 存储库

version-control - DVCS是否适合公司环境?

version-control - Bazaar版本控制的状态是什么?

python - 使用 Python 解释器时,如何在脚本运行之前执行一堆 Python 命令?