3 个版本 (稳定)
使用旧的 Rust 2015
1.0.1 | 2023 年 7 月 27 日 |
---|---|
1.0.0 | 2021 年 2 月 22 日 |
0.1.0 | 2017 年 6 月 22 日 |
#883 在 命令行实用工具
245KB
443 行
为您的 shell 提供信息丰富的版本控制提示
一个小程序,用于在 shell 提示(如 Bash 或 ZSH)中打印当前 git/hg 仓库的摘要。
您可以选择两种样式——一种包含完整详情,另一种为最小化样式。两种样式都可以按您的喜好进行配置。
详细样式
详细样式显示 VCS 名称或符号、您的当前分支、您相对于跟踪分支领先/落后的提交数量以及已暂存的文件、已更改的文件、未跟踪的文件和冲突的数量。
最小化样式
最小化样式仅显示当前分支,并将仓库状态编码在 VCS 符号的颜色中:绿色表示干净,黄色表示存在未跟踪文件或未暂存更改,红色表示存在已暂存文件。
提示结构
详细格式的通用结构是
{vcs name/symbol}{branch}{branch tracking}{operations}|{local status}
最小化格式的结构是
{branch}{colored vcs symbol}
{VCS 名称/符号}
您可以显示 VCS 名称(例如 git 或 hg)或仅显示符号(例如 ± 或 ☿)。
{分支}
这只是当前分支的名称。在 Mercurial 仓库中,当前书签的名称也显示在那里(例如,default*mybookmark
)。
{分支跟踪}
↑n ahead of remote by n commits
↓n behind remote by n commits
↓m↑n branches diverged, other by m commits, yours by n commits
分支跟踪符号仅对 Git 仓库显示
{操作}
这是一个正在进行的操作列表,例如合并(|MERGING
)或二分搜索(|BISECTING
)。
{本地状态}
✔︎ repository clean
✚n there are n staged files
✖︎n there are n unmerged files
↻n there are n modified (but unstaged) files
…n there are n untracked files
Mercurial 会自动暂存已更改的文件,因此 已修改 文件始终显示为 已暂存。
安装
您可以下载一个 二进制发行版 或使用以下方法之一安装 rust-vcprompt。
Homebrew
在 MacOS 上,您可以使用 Homebrew
$ brew tap sscherfke/rust-vcprompt
$ brew install rust-vcprompt
Cargo
您可以使用 Cargo 直接从 crates.io 安装
$ cargo install --root=$HOME/.local vcprompt
从源代码构建
- 安装 Rust 和 Cargo。
- 克隆此仓库并
cd
进入。 - 运行
cargo build --release
。 - 将
target/release/vcprompt
复制到您的PATH
中某个位置。
使用和自定义
将 $(vcprompt)
(或使用最小风格,则为 $(vcprompt --minimal)
) 插入到您的 shell 的提示变量中(例如,在 PS1
在 .bashrc
或 PROMPT
在 .zshrc
中)。
您可以通过在 shell 的配置文件中导出以下环境变量之一来自定义输出的外观
export VCP_PREFIX=" "
export VCP_NAME="{symbol}" # You can use "value" or "symbol" here
export VCP_BRANCH="{blue}{value}{reset}"
export VCP_OPERATION="{red}{value}{reset}"
export VCP_BEHIND="↓{value}"
export VCP_AHEAD="↑{value}"
export VCP_SEPARATOR="|"
export VCP_STAGED="{blue}✚{value}" # +
export VCP_CONFLICT="{red}✖︎{value}" # ×
export VCP_CHANGED="{yellow}↻{value}" #
export VCP_UNTRACKED="{magenta}…{value}"
export VCP_CLEAN="{green}✔︎" # ✓
export VCP_SUFFIX="{reset}"
上面的值是默认值,并且按照它们在输出中出现的顺序排列。
占位符 {value}
/{symbol}
将被相应的值替换。占位符 {reset}
、{bold}
、{black}
、{red}
、{green}
、{yellow}
、{blue}
、{magenta}
、{cyan}
和 {white}
将被相应的 ANSI 颜色代码替换。
最小风格仅使用变量 VCP_PREFIX
、VCP_BRANCH
、VCP_BEHIND
、VCP_AHEAD
和 VCP_SUFFIX
。
为什么?
此程序受 oh-my-zsh git-prompt 和原始的 vcprompt C 实现 的启发(并可以配置为与它们兼容)。
Rust-vcprompt 比 Python git-prompt(和类似的 Python 脚本)快得多。在我的机器上,对于较小的仓库,它需要 ~12ms,而对于有数千个提交的仓库,它需要 ~24ms,而 Python 实现至少需要 50ms。这使得 rust-vcprompt 更适合同步提示(您通常使用的提示)。
C 实现的性能与 rust-vcprompt 相当,也支持更多的版本控制系统。然而,rust-vcprompt 在格式化提示方面提供了更多的灵活性。