使用Mercurial,有一种简单的方法可以将我的工作副本与默认远程存储库中的技巧文件进行比较

时间:2020-03-06 14:57:41  来源:igfitidea点击:

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

我知道我可以执行" hg入站-p"来查看即将来临的更改的补丁集,但是最好直接查看对某特定文件的实际更改,如果我对最新的东西(或者我可能要推出的东西)。

我现在想到的最简单的方法是创建一个小脚本,以查看.hg / hgrc中的默认位置,然后使用curl下载文件(如果文件位于http上,否则通过ssh进行下载,或者只是执行如果在本地文件系统上,则直接进行比较),然后将工作副本或者技巧与该临时副本进行对比。

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

解决方案

我们可以尝试在本地拥有两个存储库,一个存储库用于传入的内容,另一个存储库用于传出的内容。然后,我们应该可以使用任何工具进行比较。看这里:

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

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

经过一番挖掘之后,我遇到了Rdiff扩展,它可以完成我想要的大部分功能。

它不是随随便便附带的,但是可以通过克隆存储库来安装:

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

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

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

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

我可以看到这些是对该扩展程序的潜在增强,但是现在,我可以在我的starup文件中使用bash / zsh shell函数来解决它们。它会临时签入我的工作副本(由汞交易保留,以便可以回滚),执行反向diff,然后回滚事务以使事情恢复原样:

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>

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

hg incoming --template {files}