Git scheint Konfigurationswerte auf drei Ebenen zu unterstützen:
- Globale Einstellungen pro System (gespeichert in
/etc/git-core
) - Globale Benutzereinstellungen (gespeichert in
~/.gitconfig
) - Lokale Einstellungen pro Repository (gespeichert in
$REPO/.git/config
)
Diese Optionen decken den größten Teil der Basis ab, aber ich suche nach einer Möglichkeit, mit einer vierten Ebene umzugehen. Ich habe eine (sehr) große Sammlung von Repositorys, für die ich einen anderen Wert user.email
als den üblichen verwenden muss. Diese Repositorys werden häufig über automatisierte Skripts erstellt und bearbeitet. Die Einrichtung lokaler Einstellungen pro Repository ist umständlich.
Alle fraglichen Repositorys befinden sich unter einem bestimmten Pfadpräfix auf meinem lokalen System. Gibt es eine Möglichkeit, irgendwo einen Konfigurationswert festzulegen, der von allen Repositorys unter diesem Pfad geerbt wird? (Ähnliche .htaccess
Einstellungen erben das gesamte Dateisystem.) Vielleicht gibt es eine Möglichkeit, bedingte Werte in der globalen Konfigurationsdatei festzulegen? Welche anderen Vorkehrungen könnten in einer UNIX-Umgebung getroffen werden, um mit einer Reihe von Repositorys wie meinem fertig zu werden?
.gitconfig
in jedem von ihnen erstellten Verzeichnis zu optimieren . Zum Beispiel kann das Repo von IIRC Android dies tun, aber Sie müssen die Quelle sorgfältig lesen, um dies herauszufinden. (Ich bin mir nicht ganz sicher, das habe ich schon eine Weile nicht mehr getan.)Antworten:
Ich habe keine Möglichkeit gefunden, Git auf dieser vierten Ebene zu konfigurieren. Die einzige Möglichkeit scheint darin zu bestehen, dass der Konfigurationswert pro Befehl überschrieben wird
git -c key=value
.Meine derzeitige Hacky-Lösung besteht darin, eine Shell-Funktion zu definieren, die als Wrapper für Git dient. Beim Aufruf werden die Argumente an den Befehl system git übergeben, jedoch nicht bevor das aktuelle Arbeitsverzeichnis überprüft und dem Befehl gegebenenfalls ein zusätzliches Argument hinzugefügt wird.
quelle
command git -c [email protected] user.name="Alter Ego" "$@"
oder wie soll ich das machen? Gesucht hoch & niedrig und der einzige Hinweis auf diese -c Flagge, den ich gefunden habe, war Ihre, danke, sehr geschätzt.command git -c [email protected] -c user.name="Alter Ego" "$@"
Sie können die E-Mail-Adresse für git mit der Umgebungsvariablen konfigurieren
GIT_AUTHOR_EMAIL
. Wenn Sie dies mit Bash-Skripten beim Eingeben eines Verzeichnisses oder einer verzeichnisspezifischen Shell-Konfiguration mit zsh kombinieren , können Sie die Einstellungen problemlos pro Verzeichnis oder übergeordnetem Verzeichnis ändern. Wenn Sie z. B. in ein Verzeichnis eingeben~/work
, können Sie die Umgebungsvariablen automatisch anpassen, um Ihre E-Mail zu ändern Adresse.quelle
Sehen Sie sich die Lösung basierend auf der Git-Konfiguration an:
http://gik.firetrot.com/index.php/2018/05/06/git-configuration-across-multiple-repositories/
Fügen Sie der Datei "~ / .gitconfig" hinzu:
Erstellen Sie die Datei "~ / .gitconfig-project1" mit folgendem Inhalt:
quelle
Basierend auf der Antwort von Caleb können wir einen modifizierten
git
Befehl definieren, der alle Repositorys in diesem Verzeichnis dauerhaft korrekt konfiguriert, sodass alle zukünftigen Verwendungen von Vanilla Git die neue Konfiguration verwenden. Ich benutzehub
, das ist ein anderer Git-Wrapper, also habe ich meinenalias git=hub
durch diesen ersetzt undhub
meine Funktion aufgerufen. Wenn Sie ihn nicht verwendenhub
, ersetzen Sie allehub
Aufrufe durchcommand git
:Im Gegensatz zu Calebs Antwort, die nur in einer Shell funktioniert (und sofern nicht ausdrücklich anders angegeben, nur in einer interaktiven Shell), betrifft dies auch andere Git-Frontends, die die Git-Konfiguration korrekt lesen, wie z. B. emacs magit.
quelle