magit有没有可能作成单独的工具?

magit实在是好用,而且它的很多操作都非常合理科学顺手。但是只能在emacs中用。

有没有可能,或者有没有人作过,作为一个单独的工具复制magit的操作和界面,独立运行。这样即便不用emacs的人也可以用它了。

很久之前我用过一个命令行工具tig。就是git的界面工具。当时感觉也挺好用的。但是和magit没法比。如果有一个类似tig的magit就好了。

2 个赞

不如单独写一个 init.el 给特定的 emacs 用,比单独写一个应用简单多了,再 alias 一下,齐活

3 个赞

有很多类似的开源软件,比如 gitui . 当然你可以自己移植,或者重新写一个类似的 tui/gui 应用.

lazygit?

lazygit 还是照 magit 差不少,magit 是我离不开 emacs 的(几乎是)唯一理由,org-mode 之类的都有类似的替代,唯一这个没有

如果可以的话简直是我这类还没入门emacs的人的福音啊! 我曾长期使用vim-fugitive,最近逐步迁移到了自己写的插件上,在实现过程中一直想从magit中汲取灵感,但只是粗略地读了一些文章,真的是囫囵吞枣,没尝出啥味道。

Magit 作者说 Magit 实现了 90% 左右的 git 功能,其他 GUI 或 TUI 大多卡在 60% 左右的程度。60% 可能也够覆盖日常场景了,只不过易用性难比 Magit。所以既要 90% 左右的 git 功能,又要 magit 的易用,应该很难有替代了,只要其一兴许有。

这样也是一个好办法。magit也用不着什么复杂的配置。只需要把emacs的启动退出结合一下就可以。

我只用magit的1%功能。就是最常见的分支,合并,提交,看日志。。。 平时也用不到太多复杂的功能。magit确实方便。

vim的fugitive 用起来怎么样?

几行init.el和shell alias就完了:magit命令直接打开emacs打开当前目录的magit,在magit status按q不只退出magit,退出整个emacs。再优化一下,开个server,magit时使用client

就我的使用来说,vim-fugitive基于vim的内置功能(tabpage、terminal、syntax highlight、keymaps)和vim使用习惯提供了对git cli的包装;相比cli,它利用vim buffer显示git命令的输出,也会对内容进行一定程度的解析再绑定一些操作到解析的对象,这些操作比直接敲命令快不少,而且能显示、保留上下文信息。我最多使用的是功能(用git cli来说):status+{add -p, reset -p}+commit -vlog+show objblamediff+loclist。前者对应fugitive的:0Git,后者对应:GV

就我用到的工作流来说,它比git cli用起来流畅;但我并没有把所有操作都用它来做,分支操作、合并、rebase还是git cli,只不过我有时会在vim里调个浮动终端出来而不是退出vim或单开个终端再敲。

我找着看过magit的介绍、用法视频,tldr! 没上手始终体会不到它与vim-fugitive的区别。而且直接用emacs好多按键我也不熟悉,我望而却步到现在…

1 个赞

这就是我目前的做法。我有一个轻量的配置 init-lite.el,里边包含最基本的编辑功能,也包括 magit。

alias emacs-lite='emacs -nw -Q --dump-file ~/.emacs.d/init-lite.pdmp -l ~/.emacs.d/init-lite.el'
alias magit='emacs-lite -f magit-status'

但我其实并不常用 magit,而是把 emacs-lite 用做命令行编辑器 $EDITOR (C-x C-e) 和 git editor:

$ cat (which $EDITOR)
emacs -nw -Q --dump-file ~/.emacs.d/init-lite.pdmp -l ~/.emacs.d/init-lite.el --eval "(cli-editor-init '${shell_type})" $@

$ git config --get core.editor
emacs -nw -Q --dump-file ~/.emacs.d/init-lite.pdmp -l ~/.emacs.d/init-lite.el --eval "(setq init-git-editor t)"

Emacs everywhere。

12 个赞

已经把 magit 当作独立工具用了很久了,这是我的实践:

  • Emacs 用 daemon 模式跑,这样启动 magit 会很快
  • 我在 zshrc 里面定义了
    function egit { zsh -c "TERM=xterm-24bit emacsclient -nw --eval '(magit-status)'" }
    
    这样用 zsh 在一个 git repo 内部时打 egit 命令就能在当前终端用 magit
  • 虽然我的主力编辑器是 nvim,但是 magit 是在太好用了。我结合 toggleterm 插件把这个命令绑定成了快捷键,效果见下面(在 nvim 里面跑 emacs :rofl:):
    :lua require("toggleterm.terminal").Terminal:new({cmd="TERM=xterm-24bit emacsclient -nw --eval '(magit-status)'", direction="float"}):toggle()
    

13 个赞

这思路很灵活啊,让emacs以tui+client的方式运行在nvim里。不过我觉得相对来说难点是’安装配置好magit’这步。

emacs怎么也配个单独的tabpage吧?像这样:tab terminal TERM=xterm-24bit emacsclient -nw --eval '(magit-status)'。这个xterm-24bit的TERM第一次见,我系统装了xterm都没有,不是笔误吗?

印象里面和 emacs 在 tmux 下的色彩显示有关系,具体细节不记得了

好奇问个问题,为什么没有用 GitHub - NeogitOrg/neogit: magit for neovim 这样的nvim生态下的工具呢

可能是因为有许多bug非常影响使用,半年没有用了,不清楚现在进展如何

magit安装配置也很简单。我都没用任何配置,直接加载了它,用默认的就挺够用的了。

另外,我的颜色设置是这样的,目前没遇到什么颜色问题:

.bashrc export COLORTERM=truecolor

.tmux.conf

set -g default-terminal “xterm-256color” set-option -sa terminal-overrides ‘,xterm-256color:Tc’