Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows “如何分离”;git gui“;始于;吉特·巴什;在窗户上?_Windows_Git_Git Bash_Msys_Git Gui - Fatal编程技术网

Windows “如何分离”;git gui“;始于;吉特·巴什;在窗户上?

Windows “如何分离”;git gui“;始于;吉特·巴什;在窗户上?,windows,git,git-bash,msys,git-gui,Windows,Git,Git Bash,Msys,Git Gui,比如说, 我开始“git bash” I导航至认证目录 我启动GitGUI& 我关闭控制台窗口或按Ctrl+C Git gui的窗口消失。即使我使用了gitgui&disown。即使当我按下Ctrl+C时它不在前台 如何正确地从Windows控制台分离git gui?如果gitgui已经启动,您可以断开该作业,使其不会在控制台中结束: disown -h <jobid> disown-h 如果您想在启动Git GUI时执行此操作(因此您只需启动并忘记),则存在nohup,但由于未

比如说,

  • 我开始“git bash”
  • I导航至认证目录
  • 我启动GitGUI&
  • 我关闭控制台窗口或按Ctrl+C
  • Git gui的窗口消失。即使我使用了
    gitgui&disown
    。即使当我按下Ctrl+C时它不在前台


    如何正确地从Windows控制台分离
    git gui

    如果gitgui已经启动,您可以
    断开该作业,使其不会在控制台中结束:

    disown -h <jobid>
    
    disown-h
    

    如果您想在启动Git GUI时执行此操作(因此您只需启动并忘记),则存在
    nohup
    ,但由于未知原因,它不在MsysGit发布的二进制文件中,这对其他人有利,我将给出与和相关的更一般的回答

    解决方案1:在不使用标准输出的情况下分离 假设您要分离应用程序:

    "C:\Program Files\MyApp\MyApp.exe"
    
    它不会将您想要检索的任何信息输出到stdout(或stderr)。
    在Windows bash shell中使用:

    cmd //c start //D "C:\\Program Files\\MyApp"  MyApp.exe arg1 arg2 
    
    MyApp将在一个单独的窗口中运行,关闭调用bashshell不会影响它(大体上就像Linux守护进程一样)

    如前所述,除非是对话框消息,否则无法读取应用程序消息,因此此解决方案适合GUI应用程序。无论如何,如果
    MyApp.exe
    是一个Windows批处理文件,如
    MyApp.cmd
    ,它将调用其cmd.exe主机并在那里登录:简而言之,您将读取.cmd/.bat案例的输出

    Mac类用户

    cmd.exe
    窗口将闪烁片刻。如果这对您(r用户)来说不是很酷,那么在上面的一行中,将
    cmd
    替换为,或者类似的内容

    解决方案2:使用标准输出分离 如果要将日志读取到stdout和stderr,请使用:

    cmd //c start cmd //k  "C:\\Program Files\\MyApp\\MyApp" arg1 arg2 
    
    如果MyApp是一个控制台应用程序,则通常建议使用此替代方案。现在您得到了一个带有“home”的守护进程。MyApp将由第二个
    cmd.exe托管运行,您将在此处看到其输出。
    对于GUI应用程序,您将使用两个窗口结束:MyApp窗口和调用cmd窗口

    在这两种情况下,退出MyApp并不意味着关闭cmd窗口;关闭cmd窗口时,将仅关闭MyApp控制台

    如果闪烁的冲头击中您,您只需更换第一个
    cmd
    ,第二个是守护进程的visbile主页

    解决方案3:分离以文档为中心的应用程序 一些文档通过类似于Linux shebang语法的机制与某些处理应用程序密切相关,但基于Windows的注册表;因此,您可以在不调用相关应用程序的情况下打开文档

    这种行为可以在bash中模仿,甚至可以在独立风格中模仿

    对于不需要输出到stdout和stderr的应用程序,打开MyApp.doc时使用:

    cmd //c start //D "C:\\Program Files\\MyApp"  MyApp.exe  "Path\\to\\MyApp.doc"
    
    可简化为:

    cmd //c start //D "Path\\to" MyApp.doc
    
    对于需要stdout和stderr输出的应用程序

    cmd //c start cmd //k  "C:\\Program Files\\MyApp\\MyApp" "Path\\to\\MyApp.doc"
    
    可简化为:

    cmd //c start cmd //k  "Path\\to\\MyApp.doc"
    

    根据安东尼奥的回答,我想出了以下配方:

    cmd //c start //D "C:\Program Files\Git\bin" "wish.exe" "C:\Program Files\Git\libexec\git-core\git-gui"
    
    可以通过在shell中按Ctrl-D进行测试。shell正确关闭,git gui继续工作

    缺点:此解决方案忽略当前目录,并在
    C:\Program Files\git\bin
    目录而不是当前目录中打开git gui

    有人可能会说,Windows上的GitGUI能够记住最近的存储库,所以只需点击一下即可。没错,但问题是:如何在当前目录中获取分离的
    git gui

    我尝试了一些变体来解决这个缺点,但没有什么真正令人满意的

    下面的人总是问用什么打开
    git gui
    。在文件选择器中选择“C:\Program Files\Git\bin\wish.exe”可以工作,但每次都必须这样做

    cmd //c start //D "E:\\escapedwindowsstyle\\path\\to\\my\\git\\repo\\" "C:\\Program Files\\Git\\bin\\wish.exe" "C:\\Program Files\\Git\\libexec\\git-core\\git-gui"
    
    cmd //c start "C:\\Program Files\\Git\\bin\\wish.exe" "C:\\Program Files\\Git\\libexec\\git-core\\git-gui"
    

    有人能理解发生了什么和/或改进了什么吗?

    下面的命令在“git bash”中对我有效:

    gitgui/dev/null 2>&1&
    

    我尝试了Ctrl+C、Ctrl+D并简单地关闭控制台窗口<代码>git gui
    在所有情况下都保持打开状态。

    在git for Windows 2.25中,只需键入

    git-gui
    

    打开当前工作目录的GUI,完全分离。(注意连字符)。

    我断开了作业(至少它不再出现在
    作业
    命令输出中)。我输入
    退出
    。Bash离开,控制台窗口保持打开。我关上控制台窗口。GitGUI的窗口消失了。另外:我不承认GitBash中的工作。它未列在
    作业
    输出中。但是Ctrl+C仍然会扼杀git gui。问题不在于如何在BASH中放弃工作,而是如何在Windows中完成它。请考虑添加“MySys”标签或类似的东西,因为Git BASH是相同的重新打包,并且同样的技术适用于您的情况。这是完美的,是唯一适合我的。这里发生了什么?为什么它会工作?@Spike我相信在Windows下,孩子的输入和输出流以某种方式与家长的保持连接。因此,当父级退出时,流关闭,杀死子级。此命令将标准输入(
    /dev/null
    )和错误流(
    2>&1
    )重定向到
    /dev/null
    ,有效地将它们与父级分离。这似乎足以让孩子在家长退出时继续运行。虽然这是一个很好且全面的答案,但它似乎与关于
    git gui
    @jeyk的原始问题没有太大关系。我已将上述答案改编为实际回答
    git gui
    案例,请参见我的答案
    git-gui