Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.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上使用Cygwin启动Git GUI_Git_Cygwin_Tcl_X11_Tk - Fatal编程技术网

无法在Windows上使用Cygwin启动Git GUI

无法在Windows上使用Cygwin启动Git GUI,git,cygwin,tcl,x11,tk,Git,Cygwin,Tcl,X11,Tk,我以前在Cygwin控制台中启动时没有任何问题,但自从我更新Cygwin后,我收到以下错误消息: $ git gui Application initialization failed: no display name and no $DISPLAY environment variable Error in startup script: invalid command name "tk_messageBox" while executing "tk_me

我以前在Cygwin控制台中启动时没有任何问题,但自从我更新Cygwin后,我收到以下错误消息:

$ git gui
Application initialization failed: no display name and no $DISPLAY environment variable
Error in startup script: invalid command name "tk_messageBox"
    while executing
"tk_messageBox  -icon error  -type ok  -title "git-gui: fatal error"  -message $err"
    invoked from within
"if {[catch {package require Tcl 8.4} err]
 || [catch {package require Tk  8.4} err]
} {
        catch {wm withdraw .}
        tk_messageBox \
                -icon error \
                -typ..."
    (file "/usr/lib/git-core/git-gui" line 34)

如何解决这个问题?

Cygwin的gitk和Git GUI需要X11。这意味着您需要安装一些Cygwin X11软件包,并将其设置为能够打开GUI

这将帮助您启动并运行:

  • 再次运行Cygwin安装程序(如果需要,请再次下载相关文件)
  • 在软件包列表中,选择在X11类别下安装“xinit”。单击下一步,接受所有依赖项,然后安装
  • 在Windows开始菜单中,您应该有一个新组:Cygwin-X。从那里运行XWin Server
  • 在Cygwin shell中,运行导出显示=:0.0
  • 每次重新启动计算机时都需要重复步骤3,每次打开新的Cygwin外壳时都需要重复步骤4(或者只要运行
    echo“export DISPLAY=:0.0”>~/.profile
    即可在创建新外壳时自动运行)

    在评论中,似乎有些人出现了错误,说明“无法连接到显示”:0.0“。如果您看到了,请将鼠标悬停在本应出现在系统托盘中的X上(如果X图标已隐藏,则可能需要单击向上的小图标);弹出标题应该是“Cygwin/xserver:1.0”。使用“:1.0”(或您看到的任何内容)作为步骤4中显示的值,而不是“:0.0”,确保包含冒号

    如果您在启动X服务器时遇到任何其他问题,您可能会发现有一个名为
    ~/.xsession errors
    ;检查一下它的内容,看看哪里出了问题。还要检查您是否有
    ~/.startxwinrc
    文件,并尝试删除它,看看这是否解决了问题

    对于感兴趣的人来说,X11软件包没有自动安装的原因是:在安装“xinit”软件包时,可以通过一些复杂的方式使用不同于Cygwin安装的X11服务器


    在我的例子中

    避免使用X11,并向Cygwin添加Git GUI支持

    如果您想避免X11(谁不想呢?):

  • 安装Git for Windows(非cygwin)
  • 打开其命令shell
    C:\ProgramFiles(x86)\Git\Git Bash
  • 运行
    git gui
  • (可选)如果您想留在Cygwin中启动Git GUI,请在
    ~/.bashrc
    中添加一个函数。唯一需要注意的是,由于递归和与参数的混淆,请勿将函数命名为git,而且您是git for Windows shell,在它启动时也可能会添加相同的函数。您可能还会遇到路径问题,因此请小心正确设置路径

    # Call Git GUI from Git For Windows path with `ggui`
        gg() {
        command "/cygdrive/c/Program Files (x86)/Git/bin/git" gui  2>/dev/null;
    
    
        }
    
    编辑完.bashrc后,请刷新设置:

    source ~./bashrc
    
    然后简单地说:

    gg
    

    在花费了比我愿意承认的更多的时间之后,我设法找到了一个可行的解决方案,从我的Cygwin shell中执行
    gitk
    。我无法获得启动X服务器以可靠工作的任何说明,最终,解决方案非常简单

    最大的警告是需要安装Git for Windows,可以找到它的下载

    现在是整个运行的
    gitk
    部分。Git for windows包含一个cmd文件夹,其中包含一个
    gitk.cmd
    windows命令文件。要打开
    gitk

    $[path to git]/cmd/gitk.cmd
    
    在我的系统上,Git路径位于“C:\Program Files(x86)\Git”中,因此命令如下所示:

    gitk() {
      "/cygdrive/c/Program Files (x86)/Git/cmd/gitk.cmd"
    }
    
    $“/cygdrive/c/Program Files(x86)/Git/cmd/gitk.cmd”
    
    在我的~/.bash_概要文件中,我添加了一个函数来处理该调用,如下所示:

    gitk() {
      "/cygdrive/c/Program Files (x86)/Git/cmd/gitk.cmd"
    }
    

    在完成了给定的四个步骤和之后,在启动XwinServer之后,XWin可能仍然存在问题

    原因是它依赖于Cygwin终端/控制台,即主机,如果没有Cygwin控制台,Xwin将失效

    解决办法是:


    启动Cygwin控制台(您可以将
    mintty
    命令放入Cygwin主目录下的文件
    .startxwinrc
    中,使其自动启动)。

    以下是对我有效的方法:

    cat >> ~/.bash_profile <<< "export DISPLAY=:0.0"
    
    关闭Cygwin终端并再次打开,然后键入

    startxwin &> /dev/null &
    
    git gui &
    

    基于:不要使用Cygwin的
    git
    ,而是使用Windows git的
    gitk
    git gui
    。换句话说,从Cygwin(如果已安装)卸载git gui和gitk包。然后,
    哪个gitk
    应该指向Windows文件,而不是
    /usr/bin
    中的Cygwin二进制文件。外观和感觉与过去不同,但至少它可以再次工作。谢谢@斯蒂金:同意。我也更喜欢旧界面(尤其是因为我有一个自定义的Windows键盘布局,X11无法理解)。问题是Tcl/Tk(运行在上面的Git GUI和Gitk等语言)已经迁移到X11,因此为了避免被过时的Tcl/Tk卡住,Cygwin不得不做同样的更改。如果这也适用于您,您可能希望编辑答案。“startxwin>/dev/null 2>&1&”启动XWin服务器时,您找到自动隐藏xterm的方法了吗?@StijnVanpoucke:Yes:从bash shell运行
    touch~/.startxwinrc
    。我已经完全回答了超级用户:你可以考虑使用一个单独的非CygWi/MyShell代替它来提供Git GUI。您只需注意cygwin/windows路径,这样cygwin就不会尝试使用它而不是cygwin版本,这可能会导致一些问题。@AndrewD将Git for windows与cygwin结合将是一个难题:不同的文件名约定,甚至不同的主目录(通常)因此,您必须管理两组git设置
    ln -s /cygdrive/c/Windows/Fonts /usr/share/fonts/win-fonts
    
    startxwin &> /dev/null &
    
    git gui &