git difftool 持有外壳

Posted

技术标签:

【中文标题】git difftool 持有外壳【英文标题】:git difftool holding the shell 【发布时间】:2017-01-31 20:10:58 【问题描述】:

我在 Windows 上使用 git bash,并将 Beyond & Compare 作为我的 difftool(但任何外部 difftool 都会发生同样的事情)。

我希望我的终端不要等待 difftool 退出以便将终端控制权交还给我。在命令行中执行其他 git 任务时保持打开 difftool 会话对我很有用。

有可能吗?

我不知道这是否与trustexistcode 有关,但此设置不会改变我正在寻找的终端行为。

【问题讨论】:

这是终端的一般特性,不是 git 或 difftool 特有的。您可以尝试在命令后加上&,即git difftool & 此外,在您启动 difftool 后,终端上的 ctrl + z 可能会起作用 - 但不确定 Windows 上的行为。 【参考方案1】:

当我问这个问题时,我不知道我可以使用 Ctrl + C 简单地退出句柄(它只等待外部工具发出其退出代码)。

这不是自动的,但已经足够了。

编辑 - 更好的解决方案:正如@1615903 的评论中所建议的那样,在 difftool 命令之后放置一个& 似乎是在没有任何句柄的情况下启动 difftool。

【讨论】:

Ctrl+C 是否解除对控制台的阻止并让 Beyond Compare 为您打开?对我来说,控制台中的 Ctrl+C 会关闭 Beyond Compare,这不是我想要发生的。 (其他 cmets 中的建议,& 和 Ctrl+Z 对我也不起作用。) @pettys 我同意,BC 似乎将 Ctrl+C 作为退出命令(或其他命令)。我刚刚更新了解决方案:即使在 BC 运行时,使用 & 也能很好地恢复终端。 真的吗?你怎么输入?我试过“git difftool --dir-diff &”,好像没有效果。 我写的和你说的完全一样,它返回如下内容:[1] 560 然后返回句柄。数字 560 似乎是指当前 bash 进程的 PID。括号中的数字就像我输入命令的次数一样。【参考方案2】:

我找到的解决方案是使用别名函数。 带引号的 $@ 很重要,因为在 windows 上,带有空格的文件夹名称很常见。

start_git_difftool() 
    if [ "$#" -eq  "0" ]
    then
        git difftool --dir-diff &
    else
        git difftool "$@" &
    fi


start_bcomp() 
    BCompare.exe "$@" &


alias bcomp=start_bcomp
alias gdiff=start_git_difftool

【讨论】:

以上是关于git difftool 持有外壳的主要内容,如果未能解决你的问题,请参考以下文章

Beyond Compare 4 作为 Windows 10 Pro 上 Git 的 Difftool

如何使用 git difftool 来区分合并冲突?

git difftool和mergetool图形化

将“git difftool”传递给寻呼机时如何保持颜色

将`git difftool`管道传输到寻呼机时如何保留颜色

设置和使用 Meld 作为你的 git difftool 和 mergetool