Magit VS lazygit

深有同感… 刚开始的时候每个操作之前要先看一会 help

这俩确实不好比…

这开发阵容看着可不少 , emacser还是厉害的 , 大多数emacs用户都能给emacs贡献代码

是啊, 亘古不变的定理, 实力强的人总是少数

这个太讽刺了吧,按照这个理论84%的人都是错的呀 :joy::joy::joy:

go写的都这么慢?命令行不如用tig了,速度快是优势啊

错在git,不在magit。

虽然git可以离线使用,但是你仍然需要上网搜索如何使用git的命令

magit其实算好的了,就算你完全不知道怎么用,起码h ? C-h这些Emacs通用的查询快捷键还是可用的。

另外,magit有意隐藏一些复杂的命令,比如在transient里按C-x l,可以进入所谓专家模式

4 个赞

功能真是过于强悍哪~~~ :sweat_smile::sweat_smile::sweat_smile:

1 个赞

长见识了。。。

涨姿势了~ 没隐藏的那点我都用不过来… magit 打开 help 找命令都要找一会…

这个模式有啥用啊?

试了试 , 会根据设置的等级 , 显示或隐藏一些操作 , 一些有危险性的操作可以用这个给隐藏了 , 感觉还是挺有用的

问题不在于是否可以查询帮助,而是对于已经熟练命令行的人来说,重建一套快捷键跟命令的对应关系,是额外的负担。

git 的功能之多,恐怕快捷键都不够用,必然出现一个页面的 a/b/c 键对应的命令、与另一个页面的 a/b/c 键是不一样的情况。这进一步加剧了记忆负担。

也许还要面临与其他 Emacs 扩展的冲突,不知道 evil 启用之后,是否会覆盖 magit 快捷键?

命令行其实不难用,嫌打字麻烦,可以定义 alias:

⋊> [~] git config --get-regexp alias
alias.st       status
alias.sst      status -sb
alias.co       checkout
alias.br       branch
alias.ci       commit
alias.mg       merge
alias.ds       diff --stagged
alias.dt       difftool
alias.mt       mergetool
alias.last     log -1 HEAD
alias.latest   for-each-ref --sort=-committerdate --format="%(committername)@%(refname:short) [%(committerdate:short)] %(contents)"
alias.ls       log --pretty=format:"%C(yellow)%h %C(blue)%ad %C(red)%d %C(reset)%s %C(green)[%cn]" --decorate --date=short
alias.hist     log --pretty=format:"%C(yellow)%h %C(red)%d %C(reset)%s %C(green)[%an] %C(blue)%ad" --topo-order --graph --date=short
alias.type     cat-file -t
alias.dump     cat-file -p
alias.unstage  reset HEAD --
alias.unadd    reset HEAD --
alias.untrack  rm --cached

更高阶&复杂的用法,如果用快捷键完成,我总感觉有点不靠谱。当我按了一组冰天雪地裸体360度大回旋,发现起步动作错了咋办?

命令行写出来就很直观&很明确,在按下回车之前,有足够的时间检视/修改。

说到底还是因为习惯,先入为主的力量,没有绝对的诱惑,是很难动摇的。

看起来老铁对git命令行是相当的熟悉,厉害!

个人有些不同观点。诚然,习惯对力量是强大的,比如老铁就喜欢命令行,但也不能说用GUI就是不好的。那些好用的git工具也有很漂亮的UI,用起来也是相当不错的,比如gitkraken, gitup,smartgit等等,Windows上当然就是著名的小乌龟了,用起来效率也是不错的。按照老铁所说,点几下鼠标就更不靠谱了,因为你根本就不知道背后发生了什么。其实啊,大多时候真没必要知道那么详细,除非是出问题的时候。

扯远了,说回magit。真正用过的话真的会视为神器,因为大多数开发我都是在emacs中,用magit就是浑然天成的事,没有丝毫拖泥带水。常用的快捷键用几次就记住了,不常用的也有帮助。对于老铁担心的问题,按下$可以查看详细命令日志,让你一切了然于胸。如果还嫌不够,按下C-x l进入高级模式自行设置。我不清楚magit覆盖了git本身多少的命令,但是作者显然对git命令那是相当相当的熟悉。作者好像还用新的git库开发新版本的magit,相信到时候性能又会提升一大截。这玩意儿,对我来讲真的是神器。现在不到万不得已不会自己去敲命令了。

2 个赞

命令行git大师当然可以直接用命令行,magit也可以用命令行,就像evil一样用!就成。老实说我觉得magit那个命令行界面比async-shell-command的好看。

git-commit.el和git-rebase.el也是magit project的一部分(就是你在magit里commit和interactivly rebase时的那两个东西),如果你EDITOR设置成emacs而且装了这两个,命令行里用git也会触发

另一方面,我觉得你用alias和我在magit的transient里肌肉记忆按几个快捷键性质是一样的。而且magit在设计快捷键上也讲究,一般直接双击一个键就可以完成常用任务,减轻记忆负担。

evil是异端,应该烧死 Emacs快捷键基本都是按Emacs默认的快捷键导向来设计的,用了evil就得心里有数,用上evil-collection或者自己魔改按键。

的确没有必要设那么多快捷键,我觉得常用的那几个就很好了。上文已经提过magit可以直接执行git command

另一方面,git的命令行设计其实是不合理的,你可以man git-clone看一眼,有的keyword argument是--key=val 有的是 --key val,记起来真的好健脑。有的参数介于常用与不常用之间,时不时就要用一下,然后掉进git的问题设计坑里。只能骂娘

考考你:你知道这串git Avada Kedavra 是用来干什么的吗

git submodule foreach -q --recursive 'git checkout $(git config -f $toplevel/.gitmodules submodule.$name.branch || echo master)'

其实就是把一个git repo里的所有submodule checkout到.gitmodules里的branch,如果没有指定,就checkout到master(专治头指针分离等疑难杂症)。遗憾的是,我至今不懂那个toplevel变量是什么意思 :stuck_out_tongue:

老司机碰到git这种复杂的怪物也会翻车

magit里选择性stage的功能在命令行里很难做到吧?我觉得这个功能很有用

可以的, git add -i 有时候由于编码等问题导致在 magit 中无法 stage hunk 时,我会切换到命令行这样用。

1 个赞