使用Mercurial,有一种简单的方法可以使用默认远程存储库中的tip文件来区分我的工作副本
题
当使用mercurial时,我希望能够使用我的默认远程存储库中的tip文件来区分文件的工作副本。有一个简单的方法吗?
我知道我可以做一个“hg incoming -p”看到即将发生的补丁变更集,但是直接看到特定文件的实际更改会很好,如果我做了最新的东西(或者我可能会推送的内容)出)。
我现在能想到的最简单的事情是创建一个小脚本来查看.hg / hgrc中的默认位置并使用curl下载文件(如果它是通过http,否则scp通过ssh,或者只是做一个直接差异,如果它在本地文件系统上),然后将工作副本或提示与该临时副本区分开来。
我正在努力向我的团队出售mercurial,我的一个团队成员今天提出了这个问题,他们可以使用他们的GUI工具在SVN中轻松完成。
解决方案
经过一番挖掘后,我遇到了 Rdiff扩展,其中包含大部分内容我想要它。
它没有mercurial,但它可以通过克隆存储库来安装:
hg clone http://hg.kublai.com/mercurial/extensions/rdiff
然后修改〜/ .hgrc文件以加载扩展名:
[extensions]
rdiff=~/path/to/rdiff/repo/rdiff.py
它有点古怪,因为它实际上修改了现有的“hg diff”。通过检测第一个参数是否是远程URL来命令。如果是,那么它将在您的本地仓库(而不是工作副本)中针对您的提示文件区分该文件。这是因为远程回购首先在参数中,它与我期望的相反,但你可以通过“ - 反向”。到hg diff命令切换它。
我可以看到这些是扩展的潜在增强功能,但是现在,我可以在我的starup文件中使用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>
其他提示
你可以尝试在本地拥有两个存储库 - 一个用于传入的东西,一个用于传出。然后你应该可以用任何工具做差异。见这里:
http://weblogs.java.net/blog /kohsuke/archive/2007/11/using_mercurial.html
要扩展Lars方法(由于某种原因注释不起作用),您可以使用 diff
命令上的 -R
选项来引用本地存储库。这样您就可以使用在 hg
使用模板,您可以获得所有已更改文件的列表:
hg incoming --template {files}