In meiner ~/.gitconfig
Liste liste ich meine persönliche E-Mail-Adresse unter auf [user]
, da ich diese für Github-Repos verwenden möchte.
Aber ich habe vor kurzem auch angefangen, Git für die Arbeit zu verwenden. Das Git-Repo meines Unternehmens ermöglicht mir das Festschreiben, aber wenn es Ankündigungen neuer Änderungssätze sendet, heißt es, dass diese von Anonym stammen, weil die E-Mail-Adresse in meinem Unternehmen nicht erkannt wird .gitconfig
- zumindest ist das meine Theorie.
Ist es möglich, mehrere [user]
Definitionen in anzugeben .gitconfig
? Oder gibt es eine andere Möglichkeit, die Standardeinstellung .gitconfig
für ein bestimmtes Verzeichnis zu überschreiben ? In meinem Fall checke ich den gesamten Arbeitscode aus. Gibt ~/worksrc/
es eine Möglichkeit, .gitconfig
nur für dieses Verzeichnis (und seine Unterverzeichnisse) ein anzugeben ?
quelle
Antworten:
Sie können ein einzelnes Repo so konfigurieren, dass eine bestimmte Benutzer- / E-Mail-Adresse verwendet wird, die die globale Konfiguration überschreibt. Führen Sie von der Wurzel des Repos aus
Der Standardbenutzer / die Standard-E-Mail-Adresse ist in Ihrer ~ / .gitconfig konfiguriert
quelle
.git/config
Datei sehengit config --edit
und bearbeitengit config --global --edit
. Und falls Sie Abizerns Kommentar verpasst haben, befindet sich die Konfigurationsdatei eines Repositorys unter<repo-root>/.git/config
.Git 2.13
die heute veröffentlicht wurde.Seit Git 2.13 ist es möglich, dies mit neu eingeführten bedingten Includes zu lösen .
Ein Beispiel:
Globale Konfiguration ~ / .gitconfig
Arbeitsspezifische Konfiguration ~ / work / .gitconfig
quelle
git config --list
in verschiedenen Verzeichnissen ausführen. In Unterverzeichnissen~/work/
, die ein Git-Repository enthalten, wird dasincludeIf
wirksam. Beachten Sie, dass in Unterverzeichnissen~/work/
, die kein Git-Repository enthalten, dasincludeIf
nicht ausgeführt wird.Oder Sie können folgende Informationen in Ihre lokale
.git/config
Datei einfügenquelle
Ein Befehl Github Accounts wechseln
Diese Lösung hat die Form eines einzelnen Git-Alias. Nach der Ausführung wird der aktuelle Projektbenutzer einem anderen Konto zugeordnet
Generieren Sie SSH-Schlüssel
Verknüpfen Sie sie mit Ihren GitHub / Bitbucket-Konten
pbcopy < ~/.ssh/id_rsa.pub
add SSH key
Fügen Sie den Schlüssel in die Github-Seite einpbcopy < ~/.ssh/id_rsa_pro.pub
Schritt 1. Automatische Umschaltung der SSH-Taste.
Wir können konfigurieren
ssh
, um eine Verwendung eines bestimmten Verschlüsselungsschlüssels abhängig von der zu sendenhost
. Das Schöne ist, dass Sie mehrere Aliase für dasselbe haben könnenhostname
.Siehe diese Beispieldatei
~/.ssh/config
:Git Remote-Konfiguration
Sie können nun diese Aliase in den git - Fernbedienungen verwenden , indem
[email protected]
durchgit@github_pro
.Sie können entweder Ihre vorhandenen Projektfernbedienungen ändern (mit etwas wie
git remote set-url origin git@github_pro:foo/bar.git
) oder sie direkt beim Klonen anpassen.Mit Alias wird es:
git clone git@github_pro:ArnaudRinquin/atom-zentabs.git
Schritt 2. Ändern der git user.email
Die Git-Konfigurationseinstellungen können global oder pro Projekt sein. In unserem Fall möchten wir eine pro Projekt Einstellungen. Es ist sehr einfach, es zu ändern:
Das ist zwar einfach, aber für die Entwickler, die wir sind, dauert es viel zu lange. Wir können dafür einen sehr einfachen Git-Alias schreiben.
Wir werden es der
~/.gitconfig
Datei hinzufügen .Dann müssen wir nur
git setpromail
noch unsere E-Mail-Adresse für dieses Projekt ändern.Schritt 3. Ein Befehlsschalter bitte?!
Wäre es nicht schön, mit einem einzigen Befehl ohne Parameter von einem Standardkonto zu einem angegebenen Konto zu wechseln? Das ist definitiv möglich. Dieser Befehl besteht aus zwei Schritten:
Wir haben bereits eine Ein-Befehl-Lösung für den zweiten Schritt, aber der erste ist viel schwieriger. Ein Befehl Remote Host ändern
Hier kommt die Lösung in Form eines weiteren Git-Alias-Befehls, den Sie zu Ihrem hinzufügen können
~/.gitconfig
:Dies ermöglicht das Ändern aller Fernbedienungen von einem Host auf einen anderen (den Alias). Siehe das Beispiel:
Kombiniere sie alle
Wir müssen jetzt nur noch die beiden Befehle zu einem kombinieren, das ist ganz einfach. Sehen Sie, wie ich auch Bitbucket-Host-Switching integriere.
Quelllink-Tutorial
quelle
setpromail
Aliasconfig --global
stattdessen einen ausführt (und ich habe andere festgelegte Aliase zum Festlegen anderer E-Mail-Adressen). Es klappt!useConfigOnly = true
der anderen Antwort kombiniert wird .Nachdem ich mich von Orr Sellas Blog-Post inspirieren ließ, schrieb ich einen Pre-Commit-Hook (befindet sich in
~/.git/templates/hooks
), in dem bestimmte Benutzernamen und E-Mail-Adressen basierend auf den Informationen in einem lokalen Repositorie festgelegt wurden./.git/config
:Sie müssen den Pfad zum Vorlagenverzeichnis in Folgendes einfügen
~/.gitconfig
:Dann nimmt jeder
git init
odergit clone
diesen Haken auf und wendet die Benutzerdaten während des nächsten angit commit
. Wenn Sie den Hook auf bereits vorhandene Repos anwenden möchten, führen Sie einfach eingit init
Inside im Repo aus, um es neu zu initialisieren.Hier ist der Haken, den ich mir ausgedacht habe (er muss noch poliert werden - Vorschläge sind willkommen). Speichern Sie es entweder als
oder
und stellen Sie sicher, dass es ausführbar ist:
chmod +x ./post-checkout || chmod +x ./pre_commit
BEARBEITEN:
Also habe ich den Hook als Hook und Befehl in Python umgeschrieben. Zusätzlich ist es möglich, das Skript auch als Git-Befehl (
git passport
) aufzurufen . Es ist auch möglich, eine beliebige Anzahl von IDs in einer Konfigurationsdatei (~/.gitpassport
) zu definieren, die an einer Eingabeaufforderung ausgewählt werden können. Sie finden das Projekt unter github.com: git-passport - Ein in Python geschriebener Git-Befehl und -Hook zum Verwalten mehrerer Git-Konten / Benutzeridentitäten .quelle
chmod +x post-checkout
werden. 2.git_remotes
Werte sind Anfangsteile des gesamten Hostnamens, z[email protected]
. 3.local_id
Werte sollten vom Benutzer an die jeweiligen Namen und E-Mail-Adressen angepasst werden.git init
neue Projekte aus einer IDE wieeclipse
(die keine interaktiven Pre-Commit-Trigger verarbeiten können)Wenn Sie keine Standard-E- Mail-Adresse haben möchten ( E-Mail-Adresslinks zu einem Github-Benutzer ), können Sie konfigurieren, dass Sie gefragt werden möchten. Wie Sie dies tun können, hängt von der verwendeten Git-Version ab (siehe unten).
Der (beabsichtigte) Nachteil ist, dass Sie Ihre E-Mail-Adresse (und Ihren Namen) einmal für jedes Repository konfigurieren müssen. Sie können es also nicht vergessen.
Version <2.7.0
in Ihrer globalen Konfiguration,
~/.gitconfig
wie in einem Kommentar von Dan Aloni in Orr Sellas Blogbeitrag angegeben . Beim Versuch, das erste Commit in einem Repository durchzuführen, schlägt git mit der netten Nachricht fehl:Der Name wird aus der globalen Konfiguration übernommen, wenn die E-Mail-Adresse lokal festgelegt wird (die Nachricht ist nicht genau).
2.7.0 ≤ Version <2.8.0
Das Verhalten in Versionen <2.7.0 war nicht beabsichtigt und wurde mit 2.7.0 behoben. Sie können weiterhin einen Pre-Commit-Hook verwenden, wie in Orr Sellas Blog-Beitrag beschrieben . Diese Lösung funktioniert auch für andere Versionen, die anderen Lösungen jedoch nicht für diese Version.
Version ≥ 2.8.0
Dan Aloni hat eine Option hinzugefügt , um dieses Verhalten zu erreichen (siehe Versionshinweise ). Verwenden Sie es mit:
Damit es funktioniert, dürfen Sie in der globalen Konfiguration keinen Namen oder keine E-Mail-Adresse angeben. Beim ersten Festschreiben wird dann eine Fehlermeldung angezeigt
Die Nachricht ist also nicht sehr lehrreich, aber da Sie die Option explizit festlegen, sollten Sie wissen, was zu tun ist. Im Gegensatz zur Lösung von Versionen <2.7.0 müssen Sie Name und E-Mail immer manuell einstellen.
quelle
git bisect
immer festgestellt , dass Commit 19ce497c ... dieses Verhalten eingeführt hat. Unabhängig von der Version (2.5 - 2.7) kann ich jedochemail =
(ohne Argument) in der Konfiguration verwenden und es zeigt das gleiche Verhalten wieemail = "(none)"
in alten Versionen. Können Sie das bestätigen? Wenn ja, werde ich meine Antwort bearbeiten. Ich bin nur skeptisch, da es so offensichtlich erscheint und ich es vorher nicht benutzt habe.email =
in 2.7.0 versucht. Git errät immer noch die E-Mail-Adresse basierend auf Benutzername und Hostname. Ich benutze jetztpre-commit
Ansatz in Sellas Blog. Ich habe auch den Dan Aloni benachrichtigt, der auf die"(none)"
Idee in Sellas Post gekommen ist, und er hat einen Patch eingereicht, um dies offiziell als Feature zu implementieren: permalink.gmane.org/gmane.comp.version-control.git/285301Mit bedingten Includes in Git 2.13 ist es jetzt möglich, mehrere Benutzer / E-Mails mit wenig Arbeit auf einem Computer nebeneinander zu haben.
user.gitconfig
hat meinen persönlichen Namen und meine E-Mail.work-user.gitconfig
hat meinen Arbeitsnamen und meine E-Mail. Beide Dateien befinden sich im~
Pfad.Mein persönlicher Name / meine E-Mail-Adresse gilt also standardmäßig. Für
c:/work/
dir wird mein Arbeitsname / meine E-Mail-Adresse angewendet. Fürc:/work/github/
dir wird mein persönlicher Name / meine E-Mail-Adresse verwendet. Dies funktioniert, wenn die letzte Einstellung angewendet wird.gitdir
unterscheidet zwischen Groß- und Kleinschreibung und unterscheidet nicht zwischengitdir/i
Groß- und Kleinschreibung."gitdir/i:github/"
würde das bedingte Include für jedes Verzeichnis mitgithub
in seinem Pfad anwenden .quelle
gitdir/i
hat mir geholfen (was in seiner Antwort nicht erwähnt wird).Eine weitere Option, um
git
mit mehreren Namen / E-Mails arbeiten zu können, ist das Aliasinggit
und die Verwendung des-c
Flags, um die globale und repository-spezifische Konfiguration zu überschreiben.Zum Beispiel durch Definieren eines Alias:
Um zu sehen, ob es funktioniert, geben Sie einfach Folgendes ein
git config user.email
:Anstelle eines Alias können Sie auch eine benutzerdefinierte
git
ausführbare Datei in Ihr Verzeichnis einfügen$PATH
.Ein Vorteil dieser Methode gegenüber einer Repository-spezifischen Methode
.git/config
besteht darin, dass sie für jedesgit
Repository gilt, wenn das benutzerdefiniertegit
Programm aktiv ist. Auf diese Weise können Sie problemlos zwischen Benutzern / Namen wechseln, ohne eine (gemeinsam genutzte) Konfiguration zu ändern.quelle
Git-Aliase (und Abschnitte in Git-Konfigurationen) zur Rettung!
Fügen Sie einen Alias hinzu (über die Befehlszeile):
dann setzen Sie zum Beispiel
und in einem neuen oder geklonten Repo können Sie diesen Befehl ausführen:
Diese Lösung ist nicht automatisch, aber das Deaktivieren von Benutzer und E-Mail in Ihrer globalen
~/.gitconfig
und die Einstellunguser.useConfigOnly
auftrue
würde Git dazu zwingen, Sie daran zu erinnern, sie manuell in jedem neuen oder geklonten Repo festzulegen.quelle
Hier sind die vollständigen Schritte, nachdem Sie hier viele Antworten gelesen haben
So richten Sie Einstellungen für mehrere SSH-Schlüssel für verschiedene Github-Konten ein
Möglicherweise möchten Sie Ihre aktuell gespeicherten Schlüssel überprüfen
Wenn Sie zuvor alle zwischengespeicherten Schlüssel löschen möchten ( optional, vorsichtig )
Anschließend können Sie einen SSH-Pub / Priv-Schlüssel erstellen, der mit jeder E-Mail / jedem Konto verknüpft ist, die / das Sie verwenden möchten / müssen
Nachdem Sie diese Befehle ausgeführt haben, werden die folgenden Dateien erstellt
Stellen Sie sicher, dass der Authentifizierungsagent ausgeführt wird
Fügen Sie die generierten Schlüssel wie folgt hinzu (aus dem Ordner ~ / .ssh).
Jetzt können Sie Ihre gespeicherten Schlüssel erneut überprüfen
Jetzt müssen Sie die generierten öffentlichen Schlüssel zu Ihren Github / Bickbuket-Server-Zugriffsschlüsseln hinzufügen
Klonen Sie jedes der Repos in verschiedene Ordner
Gehen Sie zu dem Ordner , in dem der Benutzer Arbeit funktioniert , und führen Sie diese
Nur um zu sehen, was dies bewirkt, überprüfen Sie den Inhalt der ".git / config"
Gehen Sie zu dem Ordner , in dem die Benutzer pers arbeiten und führen diese
Nur um zu sehen, was dies bewirkt, überprüfen Sie den Inhalt der ".git / config"
Nach all dem können Sie Ihren persönlichen Code und Ihren Arbeitscode festschreiben, indem Sie einfach zwischen diesen beiden Ordnern wechseln
Wenn Sie Git Bash verwenden und unter Windows SSH-Schlüssel generieren müssen, gehen Sie folgendermaßen vor:
https://support.automaticsync.com/hc/en-us/articles/202357115-Generating-an-SSH-Key-on-Windows
quelle
Es gibt eine einfache Lösung, die gut funktioniert, um Fehler zu vermeiden.
Entfernen Sie einfach den
[user]
Abschnitt aus Ihrem~/.gitconfig
, wodurch Sie keine Commits vornehmen können, ohneuser.name
für jedes Repository Einstellungen vorzunehmen.~/.bashrc
Fügen Sie in Ihrem einige einfache Aliase für den Benutzer und die E-Mail hinzu:quelle
Diese Antwort ist teilweise von dem Beitrag von @Saucier inspiriert, aber ich suchte nach einer automatisierten Methode zum Einstellen
user.name
unduser.email
pro Repo, basierend auf der Fernbedienung, die etwas leichter war als das von ihm entwickelte Git-Pass-Paket . H / t auch an @John für die Einstellung useConfigOnly. Hier ist meine Lösung:.gitconfig
Änderungen:Post-Kasse Haken , der auf den folgenden Pfad gespeichert werden soll:
~/.git-templates/hooks/post-checkout
:Ich verwende unterschiedliche Anmeldeinformationen für github und gitlab, aber diese Verweise im obigen Code können durch jeden von Ihnen verwendeten Dienst ersetzt oder erweitert werden. Damit der Hook nach dem Auschecken den Benutzernamen und die E-Mail-Adresse für ein Repo nach dem Auschecken automatisch lokal festlegt, stellen Sie sicher, dass der Dienstname in der Remote-URL angezeigt wird, fügen Sie ihn dem Dienstarray im
post-checkout
Skript hinzu und erstellen Sie einen Abschnitt dafür in Ihr.gitconfig
enthält Ihren Benutzernamen und Ihre E-Mail-Adresse für diesen Dienst.Wenn keiner der Dienstnamen in der Remote-URL angezeigt wird oder das Repo keine Remote hat, werden der Benutzername und die E-Mail-Adresse nicht lokal festgelegt. In diesen Fällen ist die
user.useConfigOnly
Einstellung im Spiel, mit der Sie keine Commits vornehmen können, bis der Benutzername und die E-Mail-Adresse auf Repo-Ebene festgelegt sind, und der Benutzer aufgefordert wird, diese Informationen zu konfigurieren.quelle
chmod 755
das Hook-Skript. Andernfalls wird es kopiert, aber nie ausgeführt.GIT_AUTHOR_EMAIL
+ lokal.bashrc
.bashrc_local
: Verfolgen Sie diese Datei nicht, sondern legen Sie sie nur auf Ihrem Arbeitscomputer ab:.bashrc
: Verfolgen Sie diese Datei und machen Sie sie auf Arbeits- und Heimcomputern gleich:Ich verwende https://github.com/technicalpickles/homesick, um meine Punktedateien zu synchronisieren.
Wenn nur gitconfig Umgebungsvariablen akzeptieren würde: Shell-Variablenerweiterung in git config
quelle
Windows-Umgebung
Zusätzlich kann dies geändert werden
Git Extensions --> Settings --> Global Settings
, wenn Sie es in Ihren Systemen installiert haben.gitextensions-neueste-Veröffentlichung
Klicken Sie mit der rechten Maustaste auf einen Ordner / ein Verzeichnis in der Windows-Umgebung, um auf diese Einstellungen zuzugreifen.
Update : So wechseln / pflegen Sie mehrere Einstellungen in Version 2.49
quelle
Vielleicht ist es ein einfacher Hack, aber es ist nützlich. Generieren Sie einfach 2 SSH-Schlüssel wie unten.
Auf die gleiche Weise erstellen Sie eine weitere für persönliche. Sie haben also 2 SSH-Schlüssel, Arbeit und Gesellschaft. Kopieren Sie work.pub, work, personal.pub, personal in ~ / .ssh / Directory.
Erstellen Sie dann ein Shell-Skript mit den folgenden Zeilen und nennen Sie es crev.sh (Company Reverse) mit dem folgenden Inhalt.
Erstellen Sie auf die gleiche Weise eine weitere Datei namens prev.sh (Personal Reverse) mit dem folgenden Inhalt.
Fügen Sie in ~ / .bashrc Aliase für die folgenden Skripte hinzu
Wann immer Sie Gesellschaft verwenden möchten, machen Sie einfach Crev, und wenn Sie persönliche verwenden möchten, tun Sie prev :-p.
Fügen Sie diese SSH-Schlüssel Ihren GitHub-Konten hinzu. Stellen Sie sicher, dass id_rsa noch nicht generiert wurde, da diese Skripte id_rsa überschreiben. Wenn Sie bereits id_rsa generiert haben, verwenden Sie diese für eines der Konten. Kopieren Sie sie als persönlich und überspringen Sie die Generierung persönlicher Schlüssel.
quelle
Ich habe eine Bash-Funktion erstellt, die das erledigt. Hier ist das Github Repo .
Für die Aufzeichnung:
quelle
Fügen Sie dies einfach zu Ihrem ~ / .bash_profile hinzu, um zwischen den Standardschlüsseln für github.com zu wechseln
quelle
Sie können auch
git commit --author "Your Name <[email protected]>"
im Moment des Festschreibens in einem Repo verwenden, in dem Sie als anderer Benutzer festschreiben möchten.quelle
So etwas wie Rob Ws Antwort , erlaubt aber einen anderen SSH-Schlüssel und funktioniert mit älteren Git-Versionen (die zB keine core.sshCommand-Konfiguration haben).
Ich habe die Datei
~/bin/git_poweruser
mit ausführbarer Berechtigung und im Pfad erstellt:Wann immer ich etwas als "Power User" festschreiben oder pushen möchte, verwende ich
git_poweruser
anstelle vongit
. Es sollte in jedem Verzeichnis funktionieren und erfordert keine Änderungen in.gitconfig
oder.ssh/config
zumindest nicht in meinem.quelle
Obwohl die meisten Fragen das OP beantworteten, musste ich dies nur selbst durchgehen und ohne zu googeln konnte ich die schnellste und einfachste Lösung finden. Hier sind einfache Schritte:
.gitconfg
von Ihrem anderen Repo.gitconfig
Datei, z. B. Name, E-Mail-Adresse und Benutzername[user] name = John email = [email protected] username = john133
.gitignore
Liste einen Dateinamen hinzu , um sicherzustellen, dass Sie keine.gitconfig
Datei für Ihr Arbeits-Repo festschreibenquelle