Sostituisci l'utente configurato per un singolo commit git


97

Sto cercando di impegnarmi in un progetto su github.com dal mio laptop di lavoro, che è già configurato per il server git dell'azienda. Esiste un modo per eseguire il commit specificando credenziali di autore diverse, possibile utilizzando un file di configurazione diverso o altre opzioni della riga di comando?

Ho provato a usare

--author="My Name <MyNameEmail@email.com>" 

e ho ricevuto il messaggio:

 Committer: unknown <WorkEmail@workemail.net>
Your name and email address were configured automatically based
on your username and hostname. Please check that they are accurate.
You can suppress this message by setting them explicitly:

    git config --global user.name "Your Name"
    git config --global user.email you@example.com

After doing this, you may fix the identity used for this commit with:

    git commit --amend --reset-author

ma ancora non aggiornava il mio nome utente per il commit nel progetto github.com. C'è qualcos'altro che posso provare ed è anche possibile?


2
Git distingue tra l' autore e il committer . Per impostare temporaneamente il committer per un comando, utilizzare -c user.name=Me user.email=me@example.com. Per utilizzare una configurazione globale personalizzata, vedere questa domanda o utilizzare un alias shell contenente -copzioni. Ma nessuna di queste è probabilmente la cosa giusta da fare in questa situazione: vuoi una configurazione per repo.
Robin Green

Con Git 2.22 (Q2 2019), avrai impostazioni dedicate {author,committer}.{name,email}. Vedi la mia risposta qui sotto
VonC

Risposte:


177

In primo luogo, l'autore non è necessariamente lo stesso del committer. Git tiene traccia di entrambi.

Per impostare il nome da utilizzare solo per questo repository, potresti fare:

git config user.name "Your Name"
git config user.email "Your email"

Notare l'assenza --globaldell'opzione. Questo imposterà la configurazione solo in questo repository.

In alternativa, puoi farlo solo per un singolo comando, utilizzando l' -copzione:

git -c "user.name=Your Name" -c "user.email=Your email" commit ...

Ma penso che sia meglio usare solo le opzioni di configurazione sopra.


5
questo è esattamente ciò di cui avevo bisogno poiché ho bisogno di eseguire il commit da un account condiviso (root su devel server) in git repo sotto me stesso e non voglio che ad altri venga offerto il mio nome / email.
andrej

57

Prova a anteporre questo al tuo comando git:

git -c user.email=email@domain.fr -c user.name='Your Name'

Questo va bene per un one-shot, ma potresti preferire salvarlo nel file .git / config del repository locale che hai clonato da git. Questo può essere fatto eseguendo git config (no --global o --system per renderlo "locale al repository") o modificando il .git/config(è la stessa sintassi di~/.gitconfig


1
Grazie! Condivido un server con più persone e non desidero impostare un utente predefinito. Questo è perfetto!
orribilmente

1
@horriblyUnpythonic sei il benvenuto :) Puoi anche creare un alias nel tuo .bash_aliases, e / o puoi anche impostare un hook pre-commit per rifiutare il commit quando l'utente non è definito.
Asenar

28

È anche possibile impostare le variabili d'ambiente GIT_COMMITTER_NAME, GIT_COMMITTER_EMAIL, GIT_AUTHOR_NAME, e GIT_AUTHOR_EMAILsu una base per-shell o anche per-comando.


Ottimo, poiché questo verrebbe utilizzato principalmente in uno scenario di computer condiviso, per sessione con la pulizia automatica è perfetto.
kmac

1
Non ha funzionato per me. L'autore è rimasto lo stesso dopo git commit --amend. Solo il committente è cambiato.
Ondra Žižka

Lo stesso qui così ho fattogit commit --amend --author="$GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL>"
KCD

1
Questo perché in git commit --amendbase alla progettazione non altera l'autore, come dice la manpage. Soluzione: git commit --amend --reset-author
kubanczyk

7

Credo che potresti correre:

git config user.name "Your Name"
git config user.email you@example.com

per diverse parti di git. Prova ad aprire la cartella in cui viene eseguito il lavoro per il repository sul server GitHub.

Assicurati di vedere una cartella .git in quella cartella di lavoro. Ora apri quella cartella in Terminal / Console / CommandPrompt e prova a cambiare il nome utente e l'e-mail per quella cartella solo eseguendo i comandi che ho specificato sopra.

Modificandolo, ora potresti essere in grado di accedere al server GitHub.

Dai un'occhiata qui: https://help.github.com/articles/setting-your-username-in-git https://help.github.com/articles/setting-your-username-in-git

Inoltre, credo che ci sia un modo per eseguire il push a un repository remoto utilizzando il nome utente e la password di GitHub nel comando stesso, ma non lo sto citando perché non ha funzionato per me.


5

Seguendo la risposta di Jesse Glick qui con un'implementazione estesa perché IMO il suo suggerimento è il modo migliore per farlo.

Aggiungi quanto segue al tuo .bash_profile. Ti chiederà un utente quando esegui per la prima volta un comando git nella shell attiva. Quindi ricorderà l'utente per tutte le esecuzioni successive.

(ovviamente fai un riferimento incrociato a un valore utente di input con i nomi e gli indirizzi email desiderati per i vari valori git auther / name nel blocco del caso e aggiorna le assegnazioni secondo necessità)

git() {
  echo "Running BETTER git..."
  if [ -z "$GIT_COMMITTER_NAME" ]; then
    while true; do
      read -p "Git User: " UNAME
      case $UNAME in
          user1 ) break;;
          user2 ) break;;
          * ) echo "Invalid User";;
      esac
    done
    GIT_COMMITTER_NAME=$UNAME
    export GIT_COMMITTER_NAME
    GIT_COMMITTER_EMAIL=$UNAME@domain.com
    export GIT_COMMITTER_EMAIL
    GIT_AUTHOR_NAME=$GIT_COMMITTER_NAME
    export GIT_AUTHOR_NAME
    GIT_AUTHOR_EMAIL=$GIT_COMMITTER_EMAIL
    export GIT_AUTHOR_EMAIL
  fi
  echo "  using git user: $GIT_AUTHOR_NAME / $GIT_AUTHOR_EMAIL"
  /usr/bin/git "$@"
}

2

È anche possibile impostare le variabili d'ambiente GIT_COMMITTER_NAME, GIT_COMMITTER_EMAIL, GIT_AUTHOR_NAME, e GIT_AUTHOR_EMAILsu una base per-shell o anche per-comando.

In realtà, da Git 2.22 (Q2 2019) hai una nuova opzione: {author,committer}.{name,email}sono state introdotte quattro nuove variabili di configurazione per eseguire l'override user.{name,email}in casi più specifici.

Vedere commit 39ab4d0 (04 febbraio 2019) di William Hubbs (``) .
(Fuso da Junio ​​C Hamano - gitster- in commit 4e021dc , 07 marzo 2019)

config: consente di fornire ID autore e committer separati

I author.email, author.name, committer.emaile le committer.nameimpostazioni sono analoghe alle GIT_AUTHOR_*e GIT_COMMITTER_*ambientali variabili, ma per il git configsistema.
Ciò consente loro di essere impostati separatamente per ogni repository.

Git supporta l'impostazione di diverse informazioni sull'autore e sul committer con variabili di ambiente. Tuttavia, le variabili di ambiente sono impostate nella shell, quindi se sono necessarie diverse informazioni sull'autore e sul committer per diversi repository è richiesto uno strumento esterno.

Questo aggiunge il supporto alla configurazione git per author.email, author.name, committer.emaile committer.name le impostazioni in modo da questa informazione può essere impostato per ogni repository.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.