git auto-complete for *branches* at the command line?
On my Linux machine I have autocomplete for branches with Git.
[Note we are talking about git branch completion, not bash completion (e.g. commands, files, etc). Thus NOT Lane's answer at all]
For example I can type git checkout
+TAB and get a list of branches.
Or I can type git checkout feb*
+TAB to get all branches that begin with "feb".
How can I get this functionality on a Mac?
I tried downloading and running bash-completion/bash_completion
and bash-completion/bash_completion.sh.in
but no joy. The first gave error messages about declare: -A invalid_option
. The second gave no errors. When I git checkout
+TAB though I am still getting a list of files in the directory, not branches. I am in the project root.
Auto-complete for directories and bash commands are working ok, so it's specific to Git.
Solution 1:
ok, so I needed the git autocompletion script.
I got that from this url:
curl https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash -o ~/.git-completion.bash
No need to worry about what directory you're in when you run this as your home directory(~
) is used with the target.
Then I added to my ~/.bash_profile
file the following 'execute if it exists' code:
if [ -f ~/.git-completion.bash ]; then
. ~/.git-completion.bash
fi
Update: I'm making these bits of code more concise to shrink down my .bashrc
file, in this case I now use:
test -f ~/.git-completion.bash && . $_
Note: $_
means the last argument to the previous command. so . $_
means run it - "it" being .git-completion.bash
in this case
This still works on both Ubuntu and OSX and on machines without the script .git-completion.bash
script.
Now git
Tab (actually it's git
TabTab ) works like a charm!
p.s.: If this doesn't work off the bat, you may need to run chmod u+x ~/.git-completion.bash
to grant yourself the necessary permission:
-
chmod
is the command that modifies file permissions -
u
means the user that owns the file, by default its creator, i.e. you -
+
means set/activate/add a permission -
x
means execute permission, i.e. the ability to run the script
Solution 2:
Some people prefer to use a package manager to automate the installing, updating, and configuring of Mac OS packages. I am a fan of package managers, and I think Homebrew is the best package manager for Mac OS (some would say it's the de-facto Mac OS package manager).
Once you have installed Homebrew, you can simply install git along with bash-completion with brew install git bash-completion
.
You'll then need to put the following in your ~/.bash_profile
:
if [ -f `brew --prefix`/etc/bash_completion.d/git-completion.bash ]; then
. `brew --prefix`/etc/bash_completion.d/git-completion.bash
fi
(Note: If this install fails with a 404 error, and you already have git installed, just remove the git part of this brew install)
More info on installing git and bash-completion with brew here.
Solution 3:
Run this on terminal:
curl https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash -o ~/.git-completion.bash
Then, do this:
vi ~/.bash_profile
Add this lines:
if [ -f ~/.git-completion.bash ]; then
. ~/.git-completion.bash
fi
That's all. This worked for me.