Setting Up Git

Last updated on 2025-05-22 | Edit this page

Overview

Questions

  • How do I get set up to use Git?

Objectives

  • Configure Git the first time it is used on a computer.
  • Explain the meaning of the --global configuration flag.

When we use Git on a new computer for the first time, we need to configure a few things. Below are some configurations we will set as we get started with Git:

  • our name and email address,
  • what our preferred text editor is,
  • and that we want to use these settings globally (i.e. for every project).

On a command line, Git commands are written as git verb options, where verb is what we actually want to do and options is additional information which may be needed for the verb. So here is how Dracula sets up his new laptop:

BASH

$ git config --global user.name "Vlad Dracula"
$ git config --global user.email "vdracula@usgs.gov"

Please use your own name and email address instead of Dracula’s. This user name and email will be associated with your subsequent Git activity, which means that any changes pushed to GitHub, BitBucket, GitLab or another Git host server after this lesson will include this information.

For this lesson, we will be interacting with GitLab and so the email address used should be your USGS email.

Line Endings

As with other keys, when you hit Enter or (or, on Macs Return), your computer encodes this input as a character (or two). Different operating systems use different character(s) to represent the end of a line. Windows uses the combination of the carriage return and linefeed characters and Unix and Mac use only linefeed. These can cause otherwise identical files to look different to Git. The solution is to automatically strip the carriage return characters when you move files from Windows to the other systems and add them back when you move files in the other direction. You can read more about this issue in the Pro Git book.

You can change the way Git recognizes and encodes line endings using the core.autocrlf command to git config. The following settings are recommended:

On macOS and Linux:

BASH

$ git config --global core.autocrlf input

And on Windows:

BASH

$ git config --global core.autocrlf true

When Git spots a conflict (discussed later), it will automatically open your editor so you can resolve the conflict. To set your favorite editor, choose one of the following configuration commands:

Editor Configuration command
Atom $ git config --global core.editor "atom --wait"
nano $ git config --global core.editor "nano -w"
BBEdit (Mac, with command line tools) $ git config --global core.editor "bbedit -w"
Sublime Text (Mac) $ git config --global core.editor "/Applications/Sublime\ Text.app/Contents/SharedSupport/bin/subl -n -w"
Sublime Text (Win, 32-bit install) $ git config --global core.editor "'c:/program files (x86)/sublime text 3/sublime_text.exe' -w"
Sublime Text (Win, 64-bit install) $ git config --global core.editor "'c:/program files/sublime text 3/sublime_text.exe' -w"
Notepad (Win) $ git config --global core.editor "c:/Windows/System32/notepad.exe"
Notepad++ (Win, 32-bit install) $ git config --global core.editor "'c:/program files (x86)/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noPlugin"
Notepad++ (Win, 64-bit install) $ git config --global core.editor "'c:/program files/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noPlugin"
Kate (Linux) $ git config --global core.editor "kate"
Gedit (Linux) $ git config --global core.editor "gedit --wait --new-window"
Scratch (Linux) $ git config --global core.editor "scratch-text-editor"
Emacs $ git config --global core.editor "emacs"
Vim $ git config --global core.editor "vim"
VS Code $ git config --global core.editor "code --wait"

It is possible to reconfigure the text editor for Git whenever you want to change it.

Exiting Vim

Note that Vim is the default editor for many programs. If you haven’t used Vim before and wish to exit a session without saving your changes, press Esc then type :q! and hit Enter or or on Macs, Return. If you want to save your changes and quit, press Esc then type :wq and hit Enter or or on Macs, Return.

Git (2.28+) allows configuration of the name of the branch created when you initialize any new repository. Dracula decides to use that feature to set it to main so it matches the cloud service he will eventually use.

BASH

$ git config --global init.defaultBranch main

Default Git branch naming

Source file changes are associated with a “branch.” For new learners in this lesson, it’s enough to know that branches exist, and this lesson uses one branch.

By default, Git will create a branch called master when you create a new repository with git init (as explained in the next Episode). The software development community has moved to adopt the term main instead.

In 2020, most Git code hosting services transitioned to using main as the default branch. As an example, any new repository that is opened in GitHub or the USGS GitLab defaults to main. However, Git has not yet made the same change. As a result, local repositories must be manually configured to have the same default branch name as most cloud services.

The five commands we just ran above only need to be run once: the flag --global tells Git to use the settings for every project, in your user account, on this computer.

Let’s review those settings and test our core.editor right away:

BASH

$ git config --global --edit

Let’s close the file without making any additional changes. Remember, since typos in the config file will cause issues, it’s safer to view the configuration with:

BASH

$ git config --list

And if necessary, change your configuration using the same commands to choose another editor or update your email address. This can be done as many times as you want.

Proxy

Typically, your work in USGS will not require the use of a proxy. In the unusual case that your group requires it, you may also need to tell Git about the proxy:

BASH

$ git config --global http.proxy proxy-url
$ git config --global https.proxy proxy-url

To disable the proxy, use

BASH

$ git config --global --unset http.proxy
$ git config --global --unset https.proxy

Git Help and Manual

Always remember that if you forget the subcommands or options of a git command, you can access the relevant list of options typing git <command> -h or access the corresponding Git manual by typing git <command> --help, e.g.:

BASH

$ git config -h
$ git config --help

While viewing the manual, remember the : is a prompt waiting for commands and you can press Q to exit the manual.

More generally, you can get the list of available git commands and further resources of the Git manual typing:

BASH

$ git help

There are many development environments that have built-in integrations with Git to streamline the most common Git operations. This lesson does not go into details on using these integrations, but here are some resources that you can explore on your own: - RStudio: https://docs.posit.co/ide/user/ide/guide/tools/version-control.html - Visual Studio Code: https://code.visualstudio.com/docs/sourcecontrol/overview

Key Points

  • Use git config with the --global option to configure a user name, email address, editor, and other preferences once per machine.