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 completedLearn Enough Command Line to Be Dangerous(https://www.learnenough.com/command-line) andLearn Enough Text Editor to BeDangerous, 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, analiasto make it easier to check out branches.
Throughout this tutorial, we’ve usedgit checkoutto check out branches (e.g., Listing 10.3), but most experienced Git users configure their systems to use the shorter commandgit co.9The way to do this is with a Gitalias: 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 thecoalias is to run the command shown in Listing 11.13.
Listing 11.13:Adding an alias forgit co.
In effect, this addscoas a new Git command, and running Listing 11.13 allows us to replacecheckoutin commands like
$git checkout main
with the more compactcocommand, as follows:
$git co main
For maximum compatibility with systems that don’t havecoconfigured, this tutorial has always used the fullcheckoutcommand, but in real life I nearly always usegit 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 usingtab 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-oflag 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 thechmodcommand (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 withPS1(which you’ll have to do if you modified.bashrcas 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 tosourceit to make the changes active (as seen in Listing 5.5):
$source~/.bashrc
At this point, the prompt for a Git repository’s defaultmainbranch 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 calledreally-long-branch-nameusinggit co -b.
Switch back to themainbranch usinggit co.
Check out the branchreally-long-branch-nameusing tab completion by typinggit 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 themainbranch usinggit co m⇥. (This shows that tab completion works with thecoalias set up in Listing 11.13.) What does the prompt look like now?
Usegit branch -d r⇥ to deletereally-long-branch-name, thus verifying that tab completion works withgit branchas well as withgit checkout. (In fact, tab completion works with most relevant Git commands.)