194

例如,在一台新的 ubuntu 机器上,我刚刚运行sudo apt-get git,输入 eg 时没有完成git check[tab]

我在http://git-scm.com/docs上没有找到任何东西,但是 IIRC 完成现在包含在 git 包中,我只需要在我的 bashrc 中输入正确的条目。

4

14 回答 14

255

在 Linux 上

在大多数发行版上,安装 git 时都会将 git 补全脚本安装到/etc/bash_completion.d/(或/usr/share/bash-completion/completions/git)中,无需去 github。您只需要使用它 - 将此行添加到您的.bashrc

source /etc/bash_completion.d/git
# or
source /usr/share/bash-completion/completions/git

在某些版本的 Ubuntu 中,默认情况下 git 自动完成功能可能会被破坏,通过运行此命令重新安装应该可以修复它:

sudo apt-get install git-core bash-completion

在 Mac 上

您可以使用 Homebrew 或 MacPorts 安装 git 补全。

家酿

如果$BASH_VERSION> 4:(brew install bash-completion@2更新版本)请特别注意您拥有的 bash 版本,因为 MacOS 默认随附 3.2.57(1)-release。

添加到.bash_profile

  [[ -r "/usr/local/etc/profile.d/bash_completion.sh" ]] && . "/usr/local/etc/profile.d/bash_completion.sh"

对于旧版本的 bash:brew install bash-completion

添加到.bash_profile

[ -f /usr/local/etc/bash_completion ] && . /usr/local/etc/bash_completion

MacPorts

sudo port install git +bash_completion

然后将此添加到您的.bash_profile

if [ -f /usr/share/bash-completion/bash_completion ]; then
    . /usr/share/bash-completion/bash_completion
fi

本指南中的更多信息:安装 Bash git 完成

请注意,在所有情况下,您都需要创建一个新的 shell(打开一个新的终端选项卡/窗口)才能使更改生效。

于 2013-09-19T15:16:52.250 回答
82

我有同样的问题,请按照以下步骤操作:

curl https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash -o ~/.git-completion.bash

然后将以下行添加到您的.bash_profile(通常在您的主文件夹下)

if [ -f ~/.git-completion.bash ]; then
  . ~/.git-completion.bash
fi

来源:http ://code-worrier.com/blog/autocomplete-git/

于 2013-11-09T13:13:43.490 回答
57

您看到的大多数说明都会告诉您下载

https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash

并在您的 bash 启动脚本中获取它,例如.bashrc.

但这有一个问题,因为它引用的master是最新版本的分支git-completion.bash。问题是有时它会因为与您安装的 git 版本不兼容而中断。

事实上,现在这将被打破,因为该master分支的git-completion.bash新功能需要 git v2.18,而包管理器和安装程序还没有更新到该版本。你会得到一个错误unknown option: --list-cmds=list-mainporcelain,others,nohelpers,alias,list-complete,config

所以最安全的解决方案是引用与你安装的 git 匹配的版本/标签。例如:

https://raw.githubusercontent.com/git/git/v2.17.1/contrib/completion/git-completion.bash

请注意,它v2.17.在 URL 中有一个而不是master. 然后,当然,确保在 bash 启动脚本中获取它。

于 2018-06-19T01:26:35.440 回答
21

Ubuntu 14.10

安装git-corebash-completion

sudo apt-get install -y git-core bash-completion
  • 对于当前会话使用

    source /usr/share/bash-completion/completions/git
    
  • 让它在所有会话中始终打开

    echo "source /usr/share/bash-completion/completions/git" >> ~/.bashrc
    
于 2016-05-11T08:57:34.517 回答
17

https://github.com/git/git/blob/master/contrib/completion/git-completion.bash

您只需要获取完成脚本

于 2012-09-13T03:30:02.480 回答
14

只需在您的~/.bashrc:

source /usr/share/bash-completion/completions/git

其他答案告诉您 install bash-completion,您不需要这样做,但如果您这样做,则无需直接获取完成。你做一个或另一个,而不是两者兼而有之。

更通用的解决方案是按照 bash-completion 项目的建议查询系统位置:

source "$(pkg-config --variable=completionsdir bash-completion)"/git
于 2019-06-25T14:35:58.323 回答
6

在我的 ubuntu 上,这里安装了一个文件:

source /etc/bash_completion.d/git-prompt

您可以按照链接进入/usr/lib/git-core文件夹。您可以在那里找到说明,如何设置 PS1 或使用__git_ps1

于 2014-07-05T17:09:14.990 回答
3

可能对某人有帮助:--

从以下链接下载 .git-completion.bash 后,

curl https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash -o ~/.git-completion.bash

并尝试使用 __git_ps1 函数,我收到错误 -

 -bash: __git_ps1: command not found

显然我们需要从 master 单独下载脚本才能使这个命令工作,因为 __git_ps1 是在 git-prompt.sh 中定义的。与下载 .git-completion.bash 类似,获取 git-prompt.sh:

curl -L https://raw.github.com/git/git/master/contrib/completion/git-prompt.sh > ~/.bash_git

然后在您的 .bash_profile 中添加以下内容

source ~/.bash_git
if [ -f ~/.git-completion.bash ]; then
  . ~/.git-completion.bash
export PS1='\W$(__git_ps1 "[%s]")>'
fi

source ~/.bash.git 将执行下载的文件并

export PS1='\W$(__git_ps1 "[%s]")命令将在当前工作目录(如果它是 git 存储库)之后附加结帐分支名称。

所以它看起来像: -

dir_Name[branch_name]其中 dir_Name 是工作目录名称,branch_name 是您当前正在处理的分支的名称。

请注意——__git_ps1 区分大小写。

于 2016-08-02T06:51:14.253 回答
1

视窗

它最终如何在 Windows 10 命令行 (cmd) 上为我工作:

于 2020-09-22T13:05:44.733 回答
1

Arch Linux

来自 bash/usr/share/git/completion/git-completion.bash启动文件之一。

例如:

# ~/.bashrc

source /usr/share/git/completion/git-completion.bash

您也许可以在其他位置找到该脚本,/usr/share/bash-completion/completions/git但这些脚本对我不起作用。

于 2019-12-04T04:18:07.187 回答
0

macOS 通过 Xcode 开发者工具

在当前为 macOS 发布的所有答案中,这仅在jmt的一个非常简短的评论中提到......

如果您已经安装了 Xcode 开发者工具,那么您不需要下载任何新的东西。

相反,您只需要找到已经存在的git-completion.bash文件并将其源到您的.bashrc. 检查以下目录:

  • /Applications/Xcode.app/Contents/Developer/usr/share/git-core
  • /Library/Developer/CommandLineTools/usr/share/git-core

如果做不到这一点,git 本身可能会帮助你。当我git config按如下方式运行时,git 报告一个来自与gitconfig我位于同一目录中的文件的设置git-completion.bash

$ git config --show-origin --list
...
file:/Applications/Xcode.app/Contents/Developer/usr/share/git-core/gitconfig    credential.helper=osxkeychain
...

或者你总是可以蛮力搜索你的机器并喝杯咖啡:

$ find / -type f -name git-completion.bash 2>/dev/null

因此,我有以下插入~/.bashrc

# Git shell completion and prompt string on macOS
_git_dir="/Applications/Xcode.app/Contents/Developer/usr/share/git-core"
if [ -f "${_git_dir}/git-completion.bash" ]; then
    source "${_git_dir}/git-completion.bash"
fi
if [ -f "${_git_dir}/git-prompt.sh" ]; then
    source "${_git_dir}/git-prompt.sh"
fi
unset _git_dir

请注意,这也是 git prompt-string 脚本的来源,因为它位于同一目录中。

(在 macOS Catalina 中测试)

于 2021-08-10T21:08:40.483 回答
0

Ubuntu

这里有一个美丽的答案。在 Ubuntu 16.04 上为我工作

视窗

Git Bash是允许自动完成的工具。不确定这是否是标准分发的一部分,因此您会发现此链接也很有用。顺便说一句,Git Bash 允许使用Linux shell 命令在 windows 上工作,这对于有 GNU/Linux 环境经验的人来说是一件好事。

于 2017-02-01T17:33:07.410 回答
0

麦克M1

对于那些使用 Mac M1 环境的人,我可以通过 homebrew 安装:

brew install bash-completion

然后添加到我的 ~/.bash_profile 或 ~/.bashrc (无论你使用什么):

[[ -r "/opt/homebrew/Cellar/bash-completion/1.3_3/etc/profile.d/bash_completion.sh" ]] && . "/opt/homebrew/Cellar/bash-completion/1.3_3/etc/profile.d/bash_completion.sh"

您可能需要更新版本号 (1.3_3)。您只需要在该目录中查找它。我很想知道是否有更好的方法。

于 2021-01-06T00:33:43.010 回答
-1

在 Git 项目的 Github 上,他们提供了一个 bash 文件来自动完成 git 命令。

您应该将其下载到主目录并强制 bash 运行它。这只是两个步骤,并在以下博客文章中完美解释(一步一步)。

代码忧虑者博客:autocomplete-git/

我已经在mac上测试过,它应该也可以在其他系统上运行。您可以将相同的方法应用于其他操作系统。

于 2017-08-29T19:52:19.063 回答