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?
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?
Antworten:
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).
.gitconfigDatei in dieses Verzeichnis verschoben habe , hat dies nicht funktioniert.
Ändern Sie das HOME-Verzeichnis, da dies falsch ist. Besser ist es, einen symbolischen Link für gitconfig zum HOME-Verzeichnis zu erstellen.
$HOMEein Netzlaufwerk und ist bei Problemen mit der Netzwerkverbindung auch die Verbindung nicht erreichbar.
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.
git config --file "included.file"
Schauen Sie in den Abschnitt DATEIEN und UMWELT von git help config.
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.
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.
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\.
%HOMEDRIVE%%HOMEPATH%Verknüpfung und wird unter "Eigenschaften-> Start in" in "c: \ my_repo_folder " geändert . Hat einen Zauber gewirkt.
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
}
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.
%PROGRAMFILES%\Git\etcprofileHOME="c:\location_were_you_want_gitconfig"Hinweis: Die Dateiberechtigungen sind normalerweise eingeschränkt. Ändern Sie sie daher entsprechend, da Sie Ihre Änderungen sonst nicht speichern können.
git config --list --show-originzeigt, dass das ursprüngliche HOME noch vorhanden ist.
Bei mir hat es ganz einfach geklappt:
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:
.gitconfigund andere Bash-Dateien in E ablegen , also habe ich einen Ordner namens home erstellt, in dem ich sie alle haben möchte.mkdir homeHOME="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.