首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ubuntu子系统上的Git和KDiff3

Ubuntu子系统上的Git和KDiff3
EN

Ask Ubuntu用户
提问于 2018-04-03 12:38:58
回答 1查看 3.4K关注 0票数 2

我在Git中使用KDiff3 (可执行kdiff3.exe)作为git difftool,并且在Ubuntu子系统下遇到了使用它的问题。

Ubuntu子系统已经安装了Git。因此,我从Git Bash复制了Git全局配置(相应地更改路径):

代码语言:javascript
复制
[user]
    email = ...
    name = ...

[merge]
    tool = kdiff3

[mergetool "kdiff3"]
    path = "/mnt/c/Program Files/KDiff3/kdiff3.exe"

[diff]
    tool = kdiff3
    guitool = kdiff3

[difftool "kdiff3"]
    path = "/mnt/c/Program Files/KDiff3/kdiff3.exe"

[core]
    autocrlf = true

然后我遇到了一个错误:

代码语言:javascript
复制
Opening of these files failed

- [filename].[extension] (A)

程序窗口正确打开,但只显示右侧文件(B)。

这个错误每次都是可重复的。是什么导致了这个错误?

EN

回答 1

Ask Ubuntu用户

发布于 2021-09-14 06:10:11

今天编辑的一个老问题。现有的答案可能有效,但我也能想到另外两种可能性。

首先,OP使用Windows子系统Linux (WSL)在Windows中运行Ubuntu。他们以前在kdiff3.exe中使用Git,但他们希望将工作流程转换为WSL/Ubuntu中的Linux。

当您在正确的轨道上改变从C:\.../mnt/c/...的扩散工具的路径时,还有更多的事情要做。因为WSL允许您以这种方式运行Windows可执行文件,所以它实际上是试图运行kdiff3.exe。但是,由于您(当时)使用的是Linux版本的git,所以很自然地使用Linux路径来比较文件。

为了扩展@oikku在另一个答案中说的话,因为kdiff3.exe是一个Windows可执行文件,它只理解Windows结构(即k.a)。C:\...)。当Linux将Linux路径传递给它时,Windows可执行文件(正确地)阻塞了,给出了错误Opening of these files failed

例如:

代码语言:javascript
复制
# What Windows kdiff3 expected:
kdiff3.exe C:\file1.txt.rev1 C:\file1.txt.rev2
# What Windows kdiff3 got from Linux Git:
kdiff3.exe /mnt/c/file1.txt.rev1 /mnt/c/file1.txt.rev2

至少在今天,还有两种可能的解决办法:

  • 首先,应该可以围绕kdiff3.exe编写一个包装器脚本,对传递给它的参数进行路径转换。您可以使用默认安装在WSL/Ubuntu中的wslpath命令(至少现在是这样)来执行目录转换。我想不出为什么这是行不通的;您只需要确保将所有可能的参数从包装器脚本以它所期望的形式传递给命令。
  • 第二,您可以安装Kdiff3的Linux,但是要知道它需要一个GUI,(在这个答案的时候) WSL并不直接支持它。这意味着您需要在WSL/Ubuntu中安装Windows服务器和X库。在Stack站点上已经有很多关于这个主题的其他问题/答案,所以我不会在这里重复它们。还请注意,Windows 11将包括WSLg,这是一个允许您在WSL下使用Linux应用程序的特性。因此,这大概会使它在可用时变得容易得多。
票数 0
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/1021601

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档