web-dev-qa-db-ja.com

「flatpak run org.gnome.meld」をgit diff.toolおよびmerge.toolとして構成する方法

meldのローカルインストールがめちゃくちゃになっているため、cairoを使用できません。私はすでに障害をバグとして報告することを含めて、ある程度の時間を費やしてきましたが、メンテナはそれは正しいと思われるバグではないと述べています。したがって、私は別のより有望なアプローチを試して、flatpakインストールを使用したいと思います。 flatpak run org.gnome.meldmeldを通常どおり使用できますが、問題は引数の受け渡しにあるようです。

単純なgit config --global diff.tool "flatpak run org.gnome.meld"により、コミットされていない変更を含むgit difftoolが原因で失敗する

git config option diff.tool set to unknown tool: flatpak run org.gnome.meld
Resetting to default...

This message is displayed because 'diff.tool' is not configured.
See 'git difftool --tool-help' or 'git help config' for more details.
'git difftool' will now attempt to use one of the following tools:
meld opendiff kdiff3 tkdiff xxdiff kompare gvimdiff diffuse diffmerge ecmerge p4merge araxis bc codecompare emerge vimdiff

Viewing (1/1): 'a'
Launch 'meld' [Y/n]?

トラブルを避けるためにスクリプトを作成しました

#!/bin/sh
flatpak run org.gnome.meld "$@"

~/bin/で、chmod +x ~/bin/meldで実行可能にしました。 ~/bin/は私のPATHの最初のものであり、which meldに基づいて受け取りました。

次のシナリオの後

> cd $(mktemp -d)
> git init .
Leeres Git-Repository in /tmp/tmp.2RFxjgBbQ5/.git/ initialisiert
> echo 1 > a
> git add a
> git commit -m "Initial commit"
[master (Basis-Commit) 997fe0d] Initial commit
 1 file changed, 1 insertion(+)
 create mode 100644 a
> echo 2 > a
> git difftool

Viewing (1/1): 'a'
Launch 'meld' [Y/n]? 

meldは、どちらも存在しない/tmp/cKSwbn_a/home/[user]/a(ユーザーが難読化)を表示するために起動されます。

私はDockerに関連する他のあまり快適でない回避策を手元に持っているので、このアプローチがどのように機能するかを理解することに主に興味があります。

1
Karl Richter

Git構成変数diff.toolは、デフォルトで使用されるdiffツールのnameのみを指定します。呼び出すコマンドdifftool.<tool>.cmdで指定します。 ( git-difftool(1) のマニュアルページを参照してください。)

議論したように、 ここ (構成例付き)、flatpak run org.gnome.meldを呼び出すときに、/tmpによって作成されたgit difftoolの下のパスへのアクセスをMeldに与える方法がいくつかあります。

  • --file-forwardingオプションを使用して、ファイルをドキュメントストアにエクスポートします。 (注:これはディレクトリをエクスポートしないため、git tool --dir-diffはこの方法では機能しません。)
  • これらのファイル/ディレクトリへの直接アクセスを許可するには、--filesystem=FSオプションを使用します。
1
David Ward