Statamic Peak

Article

Change of Git user with includeif

In this article, we will learn how to change of git user. Across a concrete case, we will use the includeif directive. This will allow us to automatize the change of git context in order to have different users committing following defined rules.

Introduction

When you are working on multiple projects at the same time, you will sometimes have to use git users with different email addresses. That's for example the case if you work at the same time on a personnal project and a project for a client who gave you a @client.fr address.

Concrete case

Thomas is making github projects with his personnal email address thomas@gmail.com. Here is his .gitconfig :

[user]
    name = Thomas
    email = thomas@gmail.com
    username = tthomas

In order to work with his new client, he must use a thomas@client.com address.

He can not modify his .gitconfig or else he will erase his personnal github account config. He can make many gitconfig and change everytime but he could get confused that way and commit under the wrong address for his project. This is where the IncludeIf directive appears !

The IncludeIf directive

The includeif directive, as you can guess by its name, allows you to include a config file if some condition is set. Thomas will then have a general .gitconfig and some specific .gitconfigs according to conditions he chose, in our case the current folder.

Into the general .gitconfig, he will put the includeIf directive as well as the path to the specific .gitconfigs :

[includeIf "gitdir:~/workspaces/personal/"]
    path = ~/.gitconfig-personal
[includeIf "gitdir:~/workspaces/entreprisea/"]
    path = ~/.gitconfig-entreprisea

In .gitconfig-personal, he will put the informations linked to his personnal github account :

[user]
    name = Thomas
    email = thomas@gmail.com
    username = tthomas

In .gitconfig-entreprise, he will put the informations linked to his client project :

[user]
    name = Thomas
    email = thomas-ext@entreprise-a.com
    username=thomasext

Default user

In your .gitconfig you can add the [user] property with all your user informations :

[user]
    name = John default
    email = john@default-mail.com
    username = jdef
[diff]
    tool = vimdiff
[includeIf "gitdir:~/workspaces/personnal/github/"]
    path = ~/.gitconfig-personnalgithub
[includeIf "gitdir:~/workspaces/proA/"]
    path = ~/.gitconfig-entreprisea

Conclusion

In this article, we saw how to simply use includeIf to put conditions on your config injection, according to your path. Another condition exists on the branch. You can take a look at the official documentation to learn more.

Troubleshooting

On Windows, if your gitdir is a absolute path, don't forget to put :/ at the beginning :

[includeIf "gitdir:C:/workspaces/monClient1/"]
    path = ~/.gitconfig-monclient1