11

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

4

3 回答 3

6

捆绑的 gitk 工具并不是真正的合并工具,但它显示了红色和蓝色的冲突线以及前面的“+”,您可以在其中任何一个上单击右键->“显示该行的来源”,转到引入该行的提交:

截屏

你可以运行你的合并工具,或者只是一个并行的带有差异标记的文本编辑器

于 2014-10-22T07:11:02.527 回答
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 截图

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

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

上面的所有手动步骤都是使用 自动完成的git mergetool。那么为什么要展示所有这些呢?好吧,因为如果您在 期间遇到相应的冲突git rebase -i,则必须以这种方式完成(在运行之前git rebase --continue)。

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

kdiff3 截图

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

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

于 2013-02-15T23:54:12.873 回答
-5

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

于 2013-02-15T06:13:29.663 回答