对于一个小型软件开发项目,我希望更改能遵循一个定义好的流程,其中集成分支仅包含“完整”的更改。这个想法源自我关于如何从Mercurial获取有用的历史日志的博客文章。然而,这不仅仅是关于生成日志,而是关于一种有结构的工作方式。
总之,这个想法是,一个代码库将拥有一个“集成”分支,该分支不会直接进行开发,任何工作都将在另一个分支上进行,当完成后将被合并到集成分支中 - 下面是一个粗略的例子,其中提交注释用大括号表示:
"integration"分支只允许合并和标记。这类似于我们在工作中开发(在基于服务器的非DVCS系统上)的方式,您可以在工作分支上进行更改,完成后(经过审核、测试等)将这些更改合并到集成分支中进行正式测试和发布。无论如何,我的问题是 - 我如何强制执行仅在工作分支上进行更改的策略,同时在集成分支上只允许合并或标记?我最初的想法是在
总之,这个想法是,一个代码库将拥有一个“集成”分支,该分支不会直接进行开发,任何工作都将在另一个分支上进行,当完成后将被合并到集成分支中 - 下面是一个粗略的例子,其中提交注释用大括号表示:
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
"integration"分支只允许合并和标记。这类似于我们在工作中开发(在基于服务器的非DVCS系统上)的方式,您可以在工作分支上进行更改,完成后(经过审核、测试等)将这些更改合并到集成分支中进行正式测试和发布。无论如何,我的问题是 - 我如何强制执行仅在工作分支上进行更改的策略,同时在集成分支上只允许合并或标记?我最初的想法是在
pre-commit
上添加钩子(不是precommit
或pretxncommit
,因为我认为这些会在您创建标记时触发)。如果您在集成分支上,该钩子将检查是否有两个父级,表示这是合并的结果,并在不是这种情况下失败。但是据我所知,当您克隆存储库时,钩子不会被复制。由于这将是一个项目特定的设置,因此不应在用户级别设置。那么,我如何阻止用户克隆存储库(从而丢失挂钩),直接在集成分支上进行更改,然后推送?"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这样的系统,我该如何执行此操作?
或者说,在使用分布式版本控制系统时,这不是正确的工作流程吗?
hg branch newbranch
,否则提交将失败。 - icabod