620 Stimmen

Ist es möglich, verschiedene Git-Konfigurationen für verschiedene Projekte zu verwenden?

.gitconfig wird normalerweise in der user.home Verzeichnis.

Ich verwende eine andere Identität, um an Projekten für Unternehmen A zu arbeiten, und eine andere für Unternehmen B (vor allem den Namen/die E-Mail-Adresse). Wie kann ich zwei verschiedene Git-Konfigurationen haben, damit meine Check-Ins nicht mit dem Namen/der E-Mail-Adresse verknüpft werden?

560voto

crea1 Punkte 9937

Seit der Git-Version 2.13 unterstützt Git Die bedingte Konfiguration umfasst . In diesem Beispiel klonen wir die Repos von Unternehmen A in ~/company_a Verzeichnis und die Repos von Unternehmen B in ~/company_b .

In Ihrem .gitconfig können Sie etwa so formulieren.

[includeIf "gitdir:~/company_a/"]
  path = .gitconfig-company_a
[includeIf "gitdir:~/company_b/"]
  path = .gitconfig-company_b

Beispielinhalt von .gitconfig-company_a (die Kernstück Abschnitt kann weggelassen werden, wenn der globale ssh-Schlüssel verwendet werden kann)

[user]
name = John Smith
email = john.smith@companya.net

[core]
sshCommand = ssh -i ~/.ssh/id_rsa_companya

Beispiel für den Inhalt von .gitconfig-company_b

[user]
name = John Smith
email = js@companyb.com

[core]
sshCommand = ssh -i ~/.ssh/id_rsa_companyb

547voto

teymourlouie Punkte 5695

Es gibt 3 Ebenen von git config: Projekt, Global und System.

  • Projekt : Projektkonfigurationen sind nur für das aktuelle Projekt verfügbar und werden in .git/config im Projektverzeichnis gespeichert.
  • weltweit : Globale Konfigurationen sind für alle Projekte des aktuellen Benutzers verfügbar und werden in ~/.gitconfig gespeichert.
  • System : Systemkonfigurationen sind für alle Benutzer/Projekte verfügbar und werden in /etc/gitconfig gespeichert.

Erstellen Sie eine projektspezifische Konfiguration, die Sie im Verzeichnis des Projekts ausführen müssen:

$ git config user.name "John Doe" 

Erstellen Sie eine globale Konfiguration:

$ git config --global user.name "John Doe"

Erstellen Sie eine Systemkonfiguration:

$ git config --system user.name "John Doe" 

Und wie Sie sich denken können, Das Projekt hat Vorrang vor dem globalen und das globale vor dem System.

_Hinweis: Die Projektkonfigurationen sind nur für eine bestimmte Kopie/Klon des Projekts lokal und müssen erneut angewendet werden, wenn das Projekt aus der Ferne neu geklont wird. Es ändert eine lokale Datei, die pas mit einem Commit/Push an die Gegenstelle gesendet._

377voto

Amber Punkte 473552

Le site .git/config Datei in einem bestimmten Klon eines Repositorys ist lokal für diesen Klon. Alle dort vorgenommenen Einstellungen wirken sich nur auf Aktionen für dieses bestimmte Projekt aus.

(Standardmäßig, git config modifiziert .git/config , nicht ~/.gitconfig - nur bei --global ändert sie letztere).

98voto

bcag2 Punkte 1563

Danke @crea1

Eine kleine Variante:

So steht es geschrieben auf https://git-scm.com/docs/git-config#_includes :

Wenn das Muster mit / , ** wird automatisch hinzugefügt. Zum Beispiel, das Muster foo/ wird foo/** . Mit anderen Worten, sie entspricht foo und alles, was sich darin befindet, rekursiv.

So verwende ich in meinem Fall,
~/.gitconfig :

[user] # as default, personal needs
    email = myalias@personal-domain.fr
    name = bcag2
[includeIf "gitdir:~/workspace/"] # job needs, like workspace/* so all included projects
    path = .gitconfig-job

# all others section: core, alias, log…

Wenn sich das Projektverzeichnis also in meinem ~/wokspace/ Die Standard-Benutzereinstellungen werden ersetzt durch
~/.gitconfig-job :

[user]
name = John Smith
email = js@company.com

30voto

mim Punkte 1137

Um genau zu sein, können Sie auch --local zu verwenden aktuelle Repository-Konfigurationsdatei :

git config --local user.name "John Doe" 

Oder, wie @SherylHohman erwähnte, verwenden Sie Folgendes, um die lokale Datei in Ihrem Editor zu öffnen:

git config --local --edit

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X