Configure Git for Work and Personal stuff

Configure Git for Work and Personal stuff:

 

Photo by Maddy Baker on Unsplash

If you are like me and work for different companies, have several side hustles and fun projects, you will probably have the same problem as I have:
You want to use different configurations, like E-Mail Addresses, for those repositories.
Of course, you can always apply a local configuration to each repository or even use some scripts or aliases to help you out. But again, if you are like me, you won’t be happy with it, because you will forget to apply it over and over again.

Conditional Configuration

Git allows you to include external configuration-files based on conditions, like the current directory. With this in mind, the problem above is actually easily solvable.

First use different base-directories for each “area”, like your different work-places and personal stuff:

/home/me/
    dev-work-a/
    dev-work-b/
    dev-personal/
Enter fullscreen mode Exit fullscreen mode

Then create a .gitconfig-file for each of those areas:

/home/me/
    .gitconfig (your main configuration)
    .gitconfig-work-a (specific configuration for work a)
    .gitconfig-work-b (specific configuration for work b)
    .gitconfig-personal (specific configuration for personal projects)
Enter fullscreen mode Exit fullscreen mode

In your main .gitconfig-File, instead of the actual values, you conditionally include the other files:

# ~/.gitconfig
[includeIf "gitdir:~/dev-work-a/"]
    path = .gitconfig-work-a
[includeIf "gitdir:~/dev-work-b/"]
    path = .gitconfig-work-b
[includeIf "gitdir:~/dev-personal/"]
    path = .gitconfig-personal
Enter fullscreen mode Exit fullscreen mode

and in the specific files, you just define the specific configuration values:

# ~/.gitconfig-work-a
[user]
    name = Scooby Doo
    email = scooby@worka.com
Enter fullscreen mode Exit fullscreen mode
# ~/.gitconfig-work-b
[user]
    name = Scooby Doo, Food-Department
    email = scooby@workb.com
Enter fullscreen mode Exit fullscreen mode
# ~/.gitconfig-personal
[user]
    name = Scooby
    email = me@scoobydoo.com
Enter fullscreen mode Exit fullscreen mode

That’s basically it. So now, when you are for example in ~/dev-personal/bigbang-side-hustle Git will get your user-configuration from .gitconfig-personal.

One more thing

Well, of course, you cannot use conditional configuration for user-configurations like name and e-mail only, it’s just a very common use case. But in fact, you can use it for whatever configuration you like.

There are also two more conditions like gitdir:

  • onbranch lets you apply configurations based on the branch you are on
  • gitdir/i like gitdir, but case-insensitive

It’s worth mentioning that this works on all platforms and is very Dotfiles-friendly.
Also see documentation for more information.

from Tumblr https://generouspiratequeen.tumblr.com/post/634203689556557824

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s