Reputation: 83283
I try to commit
like this:
git commit --author='Paul Draper <[email protected]>' -m 'My commit message'
but I get:
*** Please tell me who you are.
Run
git config --global user.email "[email protected]"
git config --global user.name "Your Name"
to set your account's default identity.
Omit --global to set the identity only in this repository.
I can set these, but I am on a shared box, and I would have to (want to) unset them afterwards:
git config user.name 'Paul Draper'
git config user.email '[email protected]'
git commit -m 'My commit message'
git config --unset user.name
git config --unset user.email
That's a lot of lines for one commit
!
Is there shorter way?
Upvotes: 115
Views: 54422
Reputation: 117
Here's the solution that I use on our shared box. In ~/.bashrc
, add the following lines:
alias gitaspaul='alias git="git -c user.name=\"Paul Draper\" -c user.email=\"[email protected]\""'
alias gitasnone='unalias git'
It works as follows: when you're in a shell session, run gitaspaul
. From that moment on, every git command until the end of the session will use your temporary credentials. When you leave the shell, the credentials are forgotten. If you want to manually forget the credentials before the end of the session, run gitasnone
.
This is a nice solution because it's not specific to any one repo, and it sticks around until a natural end of your computing session (like closing your ssh session).
Here's what it looks like:
$ git commit -m "new stuff"
*** Please tell me who you are.
Run
git config --global user.email "[email protected]"
git config --global user.name "Your Name"
to set your account's default identity.
Omit --global to set the identity only in this repository.
$ gitaspaul
$ git commit -m "new stuff"
[master f6a17cd] new stuff
2 files changed, 28 insertions(+), 6 deletions(-)
Upvotes: 1
Reputation: 1
It is worth noting, that git on linux will default to the linux user name as given in the "gecos" field in /etc/passwd. You can output this name with grep $(whoami) /etc/passwd | cut -d ':' -f 5
. If this field is empty you cannot commit without setting a user name but if it is not empty git will use it. So you'd have yourself as author and the system user as committer.
See https://github.com/git/git/blob/master/ident.c
Upvotes: 0
Reputation: 488519
(This occurred to me after suggesting the long version with the environment variables—git commit wants to set both an author and a committer, and --author
only overrides the former.)
All git commands take -c
arguments before the action verb to set temporary configuration data, so that's the perfect place for this:
git -c user.name='Paul Draper' -c user.email='[email protected]' commit -m '...'
So in this case -c
is part of the git
command, not the commit
subcommand.
Upvotes: 178
Reputation: 4033
You can edit the .git/config
file in your repo to add the following alias :
[alias]
paulcommit = -c user.name='Paul Draper' -c user.email='[email protected]' commit
or you can do this by command line :
git config alias.paulcommit "-c user.name='Paul Draper' -c user.email='[email protected]' commit"
And then you can do :
git paulcommit -m "..."
Remarks:
jeancommit
, georgecommit
, ... for the other users of this shared box. .gitconfig
or by adding --global
option to the command line when adding the alias.paulcommit
is not a short one, but it is verbose and you can in general type only git pau
+tab.Upvotes: 24