Svn 使用Mercurial,是否有一种简单的方法将我的工作副本与默认远程存储库中的tip文件区分开来

Svn 使用Mercurial,是否有一种简单的方法将我的工作副本与默认远程存储库中的tip文件区分开来,svn,http,mercurial,diff,scp,Svn,Http,Mercurial,Diff,Scp,使用mercurial时,我希望能够将文件的工作副本与默认远程存储库中的tip文件区分开来。有没有一个简单的方法可以做到这一点 我知道我可以做一个“hg incoming-p”来查看即将到来的补丁集更改,但是如果我拉取最新的东西(或者我可能要推出的东西),直接查看特定文件的实际更改会更好 现在我能想到的最简单的事情是创建一个小脚本,查看.hg/hgrc中的默认位置,并使用curl下载文件(如果是通过http,否则通过ssh进行scp,或者如果是在本地文件系统上,则直接进行diff),然后将工作副

使用mercurial时,我希望能够将文件的工作副本与默认远程存储库中的tip文件区分开来。有没有一个简单的方法可以做到这一点

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

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


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

您可以尝试在本地拥有两个存储库,一个用于输入,另一个用于输出。然后,您应该能够使用任何工具进行diff。请看这里:


要扩展LAS方法(由于某些原因,注释不起作用),可以使用
diff
命令上的
-R
选项引用本地存储库。这样,您就可以使用您在
hg

中指定的相同的diff应用程序。经过一些挖掘,我发现了一个可以实现我所希望的大部分功能的应用程序

它不随mercurial提供,但可以通过克隆存储库来安装:

hg clone http://hg.kublai.com/mercurial/extensions/rdiff 
然后修改~/.hgrc文件以加载扩展名:

[extensions] 
rdiff=~/path/to/rdiff/repo/rdiff.py
这有点奇怪,因为它实际上通过检测第一个参数是否是远程URL来修改现有的“hg diff”命令。如果是,则会将该文件与本地回购中的tip文件(而不是工作副本)区分开来。这是因为远程repo是参数中的第一个,它与我预期的相反,但是您可以将“-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>
hgrdiff

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

hg incoming --template {files}