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