The handguide for a manual setup

Adding Git Completion to Zsh

Almost as easy as a brew install

recently switched my shell from Bash to Zsh, and after installing my new favorite extensions (Powerlevel10k and Meslo Nerd Font), I realized I was missing a key component from Bash: Git completion.

Since we don’t all have the luxury of running brew install bash-completion and following the associated directions, I’ll discuss how I manually installed the shell scripts necessary to support Git completion in Zsh.

Finding the Dependencies

he Git community maintains all the shell completion scripts in their repository on GitHub. Navigating to this folder reveals scripts for a variety of shells, including Bash and Zsh.

Git’s shell completion scripts on GitHub
Git’s shell completion scripts on GitHub

Since both Bash and Zsh are based on the Bourne shell, they tend to share many similarities. Git makes this pretty evident after one opens the git-completion.zsh and the comment at the top states:

You need git’s bash completion script installed somewhere, by default it would be the location bash-completion uses.

Thus, we need two scripts to have Git completion in its entirety.

Downloading the Scripts

ow that it is clear which scripts are necessary for full Git completion functionality, let’s get them:

Commands to download all the Git completion scripts

Notice how, by convention, I placed the shell scripts in a folder called .zsh under the user’s home folder.

Configuring the Shell

nce the scripts are in position, the .zshrc file may be configured to provide access to their functionality. Open up the ~/.zshrc file and add the following lines of code:

Configures the shell to include and use the Git completion scripts

On your first run, make sure you clear out the shell’s autocompletion cache with:

Zsh will reload the autocomplete cache on its next run

Then save the script, reload your shell, and voila!

An animation showing the result of the configuration
An animation showing the result of the configuration
The result of the configuration (along with some Powerlevel10k polish)

For the curious reader, here’s a quick summary of what the above configuration script accomplishes:

  • zstyle: Instructs the shell on how to provide inline, contextual hints
  • fpath: The git-completion.zsh is a function file, not designed to be sourced like the bash script. This command appends the ~/.zsh directory onto the shell’s function lookup list.
  • autoload: Scan each path within the fpath variable for files starting with an underscore (_git, in our case) and loads the corresponding script as a function file
  • compinit: Initializes the shell’s auto-completion functionality


hese links proved themselves immensely helpful as I learned how to understand and configure this on my own:

I’m connecting people with technology, seamlessly. Since 2008, I’ve been a software architect and a leading engineer, delivering smart and intuitive software.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store