git-gui命令在macOS Sierra上崩溃

更新到macOS Sierra之后, git-gui命令崩溃,并显示错误消息:

希望[23862:202062] ***终止应用程序由于未捕获的exception“CALayerInvalidGeometry”,原因:“CALayer位置包含NaN:[0南]'
 ***第一个投掷堆栈:
 (
     0 CoreFoundation 0x00007fff8cd9252b __exceptionPreprocess + 171
     1 libobjc.A.dylib 0x00007fffa146acad objc_exception_throw + 48
     2 CoreFoundation 0x00007fff8ce10a0d + [NSException raise:format:] + 205
     3 QuartzCore 0x00007fff92938980 _ZN2CA5Layer12set_positionERKNS_4Vec2IdEEb + 152
     4 QuartzCore 0x00007fff92938af5  -  [CALayer setPosition:] + 44
     5 QuartzCore 0x00007fff9293914b  -  [CALayer setFrame:] + 644
     6 CoreUI 0x00007fff986e2112 _ZN20CUICoreThemeRenderer26MakeOrUpdateScrollBarLayerEPK13CUIDescriptoraPP7CALayer + 1284
     7 CoreUI 0x00007fff986de317 _ZN20CUICoreThemeRenderer19CreateOrUpdateLayerEPK13CUIDescriptorPP7CALayer + 1755
     8 CoreUI 0x00007fff986604d1 _ZN11CUIRenderer19CreateOrUpdateLayerEPK14__CFDictionaryPP7CALayer + 175
     9 CoreUI 0x00007fff98663185 CUICreateOrUpdateLayer + 221
     10 AppKit 0x00007fff8b3c7623  -  [NSCompositeAppearance _callCoreUIWithBlock:options:] + 226
     11 AppKit 0x00007fff8aa74a9d  -  [NSAppearance _createOrUpdateLayer:options:] + 76
     12 AppKit 0x00007fff8aced143  -  [NSScrollerImp _animateToRolloverState] + 274
     13 AppKit 0x00007fff8acacb79 __49- [NSScrollerImp _installDelayedRolloverAnimation] _block_invoke + 673
     14 AppKit 0x00007fff8ab73331  -  [NSScrollerImp _doWork:] + 15
     15基金会0x00007fff8e770c88 __NSFireDelayedPerform + 417
     16 CoreFoundation 0x00007fff8cd11e14 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 20
     17 CoreFoundation 0x00007fff8cd11a9f __CFRunLoopDoTimer + 1071
     18 CoreFoundation 0x00007fff8cd115fa __CFRunLoopDoTimers + 298
     19 CoreFoundation 0x00007fff8cd09021 __CFRunLoopRun + 2065
     20 CoreFoundation 0x00007fff8cd085b4 CFRunLoopRunSpecific + 420
     21 Tcl 0x0000000101834b43 Tcl_WaitForEvent + 314
     22 Tcl 0x00000001018045cd Tcl_DoOneEvent + 274
     23 Tk 0x0000000101672f4f Tk_MainLoop + 33
     24 Tk 0x000000010167ea5b Tk_MainEx + 1566
     25希望0x0000000101658542希望+ 9538
     26 libdyld.dylib 0x00007fffa1d48255 start + 1
 )
 libc ++ abi.dylib:以NSExceptiontypes的未捕获exception终止
错误:git-gui死于信号6

有没有人有这个相同的问题和解决scheme?

不要使用默认的MacOS tcl-tk ,而应使用Homebrew中最新的tcl-tk(8.6.6),然后强制链接它,例如:

 brew install tcl-tk brew link tcl-tk --force 

MacOS Sierra上的Tk 8.5有一个问题。 你可以用Tk Wish 8.4replaceTk Wish 8.5

 cp / System / Library / Frameworks / TK.framework / Versions / 8.4 / Resources / Gui.app/Contents/MacOS/

来源: https : //github.com/git/git-scm.com/issues/853

UPD:注意用当前版本replacecppath中的git版本

试试: git config --local --unset gui.geometry
由于Tk几何pipe理器不起作用,由于较旧的版本或如果它已损坏发生此错误。

如果上述命令不起作用,请尝试更新xcode: xcode-select --install

我的解决scheme,应该从https://git-scm.com/下载git

brew install homebrew/dupes/tcl-tk

cd到/usr/local/git/share/git-gui/lib/Git Gui.app/Contents/MacOS 备份原始的Wish

cp /usr/local/Cellar/tcl-tk/8.6.6/bin/wish8.6 /usr/local/git/share/git-gui/lib/Git Gui.app/Contents/MacOS/Wish

升级到macOS 10.12.2修复了这个问题。

参考文献:

无法从Apple更改日志中了解原因: https : //support.apple.com/zh-CN/HT207307 。

我从这里汇集了一堆答案,因为我通过brew使用GIT TCL:

  1. cd "/usr/local/Cellar/git/2.10.2/share/git-gui/lib/Git Gui.app/Contents/MacOS"
  2. mv Wish Wish.bkp
  3. ln -vs /usr/local/Cellar/tcl-tk/8.6.6/bin/wish8.6 Wish

随着时间的推移,版本号可能会有所不同

我认为以下目标是构成问题的完整解决scheme:

  • “摆脱轨道”的确定性,以一种整齐线性的方式解决这个问题

  • 不要结束从传统的苹果Tcl / Tk丑陋的字体

  • 从Apple发货的Tcl / Tk中解耦你的git gui

    • 依靠你的Tcl / Tk安装的自制软件

下面你会发现一个一步一步的实现:

  1. 从Homebrew获取重复的Tcl / Tk

     brew install tcl-tk 
  2. 在破碎的Apple实施之前,将未破坏的Tcl / Tk安装添加到path中

    • 这假设您的自制path优先于您的系统path
    • 这应该是在正常的家酿安装的情况下
    • 如果您的其他已安装的自制软件配方存在冲突的文件,这将失败
    • 例如the_platinum_searcher提供了pt ,这与冲突有关
    • 我build议ripgrep绕过这个案子

       brew link --force tcl-tk 
  3. 通过重新安装非破坏性的Homebrew版本来修复你的gitk安装

    • 这可能没有必要,但是参考文献。 上面第一个规定的目标

       brew reinstall git 
  4. 将您的Homebrew Tcl / Tk安装中的新愿望二进制文件复制到Git Gui.app软件包

    • 这一味地依赖于homebrew info <package>的输出不能改变

       cp "$(which wish)" "$(brew info git | grep Cellar | cut -d' ' -f1)/share/git-gui/lib/Git Gui.app/Contents/MacOS/Wish" 

最后一点可能是聪明的,把你的~/.bashrc和/或等价物放进一个别名,因为每当你从Homebrew得到一个新的git版本时,它都必须重复。

 alias fix-gitgui='cp "$(which wish)" "$(brew info git | grep Cellar | cut -d" " -f1)/share/git-gui/lib/Git Gui.app/Contents/MacOS/Wish"' 

我不完全确定为什么上面使用的剪切的字段分隔符的引用是这样的,所以谨慎使用这个别名,因为这可能非常依赖于确切的bash版本。

它适用于我:下载并安装最新版本的TCL(我使用8.6.4) http://www.activestate.com/activetcl/downloads

我也下载并安装了git的最新版本(2.10.1) https://git-scm.com/

检查gitk窗口在resize后不会崩溃。

@ sbondaryev的回答(39966704)对我不起作用,我还没有尝试@ ssahu's(40119030)。 然而我在这里描述的这个诀窍对于我来说要less得多(10%的时间)。 而且这让我摆脱不了太多的东西 – 希望问题能很快得到妥善解决。

  • 调整窗口大小(90%的时间)似乎发生崩溃。 但是我发现它太小而不能工作,并想调整它的大小。
  • vi .git/config
  • 编辑GUI geography来创build一个可用的窗口大小。 我仍然保持小,虽然我怀疑会有一个大小的崩溃总是会发生

我的Sierra(从10.11.6升级)的Tcl / Tk Current指向8.5,我在升级后观察到同样的错误,我们的Python程序使用了Tkinter。 我没有使用愿望。 我没有从Python 2.7 32位安装连接到Tcl / Tk 8.4的帮助,因为那个没有“瓦”。 所以我酝酿了我的Python,将它与Tcl / Tk 8.6:

这是酿造使用预编译的瓶子,而不是从源头build设,除非另有特别指示,所以不是真的造成这个问题:

 xcode-select --install 

然后安装Tcl / Tk:

 brew install homebrew/dupes/tcl-tk 

如果你最初没有用–with-tcl-tk来安装Python,那么:

 brew uninstall python 

最后:

 brew install python --with-tcl-tk 

在此之后,我有Python链接到Tcl / Tk 8.6,看起来像我摆脱了错误。

经过很多的努力,这个解决scheme解决了我的问题:

 $ brew upgrade tcl-tk 

如果它是最新的,这不起作用,请尝试:

 $ brew uninstall tcl-tk $ brew install tcl-tk 

我已经尝试了networking中的每个解决scheme,但只有这样才能解决问题。 干杯!

这已经在macOS Sierra(10.12.2及以上)的最新补丁上得到了解决,不需要采取进一步的行动。

在高山脉(10.13),我和git gui有同样的问题。

我已经通过从2.7.0更新到2.14.2解决了这个问题

 brew upgrade git