DEV Community

Cover image for 10+ things I always setup in git when I prepare a new environment
Shinji NAKAMATSU
Shinji NAKAMATSU Subscriber

Posted on • Updated on

10+ things I always setup in git when I prepare a new environment

When you buy a car or a bicycle, you first adjust the seat position and saddle height to suit your body size. It is the same with git configuration.

In this article, I will share the git setup I use all the time.

User name & Mail address

git config --global user.name "<name>" && \
git config --global user.email "<email>"
Enter fullscreen mode Exit fullscreen mode
  • Replace <name> with my name and <email> with my mail address.

Alias for existing command

git config --global alias.co checkout
git config --global alias.st status
git config --global alias.br branch
Enter fullscreen mode Exit fullscreen mode

Global ignore setting

git config --global core.excludesfile ~/.gitignore_global
Enter fullscreen mode Exit fullscreen mode
  • This allows you to put your own specific ignore settings in ~/.gitignore_global in addition to the .gitignore for each project, which will be applied to all git operations across all projects.

Push only the branch you are now working on

git config --global push.default simple
Enter fullscreen mode Exit fullscreen mode

Make --rebase the default behavior during git pull

git config --global pull.rebase true
Enter fullscreen mode Exit fullscreen mode
  • This prevents unintentional creation of a merge commit if the branch being pulled has been modified locally.

Make --prune the default behavior during git fetch

git config --global fetch.prune true
Enter fullscreen mode Exit fullscreen mode
  • This will remove local branches that were deleted remotely when git fetch or git pull was performed.

Set the width of indentation for tab characters

git config --global core.pager 'less -x4'
Enter fullscreen mode Exit fullscreen mode
  • In this example, the pager (less command) option specifies tab indent width as 4

Use nvim as the editor to be used when committing

git config --global core.editor 'nvim'
Enter fullscreen mode Exit fullscreen mode
  • I use several different text editors for different purposes, but I prefer to use nvim with git commit.

Do not fast-forward when merging

git config --global --add merge.ff false
git config --global --add pull.ff only
Enter fullscreen mode Exit fullscreen mode
  • Fast-forward merging makes it difficult to follow the history of work on a branch. Therefore, avoid unintentional fast-forwards when merging.
  • However, fast-forwarding is not a problem for git pull cases in most cases 1, so we enforce fast-forwarding in the case of pulls.
  • See also: gitのmerge --no-ff のススメ - Qiita

Output line numbers in the result of git grep

git config --global grep.lineNumber true
Enter fullscreen mode Exit fullscreen mode

Visualize differences in whitespace (including newline codes)

git config diff.wsErrorHighlight all
Enter fullscreen mode Exit fullscreen mode

EDIT: 2022-07-31

dotfile

As mentioned in the comments, these are stored in .gitconfig. And I have added these settings to the dotfiles repository.

https://github.com/snaka/my-dotfiles/blob/master/.gitconfig

Thanks to all who commented.


See also


  1. In my experience, this happens when you are temporarily changing code while reviewing a PullRequest created by someone else in your local environment. In that case, fast-forward is better because local changes are gathered at the top of the history, making it easier to work with when you finally undo the changes. 

Top comments (30)

Collapse
 
tdwright profile image
Tom Wright

Great tips. Feels like this could be the start of a script. In fact, I can imagine an open source CLI tool for setting up Git just right on new environments, perhaps using a user-specific config file stored online...

Collapse
 
anasrin profile image
anasrin

The essential thing for me was add gpg sign and signing key

Collapse
 
francoislp profile image
François

Hey :) Great post, thanks for sharing!

How would you deal with 2 git emails on the same laptop?
one for github (perso) and one for work (pro)

The best would be to default to the email perso (and the associated GPG key), and when working from ~/Projects, always use the work email
Not sure if it is feasible ^^

Collapse
 
snaka profile image
Shinji NAKAMATSU

Perhaps you can.
I wrote an article about it, please check it out.

dev.to/snaka/use-a-different-git-c...

Collapse
 
tallesl profile image
Talles L

Nice tips!

However I was surprised to see "Do not fast-forward when merging" with the reason of making it "difficult to follow the history".

My personal experience is the exact opposite, having multiple automatic "Merge branch..." commits makes the commit history incredibly polluted.

Collapse
 
snaka profile image
Shinji NAKAMATSU

I understand your surprise, as I have seen several different organizations managing branches with different policies.

There isn't enough in this comment section to discuss that, so I will post a separate entry after I get more thoughts on it.

Collapse
 
suckup_de profile image
Lars Moelleken

To setup my environment for Linux or Windows I usually use my dotfiles : github.com/voku/dotfiles/blob/mast...

Collapse
 
snaka profile image
Shinji NAKAMATSU • Edited

Thanks for the link to your dotfiles! It is very helpful. 👍

Collapse
 
suckup_de profile image
Lars Moelleken

Good if you find something useful there. 😊

Collapse
 
joolsmcfly profile image
Julien Dephix

Do you always use cli commands or do you sometimes commit/push/pull/delete branches from your IDE?

Collapse
 
snaka profile image
Shinji NAKAMATSU • Edited

I use tig and git CLI depends on the situation.

github.com/jonas/tig

I often use tig to see logs and diffs, or commands with a specific commit ID, such as git cherry-pick <commit-id> or git rebase -i <commit-id>.

On the other hand, I use the git CLI for risky commands such as git reset, and for tasks that are faster with shell completion such as git checkout <branch-name>.

Collapse
 
joolsmcfly profile image
Julien Dephix

I see. I’ll check tig later out of curiosity!

I prefer using my IDE for most commands (I make sure to know what’s going on behind the scenes though) as I find faster (Ctrl+K to open commit window, type message, Ctrl+Shift+K to commit and push).

Collapse
 
buddhadebchhetri profile image
Buddhadeb Chhetri

Thanks for the tips this is really helpful.

Collapse
 
dominik90 profile image
Dominik Bartsch

Great tips, thank you!

Collapse
 
ravavyr profile image
Ravavyr

Neat...I install github desktop and click buttons.

Good article, it has its uses if you must use command line :)

Collapse
 
snaka profile image
Shinji NAKAMATSU

Your dotfile is also helpful. Thanks for sharing ✨