【问题标题】:git difftool holding the shellgit difftool 持有外壳
【发布时间】: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 上的行为。

标签: git shell git-bash git-difftool


【解决方案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

【讨论】:

    猜你喜欢
    • 2012-08-23
    • 1970-01-01
    • 2019-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多