无法在Windows上使用cygwin启动git gui


70

我以前在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)

谁知道如何解决这个问题?


您可以考虑使用单独的非cygwin / msys shell启动提供git gui的Windows Git。您只需要注意cygwin / windows路径,因此cygwin不会尝试使用它而不是cygwin版本,这可能会引起一些问题。
AndrewD

@AndrewD将Windows的Git与Cygwin结合起来将成为PITA:不同的文件名约定,甚至不同的主目录(通常),因此您必须管理两组git设置。
toolforger

Answers:


124

编辑:于2016年3月更新,以说明重命名的软件包等。

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”的字样。使用“:1.0”(或您看到的任何值)作为DISPLAY步骤4中的值,而不是“:0.0”,并确保包括冒号。

如果启动X服务器时遇到任何其他问题,可能会发现文件名为~/.xsession-errors;。查看其中的内容以查找问题所在。另外,请检查您是否有~/.startxwinrc文件,然后尝试将其删除,看看是否可以解决问题。

对于感兴趣的人来说,不会自动安装X11软件包的原因是它们在技术上是不需要的:可以通过某种复杂的方式来使用与安装“ xinit”软件包时所安装的Cygwin所安装的X11服务器不同的X11服务器。


2
外观不再像以前那样,但至少可以再次使用。谢谢!
Stijn Vanpoucke 2012年

4
@Stijn:同意。我也喜欢旧界面(尤其是因为我有X11无法理解的自定义Windows键盘布局)。进行更改理由是Tcl / Tk(运行Git GUI和Gitk等语言)已移至X11,因此为避免卡在过时的Tcl / Tk中,Cygwin必须进行相同的更改。
me_and 2012年

8
我将以下行添加到我的bash配置文件中,从而不必每天执行步骤3。如果这也适合您,则您可能希望编辑答案。“ startxwin> / dev / null 2>&1&”
Mark F Guerra

2
在启动XWin Server时,您是否找到一种自动隐藏xterm的方法?
Stijn Vanpoucke 2012年

5
@StijnVanpoucke:是的:touch ~/.startxwinrc从bash shell运行。我已经在超级用户上完全回答了:superuser.com/q/435768/21002
me_and 2012年

9

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

最大的警告是需要安装适用于Windows的Git,可在此处找到相关下载。

现在是整个运行过程gitk。Windows的Git包含一个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"
}

希望这可以帮助其他人弄清楚这一点。


7

避免使用X11并git gui为cygwin添加支持

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

  1. 安装Windows版Git(非Cygwin)http://git-scm.com/download/win
  2. 打开其命令外壳 C:\Program Files (x86)\Git\Git Bash
  3. git gui

(可选)如果您希望留在cygwin中启动git gui,请在其中添加一个函数~/.bashrc。唯一需要注意的是,由于递归和参数混乱,因此命名该函数git,并且您是Windows外壳的Git的事实也可能在启动时添加了相同的函数。您可能还会遇到路径问题,因此请注意正确设置路径。

# 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会将其用作扩展名。
配置器

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

要么

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

就我而言


2

按照me_and和tititou36给出的4个步骤进行操作后,启动XwinServer之后,您仍然可能遇到XWin问题。

原因是它依赖于作为主机的CygWin终端/控制台,如果没有CygWin控制台,则Xwin会死掉。

解决方案是:

启动一个Cygwin控制台。(您可以通过在cygwin主目录下mintty的文件中输入命令来使其自动启动.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 Gitgitkgit gui。换句话说,从cygwin卸载git-gui和gitk软件包(如果已安装)。然后which gitk应指向Windows文件,而不是中的cygwin二进制文件/usr/bin

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.