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

问题描述 投票:0回答:3

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

version-control merge diff blame
3个回答
6
投票

捆绑的 gitk 工具并不是真正的合并工具,但它会显示冲突的行,红色和蓝色以及前面的“+”,你可以在其中任何一个上右击->“显示这条线的原点”,去到引入该行的提交:

Screenshot

您可以运行您的 mergetool,或者只是并行运行带有 diffmarks 的文本编辑器


1
投票

所以您真正想要的是一个可以轻松识别您的更改的工具 相对于其他人在合并冲突中的变化,而不是实际识别 每行的作者(这将是实现这一目标的手段),对吧?

如果我没理解错的话,我有一些相对好的消息:它 可以用 git + kdiff3 来完成。对于合并,您可以使用

git mergetool
(您可以将其配置为使用 kdiff3)。但是本机不支持 如果在进行交互式变基时遇到合并冲突,那么为此 需要一些手动脚本。

我不会自己编写简单的合并冲突示例,而是使用 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.


-4
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.