如何在Ubuntu上安装带有自动补全和man文档的hub(git包装器)?

根据官方文档,您只需下载预编译的二进制文件,但这将导致man文档和自动补全功能无法正常工作。

如果你已经找到了答案,你可能想要接受任何一个回答。 - Anwar
4个回答

你可以使用这个PPA来安装hub作为一个软件包:
sudo add-apt-repository ppa:cpick/hub
sudo apt-get update
sudo apt-get install hub

你知道这个设置是否启用了自动完成和git别名吗? - Bryce Drennan
@Bryce 看起来最新的软件包(2.2.9-0ubuntu0ppa1)包含了一个bash自动补全脚本,但没有man页面或后安装脚本。 - Eugene Yarmash
1ppa:cpick/hub多年未更新,并提供了一个非常老旧的hub版本。 - Mike Slinn
如需了解有关如何添加包含 Hub 的存储库的更多最新信息,请访问此处:https://github.com/github/hub/issues/718 - Thomas David Baker

更新的答案

正如PatKilg在评论中指出的那样,Hub的维护者现在不鼓励使用snap。

原始答案

Hub现在可以作为一个snap包使用。https://snapcraft.io/hub

您可以使用sudo snap install --classic hub进行安装。


1很遗憾,Windows Subsystem for Linux不支持snap。 - Mike Slinn
1通过snap安装是官方不推荐的方式,维护者建议查看https://github.com/github/hub上的README文件。 - PatKilg

安装 Hub

  1. 从 Github 下载 Hub

    https://github.com/github/hub/releases

  2. 解压缩。我将其解压到我的主目录下的 Apps/ 文件夹,并将其重命名为 hub-linux。所以,在我的设置中,bin 文件夹的完整路径是 /home/anwar/Apps/hub-linux/bin

  3. 现在打开 ~/.bashrc 文件,并将 hub 二进制文件的路径添加到 $PATH 环境变量中。添加如下一行即可。

    ### Adds Hub-linux
    export PATH="$PATH:$HOME/Apps/hub-linux/bin/"

不要忘记在设置中使用实际路径
添加Bash自动补全
为了添加Bash自动补全,我们需要告诉Bash去引用hub-archive附带的自动补全文件。该自动补全文件位于提取的hub文件夹的etc文件夹中。为此,
打开.bashrc文件并在其中写入以下内容
### Load Hub Linux bash completion
if [ -f $HOME/Apps/hub-linux/etc/hub.bash_completion.sh ] ; then
     . $HOME/Apps/hub-linux/etc/hub.bash_completion.sh
fi

不要忘记根据您的设置替换hub.bash_completion.sh文件的确切路径

现在,您应该能够使用hub bash完成

将Hub的手册添加到man数据库中

Hub的手册实际上是随存档一起提供的。它位于share文件夹中。要添加手册,我们需要将其放入手册目录中。

为此,请打开终端并cd到提取的hub存档中。假设您当前的目录与hub的binshareREADME.md所在的目录相同,请使用以下命令复制手册:

sudo cp -r share/ /usr/
sudo chmod 644 /usr/share/man/man1/hub.1

现在你可以使用man hub命令来查看hub的手册页面。
如果你无法立即使用man hub,请使用sudo updatedb来刷新系统的man数据库。

这个脚本在Ubuntu 16.04和zsh下应该能完成工作。
# Install binary and documentation
wget https://github.com/github/hub/releases/download/v2.2.9/hub-linux-amd64-2.2.9.tgz
tar zvxvf hub-linux-amd64-2.2.9.tgz
sudo ./hub-linux-amd64-2.2.9/install

# Setup autocomplete for zsh:
mkdir -p ~/.zsh/completions
mv ./hub-linux-amd64-2.2.9/etc/hub.zsh_completion ~/.zsh/completions/_hub
echo "fpath=(~/.zsh/completions $fpath)" >> ~/.zshrc
echo "autoload -U compinit && compinit" >> ~/.zshrc

# add alias
echo "eval "$(hub alias -s)"" >> ~/.zshrc

# Cleanup
rm -rf hub-linux-amd64-2.2.9

对于使用bash的Ubuntu 16.04,也可以选择以下方法:
# Install binary and documentation
wget https://github.com/github/hub/releases/download/v2.2.9/hub-linux-amd64-2.2.9.tgz
tar zvxvf hub-linux-amd64-2.2.9.tgz
sudo ./hub-linux-amd64-2.2.9/install

# Setup autocomplete for bash:
mkdir -p ~/.bash/completions
mv ./hub-linux-amd64-2.2.9/etc/hub.bash_completion.sh ~/.bash/completions/_hub
echo "if [ -f ~/.bash/completions/_hub ]; then" >> ~/.bashrc
echo "    . ~/.bash/completions/_hub" >> ~/.bashrc
echo "fi" >> ~/.bashrc

# add alias
echo "eval "$(hub alias -s)"" >> ~/.bashrc

# Cleanup
rm -rf hub-linux-amd64-2.2.9

测试安装:
hub version

你的 Bash 脚本包含了这行代码 echo "eval "$(hub alias -s)"" >> ~/.zshrc。这看起来像是 zsh 的东西,而不是 bash 的?(我是一个 *nix 新手,所以我知道什么呢) - Sam Axe
谢谢,Bash 版本适合我。一个注意点,如果想使用其他版本的 hub,请在脚本中将 2.2.9 替换为 2.14.2(或其他版本号)。 - Huanfa Chen