#git-workflow #git #workflow #cli-tool #cli

app gex

受 Magit 启发的 Git 工作流改进 CLI 工具

20 个不稳定版本 (5 个破坏性更新)

0.6.4 2023年11月12日
0.6.0 2023年7月25日
0.3.7 2023年1月25日
0.3.6 2022年12月28日
0.3.3 2022年8月30日

#164 in 开发工具

Download history 15/week @ 2024-03-10 3/week @ 2024-03-17 10/week @ 2024-03-31 1/week @ 2024-04-07 1/week @ 2024-05-19

每月81次下载

MIT/Apache

110KB
2.5K SLoC

Gex

crates.io download license stargazers

注意:GEX 是未完成软件。 因此,许多功能尚未实现,界面可能随时更改。

Gex

受 Magit 启发的 Git 工作流改进 CLI 工具。 此项目仍在初期开发中,但我正在积极使用它,并 应该 会相对快速地添加新功能。

目标

这主要是一个个人项目,因为我最近从 Emacs 切换到 Neovim,并怀念使用 Magit 的简单性和效率。然而,我还有一些一般性的目标,这些目标可能会改变

  • 简单 - 界面简洁。
  • 直观 - 应该很容易学会使用 gex。
  • 跨平台 - 主要关注 Linux,但应该能在 Windows 和 MacOS 上很好地运行。
  • 可配置 - gex 中的一些首选项应可配置,以适应您的工作流程。
  • 全面* - 您应该能够使用 gex 做到在 git 中能做的一切。

* gex 支持使用 : 执行任意 git 命令,当某些功能尚未可用时。

非目标

  • Magit 端口

虽然它是一个重要的灵感来源,但我不试图 1:1 端口 Magit 的行为和功能。

安装

Crates.io

crates.io

注意: 使用此安装方法,您需要在系统中安装 Rust

$ cargo install gex

其他

Gex 软件包也在几个仓库中由社区维护。

Packaging status

使用方法

要进入 gex,只需在控制台中输入 gex,可选地提供路径。

$ gex

完整使用方法

$ gex --help

Git workflow improvement CLI tool inspired by Magit

Usage: gex [OPTIONS] [PATH]

Arguments:
  [PATH]  The path to the repository [default: .]

Options:
  -c, --config-file <PATH>  Path to a config file to use
  -h, --help                Print help
  -V, --version             Print version

导航

动作
j / 向下移动
k / 向上移动
J 跳转到下一个文件
K 跳转到上一个文件
Tab / 空格 切换展开
g 跳转到顶部
G 跳转到底部

Gex 动作

动作
文本 阶段项目
S 阶段所有项目
u 取消阶段项目
U 取消阶段所有项目
e 编辑文件/块
F 从远程拉取
: 执行git命令
! 执行子进程
r 刷新
Esc 取消当前操作
q 退出gex

Gex命令

动作
c 提交
b 分支
p 推送
z 暂存

配置

Gex将在以下位置查找配置文件:

操作系统 路径
Linux Linux: $XDG_CONFIG_HOME/gex/config.toml
MacOS MacOS: $HOME/Library/Application Support/gex/config.toml
Windows Windows: {FOLDERID_RoamingAppData}/gex/config.toml

以下是一个示例 config.toml

[options]
auto_expand_files = false
auto_expand_hunks = true
editor = "nvim" # defaults to git's core.editor or $EDITOR or "vi"
lookahead_lines = 5
sort_branches = "-committerdate" # key to pass to `git branch --sort`. https://git-scm.cn/docs/git-for-each-ref#_field_names
truncate_lines = true # `false` is not recommended - see #37
ws_error_highlight = "new" # override git's diff.wsErrorHighlight

# Named colours use the terminal colour scheme. You can also describe your colours
# by hex string "#RRGGBB", RGB "rgb_(r,g,b)" or by Ansi "ansi_(value)".
#
# This example uses a Gruvbox colour theme.
[colors]
foreground = "#ebdbb2"
background = "#282828"
heading = "#fabd2f"
hunk_head = "#d3869b"
addition = "#b8bb26"
deletion = "#fb4934"
key = "#d79921"
error = "#cc241d"

[keymap.navigation]
move_down     = ['j', "Down"]
move_up       = ['k', "Up"]
next_file     = ['J']
previous_file = ['K']
toggle_expand = [" ", "Tab"]
goto_top      = ['g']
goto_bottom   = ['G']

版本控制

版本号从 0.X 增加表示可能破坏某些人工作流程的一些更改。这很难定义,所以如果它不符合您的期望,请见谅。通常这意味着更改默认设置或重新设计UI的部分。

版本号从 0.x.Y 增加表示不会破坏任何工作流程的更改 - 即修复错误或添加功能。

增加的任何数字都故意与更新的 大小 无关。

1.0.0 将在我认为软件“完成”时到来,前提是可以进行小的改进/功能或错误修复。这意味着什么非常主观,并且我的想法可能会随着项目的进展而演变。

许可证

本项目可双重许可,您可以选择以下之一:

任选其一。

贡献

请参阅 CONTRIBUTING.md

除非您明确声明,否则根据Apache-2.0许可证定义,任何有意提交以包含在作品中的贡献,将根据上述方式双重许可,而不附加任何额外条款或条件。

依赖项

~12–24MB
~383K SLoC