Überschreiben Sie den konfigurierten Benutzer für ein einzelnes Git-Commit

97

Ich versuche, von meinem Arbeits-Laptop aus, der bereits für den Git-Server des Unternehmens konfiguriert ist , ein Projekt auf github.com durchzuführen. Gibt es eine Möglichkeit, verschiedene Autorenanmeldeinformationen anzugeben, die mithilfe einer anderen Konfigurationsdatei oder anderer Befehlszeilenoptionen möglich sind?

Ich habe es versucht

--author="My Name <[email protected]>" 

und ich erhielt die Nachricht:

 Committer: unknown <[email protected]>
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 [email protected]

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

    git commit --amend --reset-author

Mein Benutzername für das Commit für das Projekt github.com wurde jedoch nicht aktualisiert. Kann ich noch etwas ausprobieren und ist es überhaupt möglich?

FilBot3
quelle
2
Git unterscheidet zwischen dem Autor und dem Committer . Verwenden Sie, um den Committer vorübergehend für einen Befehl festzulegen -c user.name=Me [email protected]. Informationen zum Verwenden einer benutzerdefinierten globalen Konfiguration finden Sie in dieser Frage oder zum Verwenden eines Shell-Alias ​​mit -cOptionen. Aber beides ist in dieser Situation wahrscheinlich nicht das Richtige - Sie möchten eine Konfiguration pro Repo.
Robin Green
Mit Git 2.22 (Q2 2019) haben Sie dedizierte Einstellungen {author,committer}.{name,email}. Siehe meine Antwort unten
VonC

Antworten:

177

Erstens ist der Autor nicht unbedingt derselbe wie der Committer. Git verfolgt beide.

Um festzulegen, welcher Name nur für dieses Repository verwendet werden soll, haben Sie folgende Möglichkeiten:

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

Beachten Sie das Fehlen der --globalOption. Dadurch wird die Konfiguration nur in diesem Repository festgelegt.

Alternativ können Sie dies nur für einen einzelnen Befehl tun, indem Sie die folgende -cOption verwenden:

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

Aber ich denke, es ist besser, nur die obigen Konfigurationsoptionen zu verwenden.

John Szakmeister
quelle
5
Dies ist genau das , was ich brauchte, da ich mich von einem freigegebenen Konto (root auf dem Entwicklungsserver) in git repo unter mir festlegen muss und nicht möchte, dass anderen mein Name / meine E-Mail-Adresse angeboten wird.
andrej
57

Versuchen Sie, dies Ihrem git-Befehl voranzustellen:

git -c [email protected] -c user.name='Your Name'

Dies ist für einen One-Shot in Ordnung, aber Sie können dies lieber in der .git / config-Datei des lokalen Repos speichern, das Sie von git geklont haben. Dies kann durch Ausführen git config (kein --global oder --system, um es "lokal für das Repo" zu machen) oder durch Bearbeiten von .git/config(es ist dieselbe Syntax wie) erfolgen~/.gitconfig

Asenar
quelle
1
Danke dir! Ich teile einen Server mit mehreren Personen und möchte keinen Standardbenutzer festlegen. Dies ist perfekt!
schrecklich
1
@horriblyUnpythonic Gern geschehen :) Sie können auch einen Alias ​​in Ihrem erstellen .bash_aliasesund / oder einen Pre-Commit-Hook festlegen, um das Commit abzulehnen, wenn der Benutzer nicht definiert ist.
Asenar
27

Sie können auch Umgebungsvariablen GIT_COMMITTER_NAME, GIT_COMMITTER_EMAIL, GIT_AUTHOR_NAME, und GIT_AUTHOR_EMAILauf einer Pro-Shell oder sogar pro-Befehl - Basis.

Jesse Glick
quelle
Großartig, da dies meistens in einem gemeinsam genutzten Computerszenario verwendet wird, ist eine Sitzung mit automatischer Bereinigung perfekt.
kmac
1
Hat bei mir nicht funktioniert. Der Autor blieb danach gleich git commit --amend. Nur der Commiter hat sich geändert.
Ondra Žižka
Das gleiche hier, also habe ichgit commit --amend --author="$GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL>"
KCD
1
Dies liegt daran, dass git commit --amendder Autor von Natur aus nicht verändert wird, wie auf der Manpage angegeben. Lösung: git commit --amend --reset-author
Kubanczyk
7

Ich glaube du könntest rennen:

git config user.name "Your Name"
git config user.email [email protected]

für verschiedene Teile von Git. Öffnen Sie den Ordner, in dem die Arbeit für das Repo ausgeführt wird, auf dem Github-Server.

Stellen Sie sicher, dass in diesem Arbeitsordner ein .git-Ordner angezeigt wird. Öffnen Sie nun diesen Ordner in Terminal / Console / CommandPrompt und versuchen Sie, den Benutzernamen und die E-Mail-Adresse für diesen Ordner nur durch Ausführen der oben angegebenen Befehle zu ändern.

Wenn Sie dies ändern, können Sie jetzt möglicherweise auf den GitHub-Server zugreifen.

Schauen Sie hier: https://help.github.com/articles/setting-your-username-in-git https://help.github.com/articles/setting-your-username-in-git

Ich glaube auch, dass es eine Möglichkeit gibt, mithilfe Ihres Github-Benutzernamens und -Kennworts im Befehl selbst auf ein Remote-Repo zuzugreifen, aber ich zitiere es nicht, weil es bei mir nicht funktioniert hat.

Joe
quelle
5

Die Antwort von Jesse Glick hier mit einer erweiterten Implementierung weiterverfolgen, da IMO sein Vorschlag der beste Weg ist, dies zu tun.

Fügen Sie das Folgende zu Ihrem .bash_profile hinzu. Sie werden aufgefordert, einen Benutzer einzugeben, wenn Sie zum ersten Mal einen git-Befehl in der aktiven Shell ausführen. Der Benutzer wird dann für alle nachfolgenden Läufe gespeichert.

(Verweisen Sie einen eingegebenen Benutzerwert offensichtlich auf die genauen gewünschten Namen und E-Mail-Adressen für die verschiedenen git auther / name-Werte im Fallblock und aktualisieren Sie die Zuweisungen nach Bedarf.)

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
    [email protected]
    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 "$@"
}
Slumtrimpet
quelle
2

Sie können auch Umgebungsvariablen GIT_COMMITTER_NAME, GIT_COMMITTER_EMAIL, GIT_AUTHOR_NAME, und GIT_AUTHOR_EMAILauf einer Pro-Shell oder sogar pro-Befehl - Basis.

Seit Git 2.22 (Q2 2019) haben Sie eine neue Option: Vier neue Konfigurationsvariablen {author,committer}.{name,email}wurden eingeführt, um sie user.{name,email}in bestimmten Fällen zu überschreiben .

Siehe Commit 39ab4d0 (04. Februar 2019) von William Hubbs (``) .
(Zusammengeführt von Junio ​​C Hamano - gitster- in Commit 4e021dc , 07. März 2019)

config: Geben Sie separate Autoren- und Committer-IDs an

Die author.email, author.name, committer.emailund committer.nameEinstellungen sind analog zu den GIT_AUTHOR_*und GIT_COMMITTER_*Umgebungsvariablen, aber für das git configSystem.
Dadurch können sie für jedes Repository separat festgelegt werden.

Git unterstützt das Festlegen verschiedener Autoren- und Committer-Informationen mit Umgebungsvariablen. In der Shell werden jedoch Umgebungsvariablen festgelegt. Wenn also unterschiedliche Autoren- und Committer-Informationen für unterschiedliche Repositorys benötigt werden, ist ein externes Tool erforderlich.

Dies fügt Unterstützung für Git - Config für author.email, author.name, committer.emailund committer.name Einstellungen , so können diese Informationen pro Repository eingestellt werden.

VonC
quelle