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

73

我曾经可以在Cygwin控制台中启动Git GUI而没有任何问题,但自从我更新了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)

我该如何解决这个问题?


你可以考虑启动Git For Windows,它提供了git gui,并使用单独的非cygwin/msys shell。你只需要注意你的cygwin/windows路径,使得cygwin不会尝试使用它而不是cygwin版本,这可能会导致一些问题。 - AndrewD
使用Git for Windows和Cygwin组合会很麻烦:不同的文件名约定,甚至不同的主目录(通常如此),因此您必须管理两组git设置。 - toolforger
7个回答

130
Cygwin的gitk和Git GUI需要X11。这意味着您需要安装一些Cygwin X11包并设置它们以便能够打开GUI。
以下步骤可以让您开始运行: 1. 再次运行Cygwin安装程序(如果需要,重新下载相关setup-*.exe)。 2. 在软件包列表中,在X11类别下选择安装"xinit"。单击下一步,接受所有依赖项并安装。 3. 在Windows开始菜单中,您应该有一个新的组:Cygwin-X。从那里运行XWin Server。 4. 在您的Cygwin shell中,运行export DISPLAY=:0.0
每次重启计算机时都需要重复第3步,并且每次打开新的Cygwin shell时都需要重复第4步(或者只需运行echo "export DISPLAY=:0.0" >>~/.profile,以便在创建新shell时自动运行它)。
在评论中,似乎有些人收到了错误信息“无法连接到显示器“:0.0”。如果您遇到这种情况,请将鼠标悬停在应该出现在系统托盘中的X上(如果X图标已被隐藏,则可能需要单击向上的小图标);弹出窗口的标题应该会显示类似于“Cygwin / X Server:1.0”的内容。在步骤4中,使用那个“:1.0”(或您看到的任何内容)作为DISPLAY的值,而不是“:0.0”,确保包括冒号。

如果您在启动X服务器时遇到其他问题,您可能会发现自己有一个名为〜/ .xsession-errors的文件;查看其中的内容以了解出了什么问题。还要检查是否有〜/ .startxwinrc文件,并尝试删除它,看看是否可以解决问题。

对于感兴趣的人,X11软件包没有自动安装的原因是从技术上讲不需要:通过有点复杂的方式,可以使用不同的X11服务器来替代Cygwin在安装“xinit”软件包时安装的X11服务器。


2
外观和感觉不如以前了,但至少它又能正常工作了。谢谢! - Stijn Vanpoucke
4
@Stijn: 同意。我也更喜欢旧的界面(主要是因为我有一个自定义的Windows键盘布局,X11无法理解)。更改的理由是因为Tcl/Tk(Git GUI,Gitk等运行的语言)已经转移到X11,所以为了避免被困在过时的Tcl/Tk中,Cygwin不得不做出同样的更改。 - me_and
8
我在我的bash配置文件中添加了以下内容,以消除每天都需要执行第三步骤的问题。如果这对你也有用,你可能希望编辑答案。“startxwin >/dev/null 2>&1 &” - Mark F Guerra
2
你找到了一种自动隐藏xterm窗口的方法来启动XWin服务器了吗? - Stijn Vanpoucke
5
是的:在 bash shell 中运行 touch ~/.startxwinrc。我已在 Super User 上完整回答了这个问题:http://superuser.com/q/435768/21002。 - me_and
显示剩余7条评论

10

避免使用X11并将Git GUI支持添加到Cygwin中

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

  1. 安装Git for Windows(非Cygwin版)http://git-scm.com/download/win
  2. 打开其命令行窗口 C:\Program Files (x86)\Git\Git Bash
  3. 运行 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

如果你将函数命名为git-gui而不是gg,当你输入命令“git gui”时它就会打开 - git会将其作为扩展使用。 - configurator
我在Windows 10上使用Git for Windows,对于gitk,它的工作方式如此描述。然而,git gui根本无法从cygwin终端启动(而git-gui可以!)。当我添加像这里描述的名称为git-gui的命令时,git gui和git-gui都不再起作用。以防万一其他人也遇到了这个问题,至少git-gui可以正常工作(无需在bashrc中添加额外的命令)。 - cryingshadow
+1...这实际上是我一直在寻找的。由于我已经安装了Git Bash,因此即使不知道它,我已经安装了git gui,并且它让我避免了走下整个X11兔子洞的路线。谢谢! - pooley1994

9

花费了比我想象的更多的时间后,我终于找到了一个可行的解决方案,可以从我的Cygwin shell中执行gitk。我无法让任何启动X服务器的说明可靠地工作,最终的解决方案非常简单。

最大的注意事项是需要安装Git for Windows,下载链接在这里

现在是整个运行gitk部分。Git for Windows包括一个cmd文件夹,其中有一个gitk.cmdWindows命令文件。这就是你需要调用的全部内容,以打开gitk

$ [path-to-git]/cmd/gitk.cmd

在我的系统上,Git的路径是在"C:\Program Files (x86)\Git",所以命令看起来像这样:
$ "/cygdrive/c/Program Files (x86)/Git/cmd/gitk.cmd"

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

6
echo "export DISPLAY=:0.0" >>~/.profile

或者

echo "export DISPLAY=:0.0" >>~/.bash_profile

在我的情况下

2
在跟随我和tititou36提供的四个步骤后,您可能仍然会遇到XWin在启动XwinServer后崩溃的问题。
原因是它依赖于一个Cygwin终端/控制台作为主机,如果没有Cygwin控制台,Xwin就会崩溃。
解决方法是:
启动一个Cygwin控制台(您可以通过将“mintty”命令放入Cygwin主目录下的“.startxwinrc”文件中来自动启动它)。

2
这是我成功的方法:

以下是我的解决方案:

cat >> ~/.bash_profile <<< "export DISPLAY=:0.0"

从Cygwin软件包管理器中执行以下操作:

安装xorg-server和一些xorg字体,尤其是xorg-x11-fonts-Type1

接下来,创建一个链接到Windows字体文件夹,以供Git GUI使用:

ln -s /cygdrive/c/Windows/Fonts /usr/share/fonts/win-fonts

关闭Cygwin终端并重新打开,然后键入:

startxwin &> /dev/null &

git gui &

1

根据AndrewD的回答:不要使用Cygwin的git,而是使用Windows Git的gitkgit gui。换句话说,卸载Cygwin中的git-gui和gitk软件包(如果已安装)。然后which gitk应该指向Windows文件,而不是/usr/bin中的Cygwin二进制文件。


你是不是想说“不要使用Cygwin的git…”? - Peter Mortensen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接