EAF Git Client 手册
Emacs
EAF
2022-04-22 2642字

一直用Emacs的magit来做Git代码管理,直到有一天终于忍受不了magit, 萌生自己动手写一个Git客户端的想法。

主要不满意magit的地方:

  1. 速度慢:稍微大一点的仓库,启动和搜索都很慢
  2. 难记忆:magit主要靠按键菜单的组合来实现Git操作,现在年纪大了,magit操作很多都用连续快捷键,真的记不住
  3. 不直观:我希望面向Git使用场景提供直观的图形界面进行快速操作,magit界面默认就是密密麻麻的快捷键菜单,有时候真的不知道从何下手

经过20多天下班时间的开发,目前EAF Git Client已经在日常完全替换magit,并具备以下优点:

  1. 超大日志搜索: 支持100万级别(Linux内核)的日志浏览和搜索,完全覆盖世界上绝大多数仓库的高性能搜索
  2. 超高性能:设计时就充分利用多线程技术,不会有任何一个操作会卡住Emacs, 一秒都不会停顿
  3. 直观界面操作:根据日常应用场景,顶部按1~5键切换页面,每个页面都有完整按键帮助,第一天上手就可以使用,不需要任何学习门槛
  4. 日志对比窗口:支持两个分支日志差异对比,方便做rebase和cherry-pick操作,不需要来回切换分支查看日志去确认
  5. Submodule完整支持:除了基本的添加和删除,包括子模块的更新和版本回滚都是内置的
  6. Stash完整支持:包括Stash的创建、应用、弹出、删除和Diff操作
  7. 贴心小功能:首页Diff实时预览、一键Push操作、一键回滚本地补丁、自动创建本地分支…

下面就针对EAF Git Client功能进行完整介绍。

首页

Dashboard

首先,EAF Git Client从上到下分成三个部分:顶部导航栏、中间内容区域和底部帮助区域。按数字1~5键可以快速切换到不同页面执行对应的场景命令,也可以按h或l这两个按键进行页面左右切换。

首页主要有四个区域:

  1. Status: 显示当前项目的修改状态,按j或k键可以上下切换,这时可以按s或者d按键接受修改或删除修改
  2. Preview: Status上下切换时,会实时预览对应的Diff内容, Diff内容可以通过按,或者.键上下滚动
  3. Stash: 切换分支时,可以按x键把所有修改都暂时存储起来,方便分支切换后恢复内容
  4. Unpush: 当你按c或C键添加一个新的Commit后,Unpush区域就会显示这些还未Push到远程分支的补丁

首页除了基本的pull和push操作外,还有一些比较贴心的功能:

  1. 按n和p键可以选择代码块,按S键可以对选择的代码块进行Stage操作,当你需要基于代码块来构建补丁的时候非常方便
  2. 按C键可以对所有修改快速Commit,不用一个文件一个文件的做Stage操作
  3. 按Y键可以在提交Commit标题后自动Push到远程分支
  4. 按z键自动撤销所有本地修改代码
  5. 按m键可以自动拷贝当前分支的所有修改到镜像仓库,不用一个文件一个文件的拷贝,提升文件拷贝效率
  6. 按S键可以针对代码块进行stage或unstage操作,按D键删除代码块
  7. 按a键输入PR的number,自动Fetch PR并创建一个新的分支用于测试GitHub PR

日志

Log

日志页面最强大的功能就是通过虚拟列表技术实现100万级别日志的显示,即使大如Linux内核这般的项目都可以全局搜索。

日志页面第二强大的功能是,按i键可以显示对比分支日志,方便你左右快速对比后进行分支合并操作(按b键)和拷贝补丁到另外分支(按c键)。

你也可以通过按m/u/U这三个按键快速进行多选,其他一些常用的操作包括:

  1. 补丁查看:直接回车即可
  2. 回滚补丁:按R键
  3. 删除最后一个补丁:按z键
  4. 删除选中到最后范围内所有补丁:按Z键
  5. 搜索日志: 按Ctrl + s键
  6. 拷贝当前补丁链接: 按x键
  7. 拷贝当前补丁ID: 按X键

分支

Branch

分支界面左边显示本地分支,右边显示远程分支,这个界面的操作非常简单:

  1. 切换本地分支:选中后直接回车
  2. 新建本地分支:按n键,会基于当前分支的内容Clone一个新的分支
  3. 删除本地分支:按d键
  4. 获取远程分支:按f或F键
  5. 以远程分支为基础创建本地分支:按c键会根据你选择的远程分支创建本地分支,并自动切换到新建的本地分支

储藏

Stash

Stash的概念是,你有几个不同分支,你还没有完成当前分支的编码工作,又不得不切换到其他分支,同时也不想提交未完善的临时代码,就可以用Stash Push操作来存储所有临时代码(在首页按x键)。

当你完成另外一个分支的操作并切换会原来的分支后,你就可以切换到Stash页面恢复临时存储的代码:

  1. 恢复选中的临时代码:按y键,这样操作一般比较安全,即使恢复后文件冲突,也可以根据未删除的Stash信息再次恢复
  2. 恢复最后一个临时代码:按p键,这个操作会同时删除最后一个Stash记录
  3. 丢弃临时代码:直接按d键
  4. 查看补丁:回车即可

子模块

Submodule

Submodule特别适合做Emacs插件管理,下面我按照平常尝鲜Emacs插件的流程来介绍怎么用子模块:

  1. 看到一个好的插件,切换到子模块页面,按a键下载插件,然后切换到首页,按C键提交
  2. 用过一段时间,感觉新插件不好用,按d键移除插件,然后切换到首页,按C键提交即可删除插件
  3. 插件用一段时间后,想升级看看,这时候可以直接按u键升级插件到最新的代码,注意这时候不要切换到首页提交,可以先用一段时间
  4. 插件更新版本用一段时间后觉得很稳定,切换到首页,按C键提交
  5. 插件更新版本用一段时间后觉得不稳定,在子模块页面,直接按r键就会自动恢复插件版本到上一次记录的稳定版本

通过这种方式既可以尝鲜很多插件的最新版,又可以在最新版不稳定的时候即时回滚到稳定版本,不会因为一键升级插件后无法回滚而浪费很多时间去折腾新版插件。

非图形化功能

有时候,并不需要弹出图形化操作,希望基于当前环境快速进行一些日常操作:

  1. eaf-open-git: 打开EAF Git图形客户端, 哈哈哈哈
  2. eaf-git-clone: 直接执行git clone操作
  3. eaf-git-pull: 直接执行git pull操作
  4. eaf-git-push: 直接执行git push操作
  5. eaf-git-show-history: 显示当前光标处代码的编辑历史,比git blame和git log -S都要好用很多
  6. eaf-git-get-permalink: 获取当前光标处的Git Web链接, 比传统打开浏览器用鼠标点击获取URL的方法要高效很多

最后

看着是不是很简单很方便? 即使你没有学过Git专业知识也可以按键操作,最爽的是这些按键都在底部有提示,忘记的时候可以瞟一下底部就可以行云流水的全键盘管理代码了。

欢迎Git高手加入我们的开发, 一起构建Emacs下最快的Git客户端。