如何配置git bash命令行完成?


129

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

我没有在http://git-scm.com/docs上找到任何内容,但这些天IIRC完成已包含在git包中,我只需要在bashrc中输入正确的内容即可。


在Ubuntu Precise(和Fedora 17)上开箱即用。
机械蜗牛

2
要检查默认情况下是否具有它,可以运行(cd ~ && exec cat .bashrc | grep completion)
aderchox

Answers:


181

在Linux上

在大多数发行版中,当您安装git时,会将git complete脚本安装到/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 autocomplete可能已损坏,通过运行以下命令重新安装应该可以解决此问题:

sudo apt-get install git-core bash-completion

在Mac上

您可以使用Homebrew或MacPorts安装gitcomplete。

家酿

如果$BASH_VERSION> 4 :(brew install bash-completion@2更新版本)请特别注意3.2.57(1)-发行版中Macash默认提供的bash版本。

添加到.bash_profile

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

对于较旧版本的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完成

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


1
大多数* nix盒(尤其是Ubuntu)已经具有该文件,因此仅将其采购给我的用户即可解决我的问题。谢谢。
2013年

5
ubuntu可以将其作为/etc/bash_completion.d/git-prompt
Catskul 2014年

2
我有Git但没有/etc/bash_completion.d
sixty4bit 2014年

13
在我的Ubuntu 14.04中,该文件为/usr/share/bash-completion/completions/git/etc/bash_completion.d/git-prompt用于git提示支持,而不用于完成。
Ray Chen

18
警告:Mac homebrew方法仅在通过homebrew安装git时才起作用,brew uninstall bash-completion然后brew install git如果以前通过其他方法安装git,则上述步骤将起作用。
patapouf_ai 2016年

66

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

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/


我在代理服务器后面,所以我必须先设置代理服务器才能使curl正常工作,但export https_proxy=proxy_ip:proxy_port我真的不明白为什么它不能从系统中获取设置。
madlymad

2
其实并不需要在文件名前加一个点来隐藏该文件。另外:谨慎使用git版本(请参见wisbucky的答案)
Walter Tross

42

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

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启动脚本中提供该资源。


这是最佳的macOS答案。
AShelly

哇...经过一小时的git-bash动脑筋,您的评论才是关键。感谢您的解决方案!金!
迈克·卡特

4
特定于macos版本的文件应该已经在这里的磁盘上:/Library/Developer/CommandLineTools/usr/share/git-core/git-completion.bash为安全起见,我将其与github上的2.17.1版本进行了比较,并进行了匹配。
jmt

18

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

1
谢谢,这对我在Ubuntu 16.04 LTS上
有用


5

只需在您的~/.bashrc

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

其他答案告诉您要安装bash-completion,您不需要这样做,但是如果您这样做,则无需直接获取完成内容。您可以做一个或另一个,而不是两者都做。

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

source "$(pkg-config --variable=completionsdir bash-completion)"/git

1
您的通用解决方案在Ubuntu 18.04上对我来说非常理想。要启动,您的方法非常简洁-谢谢!
杰森·史蒂文斯

4

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

source /etc/bash_completion.d/git-prompt

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


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-prompt.sh中定义了__git_ps1。类似于下载.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

源〜/ .bash.git将执行下载的文件并

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

所以它看起来像:

dir_Name[branch_name] 其中dir_Name是工作目录名称,而branch_name将是您当前正在使用的分支的名称。

请注意-__git_ps1区分大小写。


1

Arch Linux

/usr/share/git/completion/git-completion.bashbash启动文件之一中的源。

例如:

# ~/.bashrc

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

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


-1

的Ubuntu

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

视窗

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


-1

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

您应该将其下载到主目录,并应强制bash运行它。这只是两个步骤,并且在以下博客文章中得到了很好的解释(逐步介绍)。

代码编写者博客:autocomplete-git /

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.