在kDiff3中完成合并后,如何触发自动命令



假设我处于一个rebase(交互式或其他(的中间,并且检测到一个合并冲突。

合并停止,我运行(在命令行上(git mergetool,它已配置为使用kdiff3作为其合并管理器。

我在KDiff3接口中选择了合并解决方案,并准备继续。

在之后的之前的`的某个点上;我现在已经提交了合并的更改(并且将继续进行下一次提交(";,我想执行一个自定义命令,该命令显示生成文件的当前状态。

有什么地方可以让我自动实现这一点吗要么在git本身中,要么在kDiff中。


其他点的类似钩子是git中的textconv命令钩子,或KDiff3中的预处理命令。

乐此不疲"得到文件路径"的命令;(如textconv(或";将具有文件的当前状态的命令通过管道传送到其中";(如kDiff预处理器(。

信用:所有这些都是@Joachim的想法,在他对我的问题的评论中,如上所述。

如何实际实现这一点的细节主要来自于此:https://blog.beardhatcode.be/2018/03/your-own-git-mergetool.html,这提供了对";命令接口";因为合并脚本看起来像。


根据@Joachim的建议,您可以通过在自己的脚本中封装kdiff exe来实现这一点,该脚本也执行合并后操作,然后将设置为mergetool

实现这一点的解决方案的全部血腥细节可以在我的Github中找到:https://github.com/Brondahl/AzureAdfDataflowGitPrettifier

最有趣的文件是:

  • kdiff3包装bash脚本
  • 负责将git配置为的bash脚本使用自定义合并脚本

作为一个整体,这是一个解决方案,用于在每次diff或比较操作之前(无损地(对存储库中某个文件类型的所有实例进行美化,然后在使用此美化版本的任何写入操作之后(再次无损地(再次对其进行美化。。。这实际上只是kdiff3合并


其中最关键和最具体的步骤可能是:

在kdiff包装bash脚本中:

  • kdiffPath=$(git config --get mergetool.kdiff3.path)以便获得当前kdiff路径
  • applyPreProcessorConfig="PreProcessorCmd=.\dataflowGitDiffTool\AdfDataflowFilePrettifier.exe -prettify -fromStdIn",我们将在调用它时将其传递给kdiff,以告诉它使用pretifier
  • invokeKDiff=("$kdiffPath" "$@" "--cs" "$applyPreProcessorConfig"),然后是"${invokeKDiff[@]}",以便成功地将脚本($@(中的所有参数传递给kdiff
  • mergeOutput=$5,以便知道现在经过修饰的合并后输出文件在哪里,我们应该对其进行丑化

然后以下内容配置我的git-config以适当地使用脚本:

git config merge.tool kdiff3_with_uglification
git config mergetool.keepBackup false
git config mergetool.kdiff3_with_uglification.cmd './dataflowGitDiffTool/kdiff3_with_uglification.sh "$BASE" "$LOCAL" "$REMOTE" -o "$MERGED"'

它生成一个.gitconfig文件,如下所示:

[merge]
tool = kdiff3_with_uglification
[mergetool]
keepBackup = false
[mergetool "kdiff3_with_uglification"]
cmd = ./dataflowGitDiffTool/kdiff3_with_uglification.sh "$BASE" "$LOCAL" "$REMOTE" -o "$MERGED"

相关内容

  • 没有找到相关文章

最新更新