与Mercurial相比:如何获得更新&保存到正常工作?

时间:2015-04-21 21:58:11

标签: merge mercurial beyondcompare hgrc

我正在尝试使用mercurial配置beyondcompare来设置多个工作流程。

目前我可以这样做:

  • 启动hg bcomparehg bcompare --rev <something>
  • 对右侧的文件进行一些更改
  • 远远超出比较
  • 超越比较
  • 刷新我的编辑器/ IDE
  • 在编辑器/ IDE中进行更改
  • 重新开始比较

我想做的是:

  • 启动hg bcomparehg bcompare --rev <something>
  • 对右侧的文件进行一些更改
  • 远远超出比较
  • 刷新我的编辑器/ IDE
  • 在编辑器/ IDE中进行更改
  • 超越比较刷新

在这个工作流程中,这个工作流程并不起作用,但我似乎无法弄清楚它是否是无法比拟的,或者是混乱的东西。我可以看到,在比较右侧窗格中的文件位于以下目录中:/tmp/extdiff.MIGT6x/dir

这个目录来自哪里?有没有一种方法可以让我在修订版之间做出完全差异(我知道这会更慢)?

另外,有没有办法可以超越 - 比较保存将文件写入真实位置并超越比较刷新才能正常工作?

我按照Beyond Compare site

中的说明设置了超比较
[extensions]
hgext.extdiff =

[extdiff]
cmd.bcompare =

[merge-tools]
bcomp.executable = /usr/bin/bcompare
bcomp.args = $local $other $base $output
bcomp.priority = 1
bcomp.premerge = True
bcomp.gui = True

enter image description here

2 个答案:

答案 0 :(得分:1)

&#39; extdiff&#39;扩展(这是我希望您能够在bcompare中显示您的更改所使用的),使用&#h; status&#39;检查2个修订版之间(或当前工作目录和修订版之间)的文件有何不同。

然后将所有与两个临时目录不同的文件复制并调用bcompare(或任何其他difftool)来比较这两个目录。

这种方法的好处:

  • 只需要比较少量文件(因此difftool本身并不需要遍历所有文件)
  • 没有必要为每个difftool添加Mercurial支持,这些工具只需要支持diffing 2目录

当然,缺点是difftool内部的编辑不会在您的存储库中显示效果。 换句话说:它不可能以你想要的方式做到这一点。

答案 1 :(得分:0)

Mathiasdm在their answer中所说的是正确的,因为HG会创建临时文件,然后告诉Beyond Compare启动差异。

如果您仍希望保存对临时文件所做的编辑,最好的选择是使用// Populate class that implements IComparable for custom sorting on Month List<SortedMonth> lstPivot = new List<SortedMonth>(); foreach (DataRow row in dt.Rows) { lstPivot.Add( new SortedMonth { MONTH = new Month { MonthName = row["MONTH"].ToString().Trim(), MonthNumber = !row.IsNull("MONTH") ? DateTime.ParseExact(row["MONTH"].ToString().Trim(), "MMMM", CultureInfo.CurrentCulture).Month : 0 } }); } public class SortedMonth: IComparable { public Month MONTH { get; set; } public int CompareTo(object obj) { return 0; } } //[Serializable] public class Month : IComparable { public string MonthName { get; set; } public int MonthNumber { get; set; } public override string ToString() { return MonthName; } public override bool Equals(object obj) { Month month = obj as Month; if (month != null) { return MonthNumber.Equals(MonthNumber); } else { return false; } } public override int GetHashCode() { return MonthNumber.GetHashCode(); } public int CompareTo(object obj) { return MonthNumber.CompareTo(((Month)obj).MonthNumber); } } 命令并将其指向回购中的现有文件。话虽这么说,如果您只想编辑当前工作文件,您只需编辑左侧(工作副本)并直接保存更改。除此之外,没有办法迫使Beyond Compare对不是临时文件的文件进行差异,因为文件是由HG生成的。