13

使用 mercurial 时,我希望能够将文件的工作副本与默认远程存储库中的提示文件进行比较。是否有捷径可寻?

我知道我可以做一个“hg incoming -p”来查看即将到来的补丁集,但是如果我拉一下我会直接看到一个特定文件的实际更改会很好最新的东西(或者我可能会推出的东西)。

我现在能想到的最简单的事情是创建一个小脚本,查看 .hg/hgrc 中的默认位置并使用 curl 下载文件(如果它通过 http,否则通过 ssh scp,或者只是做一个如果它在本地文件系统上,则直接 diff),然后将工作副本或提示与该临时副本进行比较。

我正在尝试向我的团队推销 mercurial,我的一位团队成员今天提出了这一点,因为他们可以使用他们的 GUI 工具在 SVN 中轻松完成。

4

4 回答 4

5

经过一番挖掘,我发现了Rdiff 扩展,它可以满足我的大部分需求。

它不附带 mercurial,但可以通过克隆存储库来安装:

hg clone http://hg.kublai.com/mercurial/extensions/rdiff 

然后修改您的 ~/.hgrc 文件以加载扩展名:

[extensions] 
rdiff=~/path/to/rdiff/repo/rdiff.py

这有点古怪,因为它实际上通过检测第一个参数是否是远程 URL 来修改现有的“hg diff”命令。如果是,那么它将将该文件与本地存储库中的提示文件(而不是工作副本)进行比较。这是因为远程仓库首先出现在参数中,这与我期望的相反,但您可以将“--reverse”传递给 hg diff 命令来切换它。

我可以看到这些是对扩展的潜在增强,但现在,我可以在我的启动文件中使用 bash/zsh shell 函数来解决它们。它对我的工作副本进行临时签入(由 mercurial 事务保存,因此可以回滚),执行反向差异,然后回滚事务以将事物恢复到原来的状态:

hgrdiff() {
    hg commit -m "temp commit for remote diff" && 
    hg diff --reverse http://my_hardcoded_repo $* &&
    hg rollback      # revert the temporary commit
}

然后调用它:

hgrdiff <filename to diff against remote repo tip>
于 2008-10-02T20:57:34.837 回答
2

您可以尝试在本地拥有两个存储库 - 一个用于传入的内容,一个用于传出。然后你应该能够使用任何工具进行差异化。看这里:

http://weblogs.java.net/blog/kohsuke/archive/2007/11/using_mercurial.html

于 2008-10-01T05:30:08.600 回答
2

要扩展 Lars 方法(由于某种原因注释不起作用),您可以使用命令-R上的选项diff来引用本地存储库。这样您就可以使用您在其中指定的相同差异应用程序hg

于 2008-10-01T13:38:52.933 回答
0

使用模板,您可以获得所有已更改文件的列表:

hg incoming --template {files}
于 2010-07-29T21:19:14.947 回答