git kdiff3 no subsistema Ubuntu

1

Eu uso kdiff3 no git bash como git difftool e eu encontrei um problema para usá-lo no subsistema Ubuntu. O subsistema Ubuntu já instalou o Git. Então eu copiei minha configuração global do Git do Git Bash (mudando o caminho de acordo):

[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

Então encontrei um erro:

Opening of these files failed

- [filename].[extension] (A)

A janela do programa foi aberta corretamente, mas somente o arquivo do lado direito (B) foi exibido.

O erro é repetível a cada vez. Alguém sabe o que pode causar esse erro?

    
por garnekzupy 03.04.2018 / 14:38

1 resposta

2

O problema é que o git usa arquivos tmp durante essas operações e os caminhos para os arquivos tmp podem ser caminhos absolutos. Você pode ver quais caminhos estão alterando o cmd do diff para ecoar.

[difftool "kdiff3"]
    path = "/mnt/c/Program Files/KDiff3/kdiff3.exe"
    cmd = "echo $LOCAL $REMOTE"

A saída será algo como

/tmp/BPI1A2_Layout.js Layout.js

O KDiff3 do Windows pode acessar o Layout.js porque é um caminho relativo. O caminho /tmp/BPI1A2_Layout.js não existe no Windows, pelo que o KDiff3 não consegue encontrar o ficheiro.

Você pode usar o TMPDIR não padrão para comandos git.

TMPDIR=".tmp" git difftool

Agora os caminhos seriam

.tmp/BPI1A2_Layout.js Layout.js

Ambos agora são relativos sob a mesma estrutura de diretórios que o Windows pode acessar e o kdiff funciona conforme o esperado.

Se não há problema em usar o diretório .tmp dentro da pasta do projeto, a solução é criar um alias

alias git="TMPDIR=.tmp git"
    
por oikku 26.09.2018 / 08:51