11.6 Advanced Setup
This section contains some optional advanced Git setup. The main features are adding an alias for checking out branches, adding the branch name to the Unix prompt, and enabling branch name tab completion. Following the steps in this section should be within your capabilities if you completed Learn Enough Command Line to Be Dangerous (https://www.learnenough.com/command-line) and Learn Enough Text Editor to Be Dangerous, but they can be tricky, so use your technical sophistication (Box 8.2) if you get stuck. If you’d rather skip these steps for now, you can proceed directly to the conclusion (Section 11.7).
Note for Mac users: The instructions below assume you are using Bash, as described in Box 2.3. To learn how to set up your Git system using Z shell instead, see the Learn Enough blog post “Using Z Shell on Macs with the Learn Enough Tutorials” (https://news.learnenough.com/macos-bash-zshell).
11.6.1 A Checkout Alias
In Chapter 8, we added global configuration settings for the name and email address (Listing 8.3) to be included automatically when making commits. Now we’ll add a third config setting, an alias to make it easier to check out branches.
Throughout this tutorial, we’ve used git checkout to check out branches (e.g., Listing 10.3), but most experienced Git users configure their systems to use the shorter command git co.9 The way to do this is with a Git alias: Much as the Bash aliases covered in Section 5.4 let us add commands to our Bash shell, Git aliases let us add commands to our Git system. In particular, the way to add the co alias is to run the command shown in Listing 11.13.
Listing 11.13: Adding an alias for git co.
In effect, this adds co as a new Git command, and running Listing 11.13 allows us to replace checkout in commands like
$ git checkout main
with the more compact co command, as follows:
$ git co main
For maximum compatibility with systems that don’t have co configured, this tutorial has always used the full checkout command, but in real life I nearly always use git co.
11.6.2 Prompt Branches and Tab Completion
In this section, we’ll add two final advanced customizations. First, we’ll arrange for the command-line prompt to include the name of the current branch. Second, we’ll add the ability to fill in Git branch names using tab completion (Box 2.4), which is especially convenient when dealing with longer branch names. Both of these features come as shell scripts with the Git source code distribution, which can be downloaded as shown in Listing 11.14.
Listing 11.14: Downloading scripts for branch display and tab completion.
Here the -o flag arranges to save the files locally under slightly different names from the ones on the server, prepending a dot . so that the files are hidden (Section 2.2.1) and saving them in the home directory ~.
After downloading the scripts as in Listing 11.14, on some systems we need to make them executable, which we can do with the chmod command (Section 7.3):
$ chmod +x ~/.git-prompt.sh $ chmod +x ~/.git-completion.bash
Next, we need to tell the shell about the new commands, so open up the Bash profile file in your favorite editor (which for simplicity I’ll assume is Atom):
$ atom ~/.bashrc
Then add the configuration shown in Listing 11.15 to the bottom of the file. Also, make sure to delete any other lines starting with PS1 (which you’ll have to do if you modified .bashrc as shown in Listing 6.6).
Listing 11.15: Adding Git configuration to Bash.
~/.bashrc
Note: The vertical dots in Listing 11.15 indicate omitted content and should not be copied literally. This is the sort of thing you can figure out using your technical sophistication (Box 8.2). Speaking of which, I have hardly any idea of what most of the code in Listing 11.15 means; part of having technical sophistication means being able to copy things from the Internet and getting them to work even when you have no idea what you’re doing (Figure 11.2810).
Figure 11.28: It’s OK—neither does anyone else.
Once we’ve saved the result of editing .bashrc, we have to source it to make the changes active (as seen in Listing 5.5):
$ source ~/.bashrc
At this point, the prompt for a Git repository’s default main branch should look something like this:
[website (main)]$
If you skipped ahead from Section 8.1 to complete this section, you’ll have to wait until Section 8.2 to see this effect. Checking that tab completion is working is left as an exercise (Section 11.6.3).
11.6.3 Exercises
Create a branch called really-long-branch-name using git co -b.
Switch back to the main branch using git co.
Check out the branch really-long-branch-name using tab completion by typing git checkout r⇥ at the command-line prompt.
What does your prompt look like? Verify that the correct branch name appears in the prompt.
Check out the main branch using git co m ⇥. (This shows that tab completion works with the co alias set up in Listing 11.13.) What does the prompt look like now?
Use git branch -d r⇥ to delete really-long-branch-name, thus verifying that tab completion works with git branch as well as with git checkout. (In fact, tab completion works with most relevant Git commands.)