Mercurial Hg合并后提交消息,最佳实践?
我发现自己经常做以下事情:Mercurial Hg合并后提交消息,最佳实践?,mercurial,Mercurial,我发现自己经常做以下事情: C:\Code>hg pull pulling from http://server/FogBugz/kiln/Repo/Project/Rebuild/trunk searching for changes adding changesets adding manifests adding file changes added 2 changesets with 4 changes to 4 files (+1 heads) (run 'hg heads' t
C:\Code>hg pull
pulling from http://server/FogBugz/kiln/Repo/Project/Rebuild/trunk
searching for changes
adding changesets
adding manifests
adding file changes
added 2 changesets with 4 changes to 4 files (+1 heads)
(run 'hg heads' to see heads, 'hg merge' to merge)
C:\Code>hg merge
4 files updated, 0 files merged, 0 files removed, 0 files unresolved
(branch merge, dont forget to commit)
C:\Code>hg commit -m "Merged"
C:\Code>hg push
pushing to http://server/FogBugz/kiln/Repo/Project/Rebuild/trunk
searching for changes
remote: kiln: successfully pushed 2 changesets
我的问题是,在合并存储库中的请求后,要使用什么样的提交消息更好/更有用。在分布式版本控制系统中,人们有没有针对这类问题的最佳实践?没有一种方法,所以我一直在努力坚持这一点 在提交消息时: JU请记住,这些消息是将您连接到某个试图破译提交原因的人的唯一字符串 关键是提供一个对代码开发有用的说明。 因此,当有人使用hglog时,他对软件的开发过程有很好的评论 一些良好做法: 将其与您的bug管理系统链接:
[[offtopic,我们有时用它们作为一个对单词merge双关语的机会]您可以使用rebase扩展,因此
hg pull--rebase
会将您的回购重设为中央回购的提示。这样就不需要在拉取后进行合并
我为它添加了一个别名:
[alias]
pure = pull -u --rebase
这对我们很有用
更多细节见页面。对于普通的合并,您只使用一个存储库,我认为只使用“合并”就可以了。通常你甚至不知道所有被合并的东西,因为不管怎么说,这都是其他人的改变
有一次,我建议您在使用多个存储库时更加详细。如果您有一个develrepo和一个稳定的repo,并且您正在从stable中获取bug修复,我只想在合并中提到:“与stable合并”。这些合并往往更大,因此它有助于向后来的人解释它们。您可以通过以下方式将所有新添加的变更集提交消息收集到一个文件中:
$ hg log --rev 'reverse(p2():ancestor(p1(),p2())-ancestor(p1(),p2()))' \
--template '{desc}\n' \
> commit-message.txt
然后手动编辑commit-message.txt,最后将其用作日志消息:
$ hg commit -l commit-message.txt
只要消息中有“merg”,我们就很高兴能利用这个机会用欢闹来填充我们的mercurial日志。例如,我们使用了合并消息,如“房地产抵押贷款处于历史最低水平”或“合并格里芬电视制作”。听起来像我所做的。。。。我猜这会让我们两个人(以及所有和我一起工作的人!)可能没有做最佳实践……我想这些合并消息(和提交)是hg的一个缺陷。在subversion中,您拥有以前提交的日志消息,然后svn up正在进行自动合并,然后您可以使用正确的日志消息仅提交更改。我希望在hg的未来版本中,不仅有空的合并提交消息,而且在时间轴中根本没有事件!我们是否应该像建议的那样始终使用“hg-pull--rebase”?我错过什么了吗?请给我一个解释…-)。请注意,这与svn update具有相同的效果,这意味着您仍然在合并代码,这只是在后台完成的,没有安全网。如果合并因冲突而失败,您不能只是恢复并重试,您必须从.rej文件中挖掘更改。它还将您的更改与合并合并,因此您签入的某些更改也将是其他人的更改被合并。TL;DR不要害怕合并,它更安全。它不使用.rej文件。它将捆绑包保存在.hg文件夹中,如果您的操作失败,您可以将其解绑。我已经更新了我的帖子,添加了一个到RebaseProject的链接,它提供了更多细节。模拟到
svn更新
的是hg pull-u
。看一看。不要害怕尝试不同的东西。谢谢你的回复。同样,上面提到的fetch扩展的优点是它确实做到了这一点——准确地告诉您拉取和合并了什么repo。fetch扩展使用无意义的合并消息来混乱您的历史。只是要考虑一下。只是在我的下注背后插入一个理由:我认为PyFunc建议他们给出一个“为什么”是一个更好的主意。我喜欢的是“从生产部门引入bug修复”或“引入Jim的新功能”。fetch扩展附带mercurial,但它在默认情况下被禁用,这是有充分理由的。@Ry4an我明白你的意思,但大多数合并只是其他人的开发。这些提交中包含的内容已包含在日志中,并带有给定的修补程序。如果你正在和另外两个人合并的东西合并,那么合并可能是一个大泥球。如果你能简明扼要地说什么是合并的,那么这样做似乎是合理的,但至少在我的发展过程中,我不认为这种情况经常发生。@Robert s.还有什么选择呢?空话?是否存在回购协议,其中包含您可以向我们指出的良好合并消息?我们使用的是rebase扩展,如中所述。有关示例,请参阅@mergemessage谢谢您的回答。我们遵循一种非常类似的做法,效果非常好。我试图将我自己的信息建立在我需要回顾历史的案例上。通常,声明提交的主要目的的消息是我发现最有用的。除此之外的其他细节实际上可能会成为阻碍。