Ändern des Speicherorts von .gitconfig unter Windows

105

Standardmäßig platziert Git unter Windows die globale .gitconfig in c:\documents and settings\user\

Wie kann ich diese Position ändern, damit .gitconfig in gespeichert wird c:\my_configuration_files\?

Kann man das überhaupt machen?

Turm
quelle
Ich wollte nur hinzufügen, dass ich auch darauf stoße. Ich habe alle meine anderen globalen Git-Konfigurationsmaterialien ("exludesfiles" und "attrirutesfile") in% userprofile% /. Git / .gitignore (also in einem Ordner), aber die .gitconfig würde ich gerne direkt neben ihnen haben , muss aber auf der Wurzel von% userprofile% sein .. nur wirklich nervig.
WORMSS
6
Irgendwelche Fortschritte seit die Frage gestellt wurde? Meine .gitconfig befindet sich standardmäßig auf einem Netzwerklaufwerk, was bedeutet, dass sie nicht gelesen werden kann, wenn ich offline bin.
Lech Rzedzicki

Antworten:

67

Wenn Sie festlegen HOME, c:\my_configuration_files\findet git dort .gitconfig. Das Bearbeiten von Umgebungsvariablen wird hier beschrieben . Sie müssen die Variable HOME festlegen und dann jedes cmd.exe-Fenster erneut öffnen. Verwenden Sie den Befehl "set", um zu überprüfen, ob HOME tatsächlich auf den richtigen Wert zeigt.

Das Ändern von HOME wirkt sich natürlich auch auf andere Anwendungen aus. Nach dem Lesen des Quellcodes von git scheint dies jedoch die einzige Möglichkeit zu sein, den Speicherort dieser Dateien zu ändern, ohne die Befehlszeile anpassen zu müssen. Sie sollten auch die Antwort von Stefan berücksichtigen: Sie können die Variable GIT_CONFIG festlegen. Um jedoch den gewünschten Effekt zu erzielen, müssen Sie das --globalFlag an alle Git-Aufrufe übergeben (und alle lokalen Git / Config-Dateien werden ignoriert).

Martin v. Löwis
quelle
2
Hmm, Sie sind sich nicht sicher, ob ich das richtig verstanden habe, aber das Ändern von HOME hat keinen Einfluss auf alle anderen Anwendungen, die es verwenden? Gibt es keine Möglichkeit, HOME zu ändern, sondern lokal für Git?
Turm
Ja, dies würde sich auch auf andere Anwendungen auswirken. Sie haben gefragt, wie Sie den Standort ändern sollen, und ich habe es Ihnen gesagt. Siehe meine Bearbeitung.
Martin v. Löwis
10
Hat jemand dies tatsächlich zum Laufen gebracht, ohne dass die Nebenwirkungen von HOME eine ganze Menge anderer Dinge durcheinander bringen?
Ade Miller
Dies ist höchstwahrscheinlich eine Lösung, die auf der Windows-Plattform funktioniert. Es hat auch bei mir funktioniert. Ich habe Chocolateys Auffrischungsskript verwendet, um die von mir festgelegte Umgebungsvariable HOME (Benutzerumgebungsvariable) zu aktualisieren. Danach habe ich den gewünschten Dateispeicherort erhalten.
Tore Aurstad
Ich musste Git neu installieren, damit dies funktioniert. Wenn ich gerade eine neue Umgebungsvariable namens HOME hinzugefügt und die .gitconfigDatei in dieses Verzeichnis verschoben habe , hat dies nicht funktioniert.
Csaba
46

Ändern Sie das HOME-Verzeichnis, da dies falsch ist. Besser ist es, einen symbolischen Link für gitconfig zum HOME-Verzeichnis zu erstellen.

  1. Verschieben Sie Ihre .gitconfig vom Home-Verzeichnis des Benutzers in das gewünschte Verzeichnis.
  2. Führen Sie die Befehlszeile als Administrator aus
  3. Gehen Sie zu Ihrem Benutzer-Home-Verzeichnis
  4. Geben Sie mklink .gitconfig \ PathForNewLocationOfConfig.gitconfig ein
MicTech
quelle
9
Wenn Sie git config --global ausführen, um Ihrer Konfiguration ein Element hinzuzufügen, wird möglicherweise hinzugefügt, dass Ihr Symlink mit der tatsächlichen Kopie der verwendeten .gitconfig überschrieben wird. Ich bin auf dieses Problem gestoßen, als ich einen Speicherort getestet habe, an dem \ PathForNewLocationOfConfig.gitconfig mein Dropbox-Ordner war
MotoWilliams
8
Wenn sich Ihre .gitconfig auf einem Netzwerklaufwerk befindet, wird möglicherweise die Meldung "Das Gerät unterstützt keine symbolischen Links" angezeigt, die diese Option ausschließt.
Mittag und
4
Ich denke nicht, dass diese Lösung für irgendjemanden funktionieren wird. Befindet sich in unserem Unternehmen $HOMEein Netzlaufwerk und ist bei Problemen mit der Netzwerkverbindung auch die Verbindung nicht erreichbar.
andreee
1
@MotoWilliams besuchen dies im Jahr 2017 erneut: Der Symlink bleibt nach der Bearbeitung mit --global
Snake
2
Hier setzt die Gruppenpolizei (AD) HOMEDRIVE, HOMEPATH und HOMESHARE, aber nicht einfaches, altes, einfaches HOME. In Abwesenheit von HOME scheint Git eine Kombination der vorherigen drei zu verwenden. Das Festlegen von HOME (über die übliche Methode zum Festlegen benutzerspezifischer Umgebungsvariablen) funktioniert jedoch: GIT verwendet den von Ihnen festgelegten HOME-Wert, und grouppolicy beeinträchtigt HOME nicht.
David I. McIntosh
29

Ich habe dieses Problem mit einem etwas anderen Ansatz gelöst, den ich für andere Konfigurationsdateien gesehen habe. Git Config unterstützt Includes , mit denen Sie auf eine Konfigurationsdatei an einem anderen Speicherort verweisen können. Dieser alternative Speicherort wird dann importiert und an Ort und Stelle erweitert, als wäre er Teil der .gitconfig-Datei. Jetzt habe ich nur noch einen einzigen Eintrag in .gitconfig:

[include]
   path = c:\\path\\to\\my.config

Alle von Git in die .gitconfig-Datei geschriebenen Aktualisierungen überschreiben meinen Include-Pfad nicht. Es bedeutet jedoch, dass ich gelegentlich Werte von .gitconfig nach my.config verschieben muss.

Joe Brinkman
quelle
+1: Keine ungeraden Konfigurationen und meine globale gitconfig ist etwas, das ich in einem Git-Repo selbst speichere. Daher ist es meine Aufgabe, den Überblick darüber zu behalten, was sich dort befindet. Wenn ich globale Änderungen vornehme, bearbeite ich die globale Datei einfach von Hand. Das funktioniert also perfekt für mich und erfordert keine Seltsamkeit wie das Ändern Ihrer "HOME" -Umgebungsvariablen, was eine seltsame Idee ist, nur um Gits Konfiguration dahin zu bringen, wo Sie sie haben möchten. Das Home-Verzeichnis hat schließlich andere Bedeutungen für viele andere Programme. Mit dieser Lösung können Sie auch eine andere Identität an die Spitze setzen und Ihre Schlüsseleinstellungen für alle Identitäten gleich halten. Ausgezeichnet!
user62177541
2
Ich frage mich, ob es möglich ist, dass git config stattdessen in die Datei in der Datei [include] d schreibt.
Jonathan Nazario
1
@ JonathanNazariogit config --file "included.file"
Pero P.
12

Schauen Sie in den Abschnitt DATEIEN und UMWELT von git help config.

Stefan Näwe
quelle
11

Ich bin kein Git-Meister, aber von der Suche nach der Lösung, die für mich am einfachsten funktionierte, ging ich einfach zu einem Texteditor C:\Program Files (x86)\Git\etcund öffnete ihn profile.

Es gibt eine ifErklärung in Zeile 37 # Set up USER's home directory. Ich nahm die ifAnweisung heraus und legte sie in das lokale Verzeichnis, in dem sich die gitconfig befinden sollte. Dann kopierte ich einfach meine vorhandene gitconfig-Datei (befand sich auf einem Netzlaufwerk) an diesen Speicherort.

scottsandersdev
quelle
Danke vielmals. Während alle anderen Optionen für mich fehlschlugen, ersparte mir dies nur eine Million Git-Anweisungen multipliziert mit 6 Sekunden: D Folgendes habe ich getan ... `HOME =" $ USERPROFILE \ Downloads \ Tools \ Git_Config "`
PravyNandas
2
Das Wort "Zuhause" (oder etwas, das Ihnen ähnlich aussieht: Zeile 37) existiert in Git 2.24 (Dezember 2019) nicht mehr.
Frank Nocke
6

Für mich hatte das Ändern des Start-In-Speicherorts (zumindest von git-gui) keinen Einfluss darauf, wo nach .gitconfig gesucht wurde. Mein Setup bei der Arbeit hängt von U: für unser Zuhause ab, aber wir haben keine Berechtigung, in U: direkt zu schreiben, nur Unterverzeichnisse, die für uns im Inneren erstellt wurden. Dies war also ein Deal-Breaker für mich.

Ich habe das Problem gelöst, indem ich ein Batch-Skript erstellt habe, das die env-Variablen HOMEDRIVE und HOMEPATH nur für diese Anwendung überschreibt. Dann änderte ich meine Startmenü-Verknüpfung, um stattdessen auf dieses Batch-Skript zu verweisen.

Brian Blackburn
quelle
1
Ich möchte weitere Informationen darüber, was Sie getan haben, um dieses Update durchzuführen.
Matt Casto
Können Sie Ihre Lösung teilen?
Sal
4

Überprüfen Sie zuerst die Einstellung HOME und ändern Sie dann HOME und HOMEDRIVE in ein vorhandenes Verzeichnis.

c:\git>set HOME
HOME=U:\
HOMEDRIVE=U:
HOMEPATH=\

Ändern Sie dann HOME und HOMEDRIVE um

set HOME=c:\tmp
set HOMEDRIVE=C:
Aliti
quelle
3

Wenn Sie unter Windows arbeiten und Probleme beim Ändern von Umgebungsvariablen oder mklinkaufgrund unzureichender Berechtigungen haben, besteht eine einfache Lösung für Ihr Problem darin, Git Batch an einem anderen Speicherort zu starten.

Klicken Sie einfach mit der rechten Maustaste auf Git Bash.exe, klicken Sie auf Eigenschaften und ändern Sie die Eigenschaft "Start in" in c:\my_configuration_files\.

FatAlbert
quelle
Wow das funktioniert total mit Leichtigkeit. Erstellt eine neue %HOMEDRIVE%%HOMEPATH%Verknüpfung und wird unter "Eigenschaften-> Start in" in "c: \ my_repo_folder " geändert . Hat einen Zauber gewirkt.
Shane
2
Das hat bei mir nicht funktioniert. Die .gitconfig-Datei wurde immer noch aus meinem Home-Verzeichnis geladen
Dave B
3

Ich wollte das Gleiche tun. Das Beste, was ich finden konnte, war die Lösung von @ MicTech. Wie von @MotoWilliams hervorgehoben, überlebt dies jedoch keine von Git vorgenommenen Aktualisierungen der .gitconfig-Datei, die den Link durch eine neue Datei ersetzt, die nur die neuen Einstellungen enthält.

Ich habe dieses Problem gelöst, indem ich das folgende PowerShell-Skript geschrieben und in meinem Profilstart-Skript ausgeführt habe. Bei jeder Ausführung werden alle Einstellungen, die der .gitconfig des Benutzers hinzugefügt wurden, in die globale kopiert und anschließend der gesamte Text in der .gitconfig-Datei durch den Header [include] ersetzt, der die globale Datei importiert.

Ich behalte die globale .gitconfig-Datei zusammen mit vielen anderen globalen Skripten und Tools in einem Repo. Ich muss nur daran denken, alle Änderungen einzuchecken, die das Skript an meine globale Datei anfügt.

Das scheint für mich ziemlich transparent zu funktionieren. Ich hoffe es hilft!

9. September: Aktualisiert, um zu erkennen, wann neue Einträge in der Konfigurationsdatei Duplikate sind, und sie zu ignorieren. Dies ist nützlich für Tools wie SourceTree, die neue Updates schreiben, wenn sie keine vorhandenen finden und den Includes nicht folgen.

function git-config-update
{
  $localPath = "$env:USERPROFILE\.gitconfig".replace('\', "\\")
  $globalPath = "C:\src\github\Global\Git\gitconfig".replace('\', "\\")

  $redirectAutoText = "# Generated file. Do not edit!`n[include]`n  path = $globalPath`n`n"
  $localText = get-content $localPath

  $diffs = (compare-object -ref $redirectAutoText.split("`n") -diff ($localText) | 
    measure-object).count

  if ($diffs -eq 0)
  {
    write-output ".gitconfig unchanged."
    return
  }

  $skipLines = 0
  $diffs = (compare-object -ref ($redirectAutoText.split("`n") | 
     select -f 3) -diff ($localText | select -f 3) | measure-object).count
  if ($diffs -eq 0)
  {
    $skipLines = 4
    write-warning "New settings appended to $localPath...`n "
  }
  else
  {
    write-warning "New settings found in $localPath...`n "
  }
  $localLines = (get-content $localPath | select -Skip $skipLines) -join "`n"
  $newSettings = $localLines.Split(@("["), [StringSplitOptions]::RemoveEmptyEntries) | 
    where { ![String]::IsNullOrWhiteSpace($_) } | %{ "[$_".TrimEnd() }

  $globalLines = (get-content  $globalPath) -join "`n"
  $globalSettings =  $globalLines.Split(@("["), [StringSplitOptions]::RemoveEmptyEntries)| 
    where { ![String]::IsNullOrWhiteSpace($_) } | %{ "[$_".TrimEnd() }

  $appendSettings = ($newSettings | %{ $_.Trim() } | 
    where { !($globalSettings -contains $_.Trim()) })
  if ([string]::IsNullOrWhitespace($appendSettings))
  {
    write-output "No new settings found."
  }
  else
  {
    echo $appendSettings
    add-content $globalPath ("`n# Additional settings added from $env:COMPUTERNAME on " + (Get-Date -displayhint date) + "`n" + $appendSettings)
  }
  set-content $localPath $redirectAutoText -force
}
Ade Miller
quelle
2

Als jemand, der sich schon SEHR LANG dafür interessiert hat. Siehe aus dem Handbuch:

$ XDG_CONFIG_HOME / git / config - Zweite benutzerspezifische Konfigurationsdatei. Wenn$XDG_CONFIG_HOME nicht gesetzt oder leer, wird $ HOME / .config / git / config verwendet. Alle in dieser Datei festgelegten einwertigen Variablen werden von den Angaben in ~ / .gitconfig überschrieben. Es ist eine gute Idee, diese Datei nicht zu erstellen, wenn Sie manchmal ältere Versionen von Git verwenden, da die Unterstützung für diese Datei erst vor kurzem hinzugefügt wurde.

Welches wurde erst kürzlich hinzugefügt. Dieser Speicherauszug stammt aus 2.15.0.

Funktioniert bei mir.

ehiller
quelle
Dies ist die einfachste, am wenigsten aufdringliche und zuverlässigste Lösung in Windows.
Will
2
  1. In Ordner wechseln %PROGRAMFILES%\Git\etc
  2. Datei bearbeiten profile
  3. Zur ersten Zeile hinzufügen HOME="c:\location_were_you_want_gitconfig"
  4. Getan

Hinweis: Die Dateiberechtigungen sind normalerweise eingeschränkt. Ändern Sie sie daher entsprechend, da Sie Ihre Änderungen sonst nicht speichern können.

cuasijoe
quelle
Dies funktioniert nicht ab Git 2.24, Win10, Dezember 2019. git config --list --show-originzeigt, dass das ursprüngliche HOME noch vorhanden ist.
Frank Nocke
1

Bei mir hat es ganz einfach geklappt:

  1. Kopieren Sie ".gitconfig" aus dem alten Verzeichnis: nach% USERPROFILE% (Standard in "c: \ users \ username")
  2. Klicken Sie mit der rechten Maustaste auf die Startsymbole von GITGUI und GITBASH und ändern Sie "Ausführen": "% HOMEDRIVE %% HOMEPATH%" in "% USERPROFILE%". Natürlich können Sie anstelle von "% USERPROFILE%" jedes andere Verzeichnis verwenden.

Screenshot vor

Screenshot danach

Ralph Schwerdt
quelle
0

Lösung ohne Änderung des Betriebssystems der Windows HOME-Variablen
: Windows 10
Git-Version: 2.27.0.windows.1

Ich verwende eine tragbare Version von Git, daher befinden sich alle meine Konfigurationsdateien auf meinem USB-Stick (E :). Das hat bei mir funktioniert:

  1. Laden Sie portables Git von https://git-scm.com/ herunter . Führen Sie die Datei aus und installieren Sie sie am gewünschten Speicherort. Ich habe es in E: \ git installiert .
  2. Führen Sie git-bash.exe von E: \ git aus .
  3. Ich wollte .gitconfigund andere Bash-Dateien in E ablegen , also habe ich einen Ordner namens home erstellt, in dem ich sie alle haben möchte.
    mkdir home
  4. Gehen Sie zum Ordner etc und öffnen Sie die Datei mit dem Namen profile (in meinem Fall ist es E: \ git \ etc \ profile)
  5. In absoluten Pfad zum Heim - Verzeichnis wir erstellt hat (oder in das Verzeichnis , in dem Sie Ihre .gitconfig Datei gespeichert haben wollen) am Ende der Profildatei.
    HOME="E:\git\home"

Jetzt wird nicht mehr im Verzeichnis C: \ Users <Benutzername> nach .gitconfig gesucht, sondern nur noch in Ihrem oben festgelegten Pfad gesucht.

$ git config --global --list
fatal: unable to read config file 'E:/git/home/.gitconfig': No such file or directory

Es gab einen Fehler, da dort noch keine .gitconfig-Datei vorhanden ist. Dies soll nur zeigen, dass wir den Speicherort der .gitconfig-Datei erfolgreich geändert haben, ohne das HOME-Verzeichnis in Windows zu ändern.

Allika
quelle