使用Mercurial,如果经常提交中间状态,如何使用固定修订进行区分?

时间:2010-07-08 10:22:28

标签: mercurial dvcs

使用Mercurial,如果我执行了hg pullhg up,现在本地仓库和工作目录都是最新的。

如果我经常提交,比如说1天之后,然后是2天之后,并且想要与现在的版本区分开来怎么办?

否则,diff始终与之前提交的版本进行比较。

我可以使用铅笔和纸张立即记下修订号,比如4117,然后是1天后,2天后,以及我确定之前的任何时间,并推送到远程中央仓库,做一个

hg vdiff -r 4117      

(使用vdiffdiff)。但是,有没有办法让Mercurial以某种方式记住这个数字,而不是记住这个“神奇数字”4117?这样,hg vdiff可以看到针对已提交代码的次要更改之间的差异,但是在推送到远程仓库之前有一个显示所有更改的差异。

(或者,如果有一个命令显示自上次提取以来的修订号,也应该显示4117,那么在bash上我们可以执行hg vdiff -r `hg --what-is-last-pull`

之类的操作

更新: hg out --patch是否会显示推送到远程仓库的差异?如果是这样,也许它可以达到目的而不用关心“神奇的数字”。但是如何使用kdiff3或任何其他diff工具显示补丁差异?此外,似乎我们可以hg out,如果我们看到4118,4119,4120,那么我们知道我们是否hg vdiff -r ___我们应该使用(4118 - 1)这是4117。

更新2:实际上,hg out --patch显示本地存储和远程存储之间的差异,因此它很接近,但与工作目录和本地目录之间的差别不完全相同或远程回购。

3 个答案:

答案 0 :(得分:3)

如果要标记修订版,可以使用书签扩展名。它与mercurial一起发货。文档可用here

在你的情况下,

hg pull -u
hg bookmarks lastpull
..hack..hack..
hg ci -m new-hack
hg diff -r lastpull:tip
hg bookmarks -d lastpull

答案 1 :(得分:2)

使用多个克隆进行此操作。从远程仓库克隆时,最初使用clone -U创建一个根本没有工作目录文件的克隆。然后在本地再次克隆,例如:

$ hg clone my-local-clone-with-no-working-files my-working-clone

执行您的提交并在my-working-clone中工作,然后您可以随时查看my-local-clone-with-no-working文件中的tip以查看您最后提取的内容从服务器是。如果你想获得幻想,可以为:

创建一个shell别名
hg diff -r $(hg -R $(hg root)/../my-local-clone-with-no-working-files id -i -r tip)

将比较你运行它的repo的工作目录(my-working-clone)和你上次从服务器中提取的内容的提示。

这不需要额外的磁盘空间是值得的,因为本地克隆使用了my-local-clone-with-no-working-files没有工作目录文件的硬链接。

答案 2 :(得分:0)

您可以使用本地标记替换笔和纸:hg tag -l -r <revision number on paper> tagname。注意-l,它使标记成为本地,这意味着它不会通过推拉传递。您也可以hg tag -l --remove tagname删除此标记。