小規模なソフトウェア開発の場合、定義されたプロセスに従って変更を行いたいと考えています。これにより、統合ブランチには「完全な」変更のみが含まれます。このアイデアは、Mercurial から有用な履歴ログを取得することに関する私のブログの投稿に由来しています。ただし、これは単にログを生成することではなく、構造化された作業方法に関するものです。
要約すると、リポジトリには直接開発されない「統合」ブランチがあり、代わりにすべての作業が別のブランチで実行され、完了したら統合ブランチにマージされるというものです-以下は大まかな例です、中括弧内のコミット コメント:
O {Implemented new feature X}
|\
| O {...}
| |
| O {...}
|/
O {Fixed bug 002}
|\
| O {...}
|/
O {added tag "Release 1.0"}
|
O {Fixed bug 001}
|\
| O {...}
|/
O -- integration branch
/
O -- default branch
「統合」ブランチは、マージ先とタグ付けのみを許可します。
これは、職場で (サーバーベースの非 DVCS システムで) 開発を行う方法に似ています。この場合、作業ブランチに変更を加え、完了 (およびレビュー、テスト) したら、それらの変更をマージします。正式なテストとリリースのための統合ブランチ。
とにかく、私の質問は、統合ブランチではマージまたはタグ付けのみを許可しているのに対し、作業ブランチでのみ変更を行うというポリシーをどのように適用するのですか?
私の最初の考えは、フックを追加することですpre-commit
(not precommit
or pretxncommit
、たとえば、タグを作成するときにこれらが起動されると思います)。フックは、統合ブランチにいた場合、これがマージの結果であることを意味する 2 つの親があることを確認し、そうでない場合は失敗します。
ただし、私が理解しているように、リポジトリを複製するときにフックはコピーされません。これはプロジェクト固有の設定になるため、ユーザー レベルでは設定しないでください。では、ユーザーがリポジトリのクローンを作成し (したがってフックを失う)、統合ブランチで直接変更を加えてからプッシュするのをどのように停止すればよいでしょうか?
hg clone main_repo
hg update integration_branch
(make changes without starting a new branch)
hg commit -m "I made some changes"
hg push
また、Bitbucket などのシステムを使用する場合、これをどのように強制できますか?
あるいは、これは DVCS を使用する場合のワークフローへの正しいアプローチではありませんか?