2 个版本
0.1.4 | 2022 年 2 月 16 日 |
---|---|
0.1.3 | 2021 年 10 月 2 日 |
#2180 在 命令行工具
80KB
2K SLoC
Oaf,更好的 Git
Oaf 是一个 Git 客户端,它为 Git 带来了更友好的命令行界面。
它基于以下理念
- 合并用于将另一个分支引入的更改应用到当前分支。
- 分支中完成的提交与合并到分支中的提交不同。
- 合并是一个好事,应该被鼓励。它们通过在两组更改之间建立清晰的优先级来防止以后发生冲突。
- 合并可能会引入逻辑冲突,因此用户应该有机会在提交之前测试合并。
- 推送和拉取是同步两个相同分支副本的操作。
--
用于将选项与可能看起来像选项的输入分隔开,而不是将文件输入与其他类型的输入分隔开。- 同时处理多个分支应该尽可能简单。
- 用户应该有机会看到将当前工作合并到最终目标将引入哪些更改。
- 提交从未在磁盘上存在过的代码版本通常是一个坏主意。
- Git 索引(暂存区/缓存)是大多数用户无用的实现细节。
- 历史是有价值的,通常应该保留。它允许后来的读者理解更改被引入的确切上下文。
与 Git 的不同之处
新命令
merge-diff
命令用于显示如果您提交并将更改合并到分支会发生什么。cat
命令用于检索旧版本的文件。fake-merge
假装合并一个分支,实际上不对本地内容进行任何更改。squash-commit
将当前提交集转换为单个提交。ignore
通过更新 .gitignore 忽略指定的文件
作为 Git 外部命令的新命令
所有新命令也可以用作 Git 外部命令,只要可以通过以 'git-' 前缀命名的名称访问 oaf 二进制文件即可。例如,通过运行以下命令 ln -s ~/.local/bin/oaf ~/.local/bin/git-merge-diff
,然后你可以运行 git merge-diff
。 (这假设 ~/.local/bin 已在您的路径中,并且您在那里安装了 oaf。)
行为改变的命令
merge
默认为merge --no-ff --no-commit
。--no-commit
(1.).--no-ff
是因为merge
和pull
是不同的。pull
使用--ff-only
(5.).log
默认只显示当前分支(及其祖先)的提交。 (2.)- 对于尚未推送过的分支,
push
将自动使用当前分支的名称推送到origin
。 switch
允许您在不提交或显式暂存待处理更改的情况下继续工作。 (7.)commit
默认为-a
(10.). 要仅提交某些更改,请考虑使用oaf stash [-p]
临时移除不想要的更改。这为您提供了一个在提交之前测试该版本的机会 (8.).diff
默认以 HEAD 作为其源 (10.). 它提供源和目标作为选项 (6.). 它默认为耐心差分,优先考虑连续匹配而非更长、分割的匹配。restore
默认以 HEAD 作为其源 (10.).status
使用简短格式。在确定文件是否已更改时,它(实际上)将工作树与 HEAD 进行比较 (10.).
注意:如果您只想查看新命令,而不是行为改变,请参阅上面的“将新命令用作 Git 外部命令”。
已废弃的命令
checkout
已被switch
或restore
取代。
未改变的命令
所有未在 oaf help
中列出的命令将自动转到 git
。因此,oaf write-tree -h
与 git write-tree -h
相同。
扩展
因为 oaf
转接到 git
,所以 oaf
也会转接到外部 git 命令。因此,也可以使用 oaf lfs
调用 git-lfs
。目前,Oaf 不支持扩展的原生支持。
互操作性
文件格式兼容性
Oaf 是 Git 的前端,因此其所有对仓库的操作都是通过调用 Git 命令来执行的。它所做的一切都可以通过一系列 Git 命令来完成,这意味着一切都与 Git 完全兼容。
与其他用户的交互
使用 merge
可以提高机械互操作性,但可能会与一些 Git 用户和工具产生摩擦。大多数开发者会同意,在分支上下文中引入的更改是特殊的,但有些人不希望使用父级机制来区分分支提交和合并提交。正因为如此,他们认为所有合并都会影响可读性。
由于维护父级祖先关系不是首要任务,他们可能会通过快速前进“合并”来弄乱它,特别是 foxtrot “合并”。
请注意,使用 rebase
代替 merge
也可能影响互操作性,这是一个两难的局面,但 Git 用户已经长期接受了。
安装
Oaf 处于早期阶段,因此只提供 x86-64 的二进制文件。
它使用 Rust 语言编写,因此您需要安装 Rust 工具链才能从源代码安装。最简单的方法是:cargo install --locked oaf
。这将安装最新发布的版本。
为了 Oaf 能够正常运行,必须安装 Git。Oaf 通常与 Git 2.25.x 版本一起测试。
历史
Oaf 从我的先前工作中获得了一些灵感
尽管 Git 仓库格式胜过了 Bazaar,但许多来自 Bazaar 用户模型的概念可以应用于 Git。Oaf 是我尝试开始这样做的一种尝试。还有 Breezy,这是一个带有内置 Git 支持的 Bazaar 分支。
依赖项
~1.6–2.2MB
~34K SLoC