Ich benutze meinen persönlichen Laptop sowohl für geschäftliche als auch für private Projekte und möchte meine geschäftliche E-Mail-Adresse für meine Verpflichtungen bei der Arbeit (gitolite) und meine persönliche E-Mail-Adresse für den Rest (github) verwenden.
Ich habe über die folgenden Lösungen gelesen, die alle entweder global oder temporär sind:
git config --global user.email "[email protected]"
git config user.email "[email protected]"
git commit --author "Bob <[email protected]>"
- Einstellung einer der
GIT_AUTHOR_EMAIL
,GIT_COMMITTER_EMAIL
oderEMAIL
Umgebungsvariablen
Eine Lösung besteht darin, eine Shell-Funktion manuell auszuführen, mit der meine Umgebung auf Arbeit oder Privat eingestellt wird. Ich bin mir jedoch ziemlich sicher, dass ich häufig vergessen werde, zur richtigen Identität zu wechseln, was dazu führt, dass die falsche Identität festgelegt wird.
Gibt es eine Möglichkeit, ein bestimmtes Repository, einen Projektnamen usw. an eine Identität (Name, E-Mail) zu binden? Was machen Leute?
quelle
Antworten:
git config user.email "[email protected]"
Wenn Sie dies in einem Repo tun, wird die Konfiguration auf DIESEM Repo und nicht global festgelegt.
Scheint so, als ob Sie danach suchen, es sei denn, ich verstehe Sie falsch.
quelle
Sie müssen den folgenden lokalen Befehl set verwenden :
lokaler Satz
lokal bekommen
Die lokale Konfigurationsdatei befindet sich im Projektverzeichnis :
.git/config
.globale Menge
global bekommen
Die globale Konfigurationsdatei in Ihrem Home-Verzeichnis :
~/.gitconfig
.Denken Sie daran, Leerzeichen usw. zu zitieren, zum Beispiel: 'Vorname Nachname'
quelle
Bearbeiten Sie die Konfigurationsdatei mit im Ordner ".git", um den unterschiedlichen Benutzernamen und die E-Mail-Adresse abhängig vom Repository beizubehalten
Der folgende Befehl zeigt Ihnen, welcher Benutzername und welche E-Mail-Adresse für dieses Repository festgelegt wurden.
Beispiel: Für meine Konfigurationsdatei in D: \ workspace \ eclipse \ ipchat \ .git \ config
Hier ist ipchat mein Reponame
quelle
Wenn Sie es verwenden
git config user.email "[email protected]"
, wird es an das aktuelle Projekt gebunden, in dem Sie sich befinden.Das mache ich für meine Projekte. Ich stelle die entsprechende Identität ein, wenn ich das Repo klone / initiiere. Es ist nicht narrensicher (wenn Sie vergessen und drücken, bevor Sie herausfinden, dass Sie abgespritzt sind), aber es ist ungefähr so gut, wie Sie es ohne die Fähigkeit zu sagen bekommen können
git config --global user.email 'ILLEGAL_VALUE'
Eigentlich können Sie einen illegalen Wert machen. Setze deine
git config --global user.name $(perl -e 'print "x"x968;')
Wenn Sie dann vergessen, Ihre nicht globalen Werte festzulegen, wird eine Fehlermeldung angezeigt.
[BEARBEITEN] Auf einem anderen System musste ich die Anzahl von x auf 968 erhöhen, damit es mit "fatal: Unmöglich lange persönliche Kennung" fehlschlug. Gleiche Version von git. Seltsam.
quelle
Wenn Sie den
--global
Parameter nicht verwenden , werden die Variablen nur für das aktuelle Projekt festgelegt.quelle
Ab Git 2.13 können Sie eine
includeIf
in Ihrer gitconfig verwenden, um eine Datei mit einer anderen Konfiguration einzuschließen, die auf dem Pfad des Repositorys basiert, in dem Sie Ihre git-Befehle ausführen.Da mit Ubuntu 18.04 ein ausreichend neuer Git geliefert wird, verwende ich diesen in meinem
~/.gitconfig
ziemlich glücklich.https://motowilliams.com/conditional-includes-for-git-config#disqus_thread
Um Git 2.13 verwenden zu können, müssen Sie entweder eine PPA hinzufügen (Ubuntu älter als 18.04 / Debian) oder die Binärdateien herunterladen und installieren (Windows / anderes Linux).
quelle
git config core.sshCommand
mehreren privaten Schlüsseln ergibt sich eine vollständige nahtlose Verwaltung der Git-Identität.Das war genau mein Problem. Ich habe ein Hook-Skript geschrieben, das Sie warnt, wenn Sie eine Github-Fernbedienung haben und keinen lokalen Benutzernamen definiert haben.
So richten Sie es ein:
Erstellen Sie ein Verzeichnis für den globalen Hook
mkdir -p ~/.git-templates/hooks
Weisen Sie git an, alles in
~/.git-templates
Ihr Projektverzeichnis zu kopieren,.git
wenn Sie git init oder clone ausführengit config --global init.templatedir '~/.git-templates'
Und jetzt kopiere die folgenden Zeilen in
~/.git-templates/hooks/pre-commit
die Datei und mache sie ausführbar (vergiss das nicht, sonst führt Git sie nicht aus!)Wenn Sie andere Hosts für Ihre privaten Repositorys verwenden, müssen Sie diese
github.com
entsprechend Ihren Anforderungen ersetzen .Jedes Mal, wenn Sie a
git init
odergit clone
git ausführen, wird dieses Skript in das Repository kopiert und ausgeführt, bevor ein Commit ausgeführt wird. Wenn Sie keinen lokalen Benutzernamen festgelegt haben, wird eine Warnung ausgegeben, und Sie können keine Festschreibung vornehmen.quelle
Ich mag den Weg von Micah Henning in seinem Artikel sehr (siehe Einrichten von Git-Identitäten ) zu diesem Thema sehr. Die Tatsache, dass er die Identität auf jedes erstellte / geklonte Repository anwendet und erzwingt, ist ein guter Weg, um nicht zu vergessen, dies jedes Mal einzurichten.
Grundlegende Git-Konfiguration
Deaktiviert die aktuelle Benutzerkonfiguration in git:
Erzwingen Sie die Identitätskonfiguration für jedes neue lokale Repository:
Erstellen Sie einen Git-Alias für den
identity
Befehl, den wir später verwenden werden:Identitätserstellung
Erstellen Sie eine Identität mit GPG (verwenden Sie
gpg
odergpg2
abhängig davon, was Sie auf Ihrem System haben). Wiederholen Sie die nächsten Schritte für jede Identität, die Sie verwenden möchten.Kopieren Sie den öffentlichen Schlüsselblock und fügen Sie ihn als GPG-Schlüssel zu Ihren GitHub / GitProviderOfChoice-Einstellungen hinzu.
Fügen Sie der Git-Konfiguration eine Identität hinzu. Wiederholen Sie dies auch für jede Identität, die Sie hinzufügen möchten:
Richten Sie die Identität für ein Repository ein
Wenn einem neuen Repo keine Identität zugeordnet ist, wird beim Festschreiben ein Fehler angezeigt, der Sie daran erinnert, ihn festzulegen.
Geben Sie die gewünschte Identität in einem neuen Repository an:
Sie können jetzt die Gitlab- Identität festlegen .
quelle