=== Zsh 中的 Git

(((zsh)))(((tab completion, zsh)))(((shell prompts, zsh)))
Git 还为 Zsh 提供了一个 Tab 补全库。
复制 `contrib/completion/git-completion.zsh` 到你的 home 目录，然后在 `.zshrc` 中 source 即可。
相对于 Bash，Zsh 的接口更加强大：

[source,console]
----
$ git che<Tab>
check-attr        -- 显示 gitattributes 信息
check-ref-format  -- 检查引用名称是否符合规范
checkout          -- 从工作区中检出分支或路径
checkout-index    -- 从暂存区拷贝文件至工作目录
cherry            -- 查找没有被合并至上游的提交
cherry-pick       -- 从一些已存在的提交中应用更改
----

意义不明的 Tab 补全并不仅仅会被列出；它们还会有帮助性的描述，你可以通过不断敲击 Tab 以图形方式浏览补全列表。
该功能可用于 Git 命令、它们的参数和在仓库中内容的名称（例如 refs 和 remotes），还有文件名和其他所有 Zsh 知道如何去补全的项目。

在提示符自定义方面，Zsh 很好地兼容了Bash，并允许你同时使用一个右侧提示符。
把如下代码添加至你的 `~/.zshrc` 文件中，就可以在右侧显示分支名称：

[source,console]
----
setopt prompt_subst
. ~/git-prompt.sh
export RPROMPT=$'$(__git_ps1 "%s")'
----

当你的命令行位于一个 Git 仓库目录时，在任何时候，都可以在命令行窗口右侧显示当前分支。
它看起来像这样：

.自定义 `zsh` 提示符.
image::images/zsh-prompt.png[自定义 `zsh` 提示符.]

Zsh 本身已足够强大，但还有一些专门为它打造的完整框架，使它更加完善。
其中之一名为 "oh-my-zsh"，你可以在 https://github.com/robbyrussell/oh-my-zsh[] 找到它。
oh-my-zsh 的扩展系统包含强大的 Git Tab 补全功能，且许多提示符 "主题" 可以展示版本控制数据。
<<roh_my_zsh_git>> 只是可以其中一个可以通过该系统实现的例子。

[[roh_my_zsh_git]]
.一个 oh-my-zsh 主题的示例.
image::images/zsh-oh-my.png[一个 oh-my-zsh 主题的示例.]
