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

Vin*_*eib 103 git bash

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

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

Ser*_*eev 154

在Linux上

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

source /etc/bash_completion.d/git
# or
source /usr/share/bash-completion/completions/git
Run Code Online (Sandbox Code Playgroud)

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

sudo apt-get install git-core bash-completion
Run Code Online (Sandbox Code Playgroud)

在Mac上

您可以使用Homebrew或MacPorts安装git完成.

家酿

if $BASH_VERSION> 4 :( brew install bash-completion@2更新版本)特别注意你有哪个版本的bash作为MacOS默认随附3.2.57(1)-release.

添加到.bash_profile:

  if [ -f /usr/local/share/bash-completion/bash_completion ]; then
    . /usr/local/share/bash-completion/bash_completion
  fi
Run Code Online (Sandbox Code Playgroud)

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

添加到.bash_profile:

[ -f /usr/local/etc/bash_completion ] && . /usr/local/etc/bash_completion
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

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

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

  • 警告:Mac自制程序方法只有在你通过自制软件安装git时才能运行.如果之前通过其他方法安装了git,那么你可以使用brew brew git`,然后执行上述步骤. (16认同)
  • 在我的Ubuntu 14.04中,这个文件是`/ usr/share/bash-completion/completions/git`.`/ etc/bash_completion.d/git-prompt`用于git提示符支持,而不是用于完成. (13认同)
  • ubuntu可能将其作为/etc/bash_completion.d/git-prompt (5认同)
  • 我有Git但没有/etc/bash_completion.d (2认同)

jos*_*tik 53

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

curl https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash -o ~/.git-completion.bash
Run Code Online (Sandbox Code Playgroud)

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

if [ -f ~/.git-completion.bash ]; then
  . ~/.git-completion.bash
fi
Run Code Online (Sandbox Code Playgroud)

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

  • 并不是真的需要在文件名前用一个点来隐藏该文件。另外:小心 git 版本(请参阅 wisbucky 的答案) (3认同)

wis*_*cky 33

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

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 版本特定的文件应该已经在磁盘上: `/Library/Developer/CommandLineTools/usr/share/git-core/git-completion.bash` 为了安全起见,我将它与 github 上的 2.17.1 版本进行了比较它匹配。 (6认同)

And*_*ann 15

Ubuntu 14.10

安装git-corebash-completion

sudo apt-get install -y git-core bash-completion
Run Code Online (Sandbox Code Playgroud)


Fel*_*peC 13

只需在您的~/.bashrc

source /usr/share/bash-completion/completions/git
Run Code Online (Sandbox Code Playgroud)

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

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

source "$(pkg-config --variable=completionsdir bash-completion)"/git
Run Code Online (Sandbox Code Playgroud)

  • 你的通用解决方案在 Ubuntu 18.04 上非常适合我。首先,你的方法非常简洁——谢谢! (3认同)

dor*_*an. 9

似乎许多人来这里是为了弄清楚如何在他们的操作系统上启用制表符补全。从一开始就需要注意,git tab 补全是shell相关的,而不是操作系统相关的。如今,大多数 shell 都可以在各种基于 Unix 的操作系统上运行,例如bashzshFish。少数几个可以跨所有主要操作系统运行,例如Powershell

如果您不确定您使用的是哪个 Unix shell,请尝试echo $SHELL或查看此问题

Bash(大多数 Linux 发行版)

在大多数 Unix 发行版上,git tab 补全是开箱即用的,安装到/etc/bash_completion.d//usr/share/bash-completion/completions/git. 您在这里可能是因为它不起作用,这可能是因为未使用完成脚本。尝试将此行添加到您的.bashrc

source /etc/bash_completion.d/git
# or
source /usr/share/bash-completion/completions/git
Run Code Online (Sandbox Code Playgroud)

然后在新终端中再次尝试制表符补全。

如果 git autocomplete 损坏或未安装,通过运行以下命令重新安装应该可以修复它:

sudo apt-get install git-core bash-completion
Run Code Online (Sandbox Code Playgroud)

再次在新终端中尝试制表符补全。

更多详细信息,请参阅 git 书籍附录 A:其他环境中的 Git - Git in Bash

在 macOS 上为 bash 用户安装 git tab 自动补全

如果您在 macOS 中使用bash shell,则可以使用 Homebrew 或 MacPorts 安装 git Completion。有关如何执行此操作的信息,请参阅@sergey-evstifeev 的答案。

Zsh(macOS、一些 Linux 发行版)

MacOS 和一些 Linux 发行版使用 Zsh 作为默认终端 shell。要在 Zsh 中启用 git tab 自动补全,请添加到您的.zshrc

autoload -Uz compinit && compinit
Run Code Online (Sandbox Code Playgroud)

然后在新终端中再次尝试制表符补全。

可选:还可以考虑使用 git info 为主题添加Oh My Zsh插件。

更多详情请参见git书籍附录A:其他环境中的Git - Git in Zsh

Powershell(Windows)

Windows 上的 Tab 自动补全可以使用posh-git添加到 Powershell 中。(请注意,命令提示符不支持此操作)。

要在 Powershell 中安装 posh-git,

脚本执行策略必须设置为RemoteSignedUnrestricted。通过执行检查脚本执行策略设置Get-ExecutionPolicy。如果策略未设置为两个必需值之一,请以管理员身份运行 PowerShell 并执行Set-ExecutionPolicy RemoteSigned -Scope CurrentUser -Confirm.

然后使用 PowerShellGet 安装:

PowerShellGet\Install-Module posh-git -Scope CurrentUser -Force
Run Code Online (Sandbox Code Playgroud)

然后在新终端中再次尝试制表符补全。

有关 Chocolatey、Scoop 或手动安装说明,请参阅posh-git GitHub 页面

可选:还可以考虑升级到Powershell 7,它具有用于智能选项卡完成的命令行 IntelliSense。

更多详情请参见git书籍附录A:其他环境中的Git - Powershell中的Git


drm*_*elr 8

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与 my 位于同一目录中的文件的设置git-completion.bash

$ git config --show-origin --list
...
file:/Applications/Xcode.app/Contents/Developer/usr/share/git-core/gitconfig    credential.helper=osxkeychain
...
Run Code Online (Sandbox Code Playgroud)

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

$ find / -type f -name git-completion.bash 2>/dev/null
Run Code Online (Sandbox Code Playgroud)

因此,我的 插入内容如下~/.bashrc

$ git config --show-origin --list
...
file:/Applications/Xcode.app/Contents/Developer/usr/share/git-core/gitconfig    credential.helper=osxkeychain
...
Run Code Online (Sandbox Code Playgroud)

请注意,这也会获取 git 提示字符串脚本,因为它位于同一目录中。

(在 macOS Catalina 中测试)

  • 当我为 Windows 安装 git,然后安装 MSYS2 并且我想在 MSYS2 下使用 git 时,这也有效。在 git bash 中是否找到 / -type f -name git-completion.bash 2>/dev/null 来确定文件所在位置,然后获取它。然后,我在整个“completion”目录中查找“__git_ps1()”函数所在的位置,并且也能够将其来源。这允许我通过将 `$PS1` 环境变量从 git bash 复制到 MSYS2 bash 来获得提示。 (2认同)

kis*_*isp 5

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

source /etc/bash_completion.d/git-prompt
Run Code Online (Sandbox Code Playgroud)

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