12

I'm in a bit of a bind with Git. I'm trying to execute git commit but I need to be able to swtich between ~/.gitconfig1 and ~/.gitconfig2 Is there a command line switch - or anyway to have Git use a different gitconfig file then the ones found at /etc/gitconfig, ~/.gitconfig and .git/config?

5
  • Do you actually need two different configs while in one repo? Can you just use the .git/config for each repo to get what you want? I guess it's just not very elegant if you have only two common settings to spread across dozens of repos? Commented Aug 29, 2010 at 4:24
  • @Jefromi Yes I do. It's a unique situation that I have come across where two configs are needed Commented Aug 29, 2010 at 15:03
  • 2
    The other obvious alternative would be to globally alias git commit-v2 (or something shorter) to !export GIT_AUTHOR_NAME="Second name"; git commit. Commented Aug 29, 2010 at 15:43
  • @Torek - More git goodness. These developers should be real proud of their inabilities.... Commented Sep 18, 2016 at 4:09
  • 1
    Did you try includeIf, see git-scm.com/docs/git-config Commented Mar 4, 2022 at 17:32

5 Answers 5

17

I found a way to execute this - it wasn't elegant but it did work - and so far seems to be the only way to get this to work.

Git uses the HOME path to determine where .gitconfig is. I was able to perform something like this:

/home/marco/.silly/.gitconfig /home/marco/.stupid/.gitconfig /home/marco/.gitconfig 

And when executing Git Commit (which is the only command that requires the .gitconfig) I override the home path.

HOME=/home/marco/.silly/ git commit -m "silly configuration" 

You can then use alias to do this easily

alias sillygit="HOME=/home/marco/.silly/ git" sillygit commit -m "silly stuff" 
Sign up to request clarification or add additional context in comments.

2 Comments

Nice hack. I can't seem to find any real way to do this - there's a GIT_CONFIG environment variable, but it only affects git config itself, in the same way as its -f,--file option.
For the git version 2.35.2 and above first user have to apply: env HOME=/home/marco/.silly git config --global --add safe.directory <repo-path>
5

Mario Ceppi's alias approach can be used in a slightly more elegant way using the -c config=value argument to git:

$ alias sillygit="git -c user.name=Silly -c [email protected]" $ sillygit commit 

This of course assumes you don't mind keeping the differing config keys in your .bashrc or the like instead of in your .gitconfig, and it has the caveat of breaking shell completion.

Comments

3

@amirouche's comment and Emil Lundberg's answer can be combined to actually load another Git config file:

alias git="git -c 'include.path=/some/path/to/my/custom/.gitconfig'" 

However, the user's ~/.gitconfig file is still loaded. This approach only overwrites settings from the other git config files.

Comments

0

If you only need to use one .gitconfig file in each workspace, instead of having to switch between configs while working in one workspace, then includeIf may suffice, as it can be used to load custom configurations depending on workspace path elements or remote urls: https://git-scm.com/docs/git-config#_conditional_includes

Comments

-3

You can use --git-dir

git --git-dir /home/marco/silly/.git commit ... 

1 Comment

--git-dir sets the repository being edited, which the questioner is specifically trying to avoid.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.