Martin Vegter Asked: 2017-11-26 02:05:08 +0800 CST2017-11-26 02:05:08 +0800 CST 2017-11-26 02:05:08 +0800 CST git:仅在 GUI 中使用视觉差异(融合) 772 我知道我可以指定要用于的外部 diff 命令git diff: [diff] external = 但是当我登录控制台(没有X)时,这会失败,因为我的视觉差异无法打开显示(显然) 我如何告诉 git 仅在登录 GUI/X 时才使用视觉差异? diff git 2 个回答 Voted Mats Wichmann 2017-11-29T06:48:51+08:002017-11-29T06:48:51+08:00 有几种简单的方法可以做到这一点......要在“外部”git 执行它,您可以将您的 difftool 程序(您可能需要 difftool 而不是 diff 来启动视觉差异)设置为一个包装脚本,以确定您是否是是否在图形环境中并启动适当的程序;或“内部”git,您可以执行一些特定于环境的条件包含(includeIf)。 Best Answer Arkadiusz Drabczyk 2017-12-01T12:11:42+08:002017-12-01T12:11:42+08:00 您要求,an answer drawing from credible and/or official sources所以我将在此答案中引用一些官方文档。 首先,我们需要找到一种方法来确定我们是否在X 会话内部运行。例如,我们可以通过检查是否$DISPLAY 设置了变量来做到这一点。如中所述man X: 展示 这是唯一的强制环境变量。它必须指向 X 服务器。请参阅上面的“显示名称”部分。 但是,这可能不是一个好主意,因为 DISPLAY即使在X. 在这个答案中提出了一个更好的方法: if xhost >& /dev/null ; then echo "Display exists" else echo "Display invalid" ; fi 你应该已经在你的机器上安装了一个名为的程序xhost,确保你有它: $ type -a xhost xhost is /usr/bin/xhost 现在,我们可以设置diff.external指向一个包装器,如果我们在里面,它将调用外部差异,如果我们不在里面X,则运行默认 git diff机制X。不幸的是,我无法想出一种简单的方法来运行默认值git diff, diff.external所以让我们改为创建一个别名来git临时diff.external使用-c. 如中所述man git: -c <名称>=<值> 将配置参数传递给命令。给定的值将覆盖配置文件中的值。预期的格式与 git config 列出的格式相同(子键以点分隔)。 请注意,在 git -c foo.bar ... 中省略 = 是允许的,并将 foo.bar 设置为布尔真值(就像 [foo]bar 在配置文件中一样)。包括等于但具有空值(如 git -c foo.bar= ...)将 foo.bar 设置为空字符串。 它会是这样的: $ git -c diff.external=diff-wrapper.sh ... 总结一下: 创建一个名为的脚本~/git-wrapper.sh并替换 <YOUR_DIFF_WRAPPER>为您想要的任何内容: #!/usr/bin/env sh if xhost >/dev/null 2>&1 then git -c diff.external=<YOUR_DIFF_WRAPPER> "$@" else git "$@" fi 设置一个可执行位: $ chmod +x ~/git-wrapper.sh 在您的 shell 启动文件中设置别名,例如~/.bashrc并重新加载 shell: alias git=~/git-wrapper.sh 正常使用git: $ git diff <YOUR_DIFF_WRAPPER>如果您在里面X,它将使用它,并将git-diff在X.
有几种简单的方法可以做到这一点......要在“外部”git 执行它,您可以将您的 difftool 程序(您可能需要 difftool 而不是 diff 来启动视觉差异)设置为一个包装脚本,以确定您是否是是否在图形环境中并启动适当的程序;或“内部”git,您可以执行一些特定于环境的条件包含(includeIf)。
您要求,
an answer drawing from credible and/or official sources
所以我将在此答案中引用一些官方文档。首先,我们需要找到一种方法来确定我们是否在
X
会话内部运行。例如,我们可以通过检查是否$DISPLAY
设置了变量来做到这一点。如中所述man X
:但是,这可能不是一个好主意,因为
DISPLAY
即使在X
. 在这个答案中提出了一个更好的方法:你应该已经在你的机器上安装了一个名为的程序
xhost
,确保你有它:现在,我们可以设置
diff.external
指向一个包装器,如果我们在里面,它将调用外部差异,如果我们不在里面X
,则运行默认git diff
机制X
。不幸的是,我无法想出一种简单的方法来运行默认值git diff
,diff.external
所以让我们改为创建一个别名来git
临时diff.external
使用-c
. 如中所述man git
:它会是这样的:
总结一下:
创建一个名为的脚本
~/git-wrapper.sh
并替换<YOUR_DIFF_WRAPPER>
为您想要的任何内容:设置一个可执行位:
在您的 shell 启动文件中设置别名,例如
~/.bashrc
并重新加载 shell:正常使用
git
:<YOUR_DIFF_WRAPPER>
如果您在里面X
,它将使用它,并将git-diff
在X
.