合并/差异工具,可以在版本控制下的文件中显示作者(支持责备或注释)

时间:2013-02-14 20:37:08

标签: version-control merge diff blame

合并文件时,显示每行的作者会很有帮助(对我来说)。是否有支持它的差异或合并工具?

3 个答案:

答案 0 :(得分:3)

捆绑的gitk工具实际上不是一个合并工具,但是它显示了前面有红色和蓝色以及“+”的冲突线,你可以在任何一个上右键单击>“显示此行的原点” ,转到引入该行的提交:

Screenshot

您可以运行mergetool,也可以只运行带有diffmarks的文本编辑器

答案 1 :(得分:1)

所以你真正想要的是一个可以轻松识别你的变化的工具 相对于其他合并冲突的变化,而不是实际识别 每一行的作者(这将是实现这一目的的意思),对吧?

如果我理解正确的话,我会有一些比较好的消息:它 可以使用git + kdiff3完成。对于合并,您只需使用git mergetool (您可以配置为使用kdiff3)。但它本身不受支持 如果在进行交互式rebase时遇到合并冲突,那么为此 需要一些手动脚本。

我将使用,而不是编写我自己的简单合并冲突示例 http://www.gitguys.com/topics/merging-with-a-conflict-conflicts-and-resolutions/ 作为基础。按照该页面git merge test。从合并后 命令我通过运行不同的命令从该示例中略微偏离 (但基本上做同样的工作)。我会先做所有的手动步骤。

所以我们有一个合并冲突,git插入了两者的内容 以<<<<<<<...>>>>>>>格式向文件提供源, 我根本不喜欢它,甚至从不考虑它。 相反,我使用我最喜欢的合并工具kdiff3。

首先,我们需要找到所涉及的版本。

$ git ls-files -u
100644 b0ed415d15862ac5582b51e4de65528e86934cd2 1       README
100644 56300e3ac4e4521c3500618a301bb2ab2d6a52f5 2       README
100644 9585db7d9c2d9ca05075f67a878f2554886d7b1a 3       README
$

根据我们可以执行三向合并的信息:

$ git cat-file blob b0ed415d15862ac5582b51e4de65528e86934cd2 > v1
$ git cat-file blob 56300e3ac4e4521c3500618a301bb2ab2d6a52f5 > v2
$ git cat-file blob 9585db7d9c2d9ca05075f67a878f2554886d7b1a > v3
$ kdiff3 -o merge_result v1 v2 v3 &
[2] 18394
$

其中提供了以下视图,您可以从中选择哪个祖先 你想从中合并。

kdiff3 screenshot

后记(如果您对合并结果感到满意) 你需要

$ rm v1 v2 v3
$ mv merge_result README
$ git add README

上述所有手动步骤均使用git mergetool自动完成。 那么为什么要展示这一切呢?好吧,因为如果你得到一个相应的 在git rebase -i期间发生冲突,然后必须以这种方式进行(在运行git rebase --continue之前)。

在这个小例子中,只有一个冲突 线,所以它没有显示更多典型的情况,其中很多行 自动解决,让您只需手动解决 那些没有自动完成的。 一个更现实的例子可能看起来更像是:

kdiff3 screenshot

请注意,在合并结果中,您现在可以清楚地看到C行的来源 自动解决了。我认为这是你要求获取每一行的作者时所要求的,对吧? <<<<<<<...>>>>>>>文本中完全没有该信息(很难/不可能发现你应该在hello函数中更新打印的字符串)。

我不能高度推荐kdiff3。使用这样的图形合并工具与文件中混合内联的两个来源的某些行相比,就像使用excavatorspade一样。

答案 2 :(得分:-5)

没有。而且,我认为,永远不会 - 当我们合并时,我们会考虑内容,而不是作者身份