EAF Git Client [Emacs高性能 Git 客户端]

Cherry-Pick 操作已经完成,比如当前在 master 分支,按 i 键打开‘对比分支’, 可以直观的看到两个分支的commit差异,然后直接按 c 键把选择或标记的 commints 从 master 分支拷贝到 cool 分支。

这个操作对于维护多个分支同时只挑选指定补丁到另外一个分支的场景特别有用,整个操作非常直观,同时提升了几方面的效率:

  1. 选择 Commit 的时候可以直接使用当前选择行或者已经标记的补丁,不用像命令行那样反复粘贴 commint id
  2. 两个分支对比查看视图,不用来回切换分支后查看Log列表再人眼对比,一眼就可以看到两个分支的差异,快速决策那些Commint需要 Cherry-Pick 操作
  3. 保持当前分支不变:Git的流程是 ”记录Commint-ID → 切换分支 → 执行 Cherry-Pick 操作 → 再切换会当前分支", 来回操作非常麻烦,EAF Git Client 会把这四个步骤压缩成一个按键,Cherry-Pick 操作完成后自动切换回当前分支

这就是我上面和大家说的 magit 差别, magit 更像是一个 Git 命令的菜单界面,需要用户自己研究 Git 命令后组合按键去完成操作,magit只是节省了输入命令的时间。而EAF Git不光节省了时间,还不需要用户去学习 git log、git branch 、git stash、git cherry-pick等知识,用户只需要知道 Log 界面有一个 "拷贝选中补丁到其他分支“ 这个功能就可以了,使用门槛会低很多。

4 个赞

EAF Git 还有这些功能还未完成,每天前进一点,现在我已经完全用 EAF Git 替代magit来完成日常的 Git 维护了,性能秒开,操作也相对于 magit 更直觉化。

1 个赞

今天用 Ripgrep 来搜索Git Log, 测试了一下, 13万条 commint , 实时搜索关键字,一点也不卡。

6 个赞

在浏览器中,当直接渲染10万级别的列表时,浏览器渲染Layout的时间需要 22 秒,今天采用虚拟列表的技术,实现了可视区域渲染,也就是说渲染列表的时间是常量,和列表长度无关。

通过这个补丁以后, EAF Git Client 不论是加载Linux级别(100万补丁)还是1000万级别的 Commits,都是秒开,包括加载、移动和搜索都是实时的。

这样做的好处是,不论多大的项目,我们都可以把他所有提交历史都加载进去,搜索所有Commit提交历史。

13 个赞

EAF Git Client 已经支持所有 submodule 操作,包括查看、添加、删除、更新、回滚。

现在可以利用 EAF Git Client 作为Emacs的包管理器:

  1. 随便添加一个插件,先用一下,不好用就直接删除 submodule
  2. 插件更新以后,随时调用 EAF Git Client 更新功能,更新插件到最新版本
  3. 插件更新后先用几天,如果没有问题就 Commit, 如果用几天发现有bug, 调用 EAF Git Client 回滚功能,会自动把插件回滚到上一次 Commit 的稳定版本

这种基于内置Submodule完整功能的方式是最轻量级别的包管理器,不需要学习现有那些Elisp包管理器的语法糖,用最简单的 require 代码写配置。

EAF Git Client功能状态:

  1. Dashboard: pull、push、stage、delete stage、commit、checkout
  2. Log: diff、mark、rebase、cherry-pick、revert、reset
  3. Brach: new、delete、switch
  4. Stash: diff、apply、drop、apply
  5. Submodule: view、add、remove、update、rollback

目前基本使用完全没有任何问题了,我已经100%替代 magit 进行日常 Git 操作。

EAF Git Client相对于magit的优势:

  1. 超大Log支持: EAF Git Log支持100万级别(Linux内核)的日志浏览和搜索,完全覆盖世界上绝大多数仓库的高性能搜索,magit遇到大的仓库做不到 100万 Log 搜索;
  2. 超高性能:EAF Git 设计是就充分利用多线程技术,不会有任何一个操作会卡住Emacs, 一秒都不会停顿
  3. 直观界面操作:根据日常应用场景,顶部按 1 ~ 6的按键切换页面,每个页面都有完整按键帮助,第一天上手就可以使用,不需要任何学习门槛
  4. 日志对比窗口:日志页面,按 i 按键在右边弹出其他分支日志,左右就可以知道 master 和 develop 分支的日志差别,直接做 rebase 和 cherry-pick 操作,不需要来回切换分支查看日志去确认
  5. Submodule完整支持:除了基本的添加和删除,包括子模块的更新和版本回滚都是内置的,对submodule子路径支持非常好,删除也非常干净(我最开始给 magit 贡献的 submodule 代码基本上被作者改废了,子路径支持很差)
  6. 贴心小功能:比如commint_and_push操作,一键就可以输入 message 并自动进行 push 操作,减少中间步骤。内置 reset_last 功能,一键撤销最后一个补丁等等…

EAF高级功能: EAF还有一些高级功能正在陆续开发,比如:

  1. 集成对Github PR的review和测试功能
  2. diff 大型二进制文件,比如图片时直接显示
  3. Blamer交互时光机,快速知道代码相关的修改历史

13 个赞

Remote fetch、 fetch all、git switch 的功能已经完成。

3 个赞

耗时二十多天的下班时间,第一帖的预计任务都开发完成了,我已经完全从 magit 切换到 EAF git client, 按键从原来需要记忆几十个到现在只用记三个快捷键就行了。

现在可以用EAF Git Client轻松管理各种复杂的Git操作了。

PS: 还剩上图的一些小任务,完全不影响日常的使用,剩下的任务当每天的智力题。

5 个赞

谢谢,这波已经起飞

1 个赞

我写了一个完整的使用手册《EAF Git Client 手册》EAF Git Client 手册

大家有空可以看一下,特别适合Git入门看。 :wink:

11 个赞

对Submodule添加了最后更新的时间,可以方便的管理插件的更新节奏。

1 个赞

hunk的stage操作已经支持了,感谢 @EdmondFrank 大佬的补丁。

增加了一个新的命令 eaf-git-get-permalink 命令,这个命令可以直接获取光标处的 github 链接,方便分享给别人, 不用每次打开浏览器点击网页左边的 permalink 按钮。

提高了相互交流代码细节的效率。

手册里面没有安装说明。

装好EAF就好了,依赖EAF

试试git alias

哈哈哈,我magit都嫌麻烦的人,不喜欢打命令。

我目前只用过git,没用过magit,所以不能发表啥,:joy: 我只是在terminal里用git,然后用linux alias与git alias做自己个性化缩减配置😁

2 个赞

Traceback (most recent call last): File “/home/yqu212/repos/.emacs.d/lib/eaf/core/utils.py”, line 50, in on_signal_received self._func(obj, *args, **kwargs) File “/home/yqu212/repos/.emacs.d/lib/eaf/eaf.py”, line 153, in new_buffer self.create_buffer(buffer_id, url, module_path, arguments) File “/home/yqu212/repos/.emacs.d/lib/eaf/eaf.py”, line 171, in create_buffer app_buffer = module.AppBuffer(buffer_id, url, arguments) File “/home/yqu212/repos/.emacs.d/lib/eaf/app/git/buffer.py”, line 242, in init self.last_commit_message = self.last_commit.message.splitlines()[0] UnicodeDecodeError: ‘gb2312’ codec can’t decode byte 0x97 in position 4: illegal multibyte sequence

eaf-git似乎不能处理中文。

可以帮忙提个issue和样本到github吗?谢谢