¿Cómo administrar múltiples configuraciones de usuario en Git?

I work with multiple Git remote repositories and each need different Git credentials (Name and Mail).

Is there any solution such as a script or best practices how to manage them?

I know about "config --local", but I don't want to set this variables manually everytime.

preguntado el 08 de enero de 11 a las 19:01

2 Respuestas

It looks like just saying git config user.name (o user.email) in a particular repository, without specifying --global or --system would do the trick. The default is to set the configuration in the current repository, and you have to give it explicit options for it to write to your user-level or system-wide configuration instead.

I don't know how one would do this if you're freshly cloning repositories that need different configuration, though. Perhaps you could write a small script that wraps git clone to clone some repository, and then set the appropriate configuration based on whatever information? If you drop the script in /usr/lib/git-core llamado algo como git-nclone, you can then run it as git nclone.

Edit: Since you don't want to manually set it every time, how about a clone wrapper that remembers the various sets you actually use, and lets you pick the appropriate one for the repository you're cloning. It could even have smart defaults based on where you're clone is coming from.

Respondido el 10 de enero de 11 a las 01:01

changes to the local config appear in the .git/config file - Abizern

If you have a large number of different configs, I'd suggest leaving your global config (~/.gitconfig) without a name/email setting, so that if you try to commit in a repository which hasn't been configured, you'll get a warning. If on the other hand you have two primary configs, set the "safe" one globally, then override it in individual repos. - Cascabel

Git should check the entirety of $PATH for executable files named git-foo, actually, so dropping it in ~/bin/ and making sure it's in your $PATH debería funcionar bien. - fow

I created a couple of aliases that looks like this:

The idea being I can save my credentials (email, username) in the alias definition. Then when I want to clone or initialise, I don't have to perform a git config Cada vez

when initialising:

initgithub = !git init && git config user.email [youremailfor@github.com] && git config user.name [yourgithubusername]

initbitbucket = !git init && git config user.email [youremailfor@bitbucket.com] && git config user.name [yourbitbucketusername]

al clonar:

clonegithub = "!f() { git clone $1 $2; cd $2; git config user.email [youremailfor@github.com]; git config user.name [yourgithubusername];  }; f"

clonebitbucket = "!f() { git clone $1 $2; cd $2; git config user.email [youremailfor@bitbucket.com]; git config user.name [yourbitbucketusername];  }; f"

ussage:

when initialising:

git initgithub

git initbitbucket

al clonar:

git clonegithub https://github.com/pathtoproject.git /c/temp/somefolder/project

git clonebitbucket https://github.com/pathtoproject.git /c/temp/somefolder/project

When cloning you can basically create a function that will execute both the normal clone operation and the config operations. For now it requires that you provide the path to the folder you are cloning to in order to configure your credentials properly.

Respondido el 20 de junio de 20 a las 12:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.