質問
最近、SVNからMercurialに切り替えました。ここで、他の開発者がリポジトリで何が起こるかを理解することを期待して、Mercurialで意図した分岐ワークフローをグッドプラクティスに従って実現する方法を疑問に思います。
これはワークフローです:
- 通常、現在のリリースシリーズの作業が行われるトランク/デフォルトブランチがあります。それが1.xだとしましょう。同時に、次のメジャーリリースで作業するためにブランチ2.xを使用します。このブランチでの変更は急進的な場合があるため、trunk / default / 1.xブランチとのマージはここでは意味がありません。
- しばらくすると、2.xの作業が終了し、バージョン2.0がリリースされる可能性があります。ここで、2.xブランチを新しいデフォルト/トランクブランチにし、現在のデフォルト/トランクを1.xブランチにします。
- このプロセスを繰り返すと、新しい3.xブランチが来るかもしれません。以前と同様に、3.0がリリースされると、3.xが新しいデフォルトブランチになり、現在のデフォルトが2.xブランチになります(再び)。
私の質問は、このワークフローが良いものであるかどうかではありませんです(根本的に間違っているわけではないと思います)。私の質問は、Mercurialでこれを実現する方法が良いプラクティスと見なされるか、より良い機会があるかどうかです。
これが、Mercurialでブランチを管理する方法です...
現在のリリースシリーズ1.xのコードを保持する単一のブランチを持つリポジトリから開始:
$ hg init
$ echo "hello world" > file1.txt
$ hg ci -A -m "Initial commit of 1.x code"
リリース2.xでの作業を開始:
$ hg branch 2.x
$ hg ci -m "Create new branch for 2.x development"
$ echo "Big new feature for 2.x" > file2.txt
$ hg ci -A -m "Add big new feature"
一方、現在のリリースシリーズ(1.x)でいくつかの作業を行います。
$ hg up default
$ echo "Minor adjustments specific for 1.x" > file3.txt
$ hg ci -A -m "Minor adjustments"
しばらくしてリリース2.0の準備が整いました。 1.x への default ブランチおよび default への 2.x ブランチ:
$ hg up default
$ hg branch 1.x
$ hg ci -m "Make default branch to 1.x branch"
$ hg up 2.x
$ hg ci --close-branch -m "Close branch 2.x"
$ hg branch --force default
$ hg ci -m "Make former 2.x branch to new default"
新しいブランチ 3.x を作成して作業し、 default でも作業します。繰り返しますが、しばらくして3.0の準備ができたので、ブランチ名を管理します。
$ hg up default
$ hg branch --force 2.x # (reuse previously closed 2.x branch name)
$ hg ci -m "Make default branch to 2.x branch"
$ hg up 3.x
$ hg ci --close-branch -m "Close branch 3.x"
$ hg branch --force default
$ hg ci -m "Make former 3.x branch to new default"
レポは次のようになります(「o」が頭です):
o Branch default (3.x)
|
| o Branch 2.x
\|
| o Branch 1.x
\|
|
.
主なポイントは、ブランチ名を再利用し、ブランチ名と
その質問に対する多くのテキスト-申し訳ありません-しかし、私は自分が何をしているかについて明確にしたかったです。
解決
これが私がやることだ:
default
を" mainline"にしますブランチ。このブランチの先端は「現在公開されている」です。コードのバージョン。重要なバグ修正は、このブランチに直接コミットして、開発ブランチにマージできます。
バージョン2.0で作業を開始するには、 2.0-dev
ブランチを作成します。 2.0の変更をそのブランチにコミットし、メインライン( default
)からの重要なバグ修正をマージします。 2.0が完了したら、 2.0-dev
を default
にマージし、結果に 2.0
のタグを付けます。
この方法で作業を行うと、ブランチ名をジャグリングすることを心配する必要がなくなり、メインラインの重要なバグ修正を開発ブランチに非常に簡単にマージできます。
また、複数の将来のバージョン(たとえば2.1と3.0)を一度に作業している場合にもうまく拡張できます。 2.1の変更を定期的に3.0にマージして、3.0を最新の状態に保つことができます。
次のようなグラフになります。
$ hg glog -l 1000
@ changeset: 25:efc0096f47c0 tip
| summary: Added tag 3.0 for changeset d1a7fc3d7d77
|
o changeset: 24:d1a7fc3d7d77 3.0
|\ summary: Merge in the redesign changes.
| |
| o changeset: 23:b5b69d24c8f7 3.0-dev
| | summary: Finish 3.0 redesign.
| |
| o changeset: 22:4c2f98fac54b 3.0-dev
|/| summary: Merge in the latest changes to 2.1/mainline.
| |
o | changeset: 21:37df04521032
| | summary: Added tag 2.1 for changeset 39ecc520fc0a
| |
o | changeset: 20:39ecc520fc0a 2.1
|\ \ summary: 2.1 development is done.
| | |
| o | changeset: 19:208f3f9236af 2.1-dev
| | | summary: Finish the 2.1 work.
| | |
| | o changeset: 18:4a024009a9d6 3.0-dev
| | | summary: More redesign work.
| | |
| | o changeset: 17:00c416888c25 3.0-dev
| |/| summary: Merge in changes from the 2.1 branch to keep the redesign current.
| | |
| o | changeset: 16:a57e781a0db1 2.1-dev
| | | summary: More 2.1 work.
| | |
| | o changeset: 15:ddeb65402a61 3.0-dev
| | | summary: More redesign work.
| | |
+---o changeset: 14:90f5d7a8af9a 3.0-dev
| | | summary: Merge in the fire fixes.
| | |
| o | changeset: 13:78a949b67bb9 2.1-dev
|/| | summary: Merge in the fire fixes.
| | |
o | | changeset: 12:6dfe9d856202
| | | summary: Oh no everything is on fire, fix it in the mainline.
| | |
| o | changeset: 11:86767671dcdb 2.1-dev
| | | summary: Smaller changes for 2.1.
| | |
| | o changeset: 10:25dec81d2546 3.0-dev
| | | summary: Work more on the redesign.
| | |
+---o changeset: 9:42c7d689fb24 3.0-dev
| | summary: Start working on a complete redesign.
| |
| o changeset: 8:3da99186ca7d 2.1-dev
|/ summary: Start working on 2.1.
|
o changeset: 7:9ba79361827d
| summary: Added tag 2.0 for changeset 755ed5c5e291
|
o changeset: 6:755ed5c5e291 2.0
|\ summary: Merge in the dev branch for 2.0.
| |
| o changeset: 5:44a833fcc838 2.0-dev
| | summary: Finish work on 2.0.
| |
| o changeset: 4:d7ba6aae1651 2.0-dev
|/| summary: Merge in the critical fix.
| |
o | changeset: 3:968049f1b33a
| | summary: Fix a critical bug on the main branch.
| |
| o changeset: 2:917869609b25 2.0-dev
| | summary: More work on the new version.
| |
| o changeset: 1:f95798b9cb2e 2.0-dev
|/ summary: Start working on version 2.0.
|
o changeset: 0:8a3fb044d3f4
summary: Initial commit.
他のヒント
これを考慮する必要があると思います:成功したgit分岐モデル。
私はgitの大ファンではありませんが、このモデルは水銀にも非常に便利です。