Domyślnie w systemie Windows Git umieszcza globalny plik .gitconfig w c:\documents and settings\user\
Jak mogę zmienić tę pozycję, aby plik .gitconfig był przechowywany w c:\my_configuration_files\
?
Czy można to w ogóle zrobić?
Domyślnie w systemie Windows Git umieszcza globalny plik .gitconfig w c:\documents and settings\user\
Jak mogę zmienić tę pozycję, aby plik .gitconfig był przechowywany w c:\my_configuration_files\
?
Czy można to w ogóle zrobić?
Odpowiedzi:
Jeśli ustawisz HOME
na c:\my_configuration_files\
, git zlokalizuje tam plik .gitconfig. Edycja zmiennych środowiskowych została opisana tutaj . Musisz ustawić zmienną HOME, a następnie ponownie otworzyć dowolne okno cmd.exe. Użyj polecenia „set”, aby sprawdzić, czy HOME rzeczywiście wskazuje właściwą wartość.
Zmiana HOME będzie oczywiście miała wpływ również na inne aplikacje. Jednak po przeczytaniu kodu źródłowego gita wydaje się, że jest to jedyny sposób na zmianę lokalizacji tych plików bez konieczności dostosowywania wiersza poleceń. Powinieneś także rozważyć odpowiedź Stefana: możesz ustawić zmienną GIT_CONFIG. Jednak aby nadać mu pożądany efekt, musisz przekazać --global
flagę do wszystkich wywołań gita (plus wszystkie lokalne pliki .git / config są ignorowane).
.gitconfig
plik do tego katalogu, to nie zadziałało.
Zmień katalog HOME, ponieważ jest to nieprawidłowe. Lepiej jest utworzyć dowiązanie symboliczne dla gitconfig do katalogu HOME.
$HOME
znajduje się na dysku sieciowym i ilekroć jest jakiś problem z połączeniem sieciowym, również łącze jest nieosiągalne.
Rozwiązałem ten problem, używając nieco innego podejścia, które widziałem w przypadku innych plików konfiguracyjnych. Git Config obsługuje elementy, które umożliwiają wskazanie pliku konfiguracyjnego w innej lokalizacji. Ta alternatywna lokalizacja jest następnie importowana i rozwijana w miejscu, tak jakby była częścią pliku .gitconfig. Więc teraz mam tylko jeden wpis w .gitconfig:
[include]
path = c:\\path\\to\\my.config
Wszelkie aktualizacje zapisane przez Git w pliku .gitconfig nie zastąpią mojej ścieżki dołączania. Oznacza to, że czasami może być konieczne przeniesienie wartości z .gitconfig do my.config.
git config --file "included.file"
Zajrzyj do sekcji PLIKI i ŚRODOWISKO w git help config
.
Nie jestem mistrzem Git, ale od przeszukania rozwiązania, które działało dla mnie najłatwiej, było po prostu przejście do edytora tekstu C:\Program Files (x86)\Git\etc
i otwarcie profile
go.
W if
linii 37 jest oświadczenie # Set up USER's home directory
. Wyciągnąłem if
oświadczenie i umieściłem w lokalnym katalogu, w którym chciałem, aby był gitconfig, a następnie po prostu skopiowałem mój istniejący plik gitconfig (znajdował się na dysku sieciowym) do tej lokalizacji.
Dla mnie zmiana lokalizacji Start In (przynajmniej git-gui) nie wpłynęła na to, gdzie szukał .gitconfig. Moja konfiguracja w pracy montuje U: dla naszego domu, ale nie mamy pozwolenia na pisanie w U: bezpośrednio, tylko podkatalogi, które zostały dla nas utworzone w środku, więc było to dla mnie przełomem.
Rozwiązałem problem, wykonując skrypt wsadowy, który przesłania zmienne env HOMEDRIVE i HOMEPATH tylko dla tej aplikacji. Następnie zmieniłem skrót w menu Start, aby wskazywał na ten skrypt wsadowy.
Jeśli pracujesz w mklink
systemie Windows i masz problem ze zmianą zmiennych środowiskowych lub z powodu niewystarczających uprawnień, łatwym rozwiązaniem problemu jest uruchomienie git batch w innej lokalizacji.
Kliknij prawym przyciskiem myszy Git Bash.exe, kliknij właściwości i zmień właściwość „Rozpocznij w” na c:\my_configuration_files\
.
%HOMEDRIVE%%HOMEPATH%
na `c: \ my_repo_folder`. Działał urok.
Chciałem zrobić to samo. Najlepsze, co udało mi się znaleźć, to rozwiązanie @ MicTech. Jednak, jak zauważył @MotoWilliams, nie przetrwa to żadnych aktualizacji dokonanych przez Gita w pliku .gitconfig, który zastępuje łącze nowym plikiem zawierającym tylko nowe ustawienia.
Rozwiązałem to, pisząc następujący skrypt PowerShell i uruchamiając go w skrypcie startowym mojego profilu. Za każdym razem, gdy jest uruchamiany, kopiuje wszystkie ustawienia, które zostały dodane do pliku .gitconfig użytkownika, do pliku globalnego, a następnie zastępuje cały tekst w pliku .gitconfig nagłówkiem i [include] importującym plik globalny.
Przechowuję globalny plik .gitconfig w repozytorium wraz z wieloma innymi globalnymi skryptami i narzędziami. Wszystko, co muszę zrobić, to pamiętać o sprawdzaniu wszelkich zmian, które skrypt dołącza do mojego pliku globalnego.
Wydaje się, że działa to dla mnie całkiem przejrzyste. Mam nadzieję, że to pomoże!
9 września: Zaktualizowano, aby wykrywać, kiedy nowe wpisy dodane do pliku konfiguracyjnego są duplikatami i ignorować je. Jest to przydatne w przypadku narzędzi takich jak SourceTree, które będą pisać nowe aktualizacje, jeśli nie mogą znaleźć istniejących i nie śledzą dołączeń.
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
}
Jako ktoś, kto był tym zainteresowany BARDZO DŁUGI CZAS. Zobacz z instrukcji:
$ XDG_CONFIG_HOME / git / config - drugi plik konfiguracyjny specyficzny dla użytkownika. Jeśli $XDG_CONFIG_HOME
nie jest ustawiona lub pusta, zostanie użyty $ HOME / .config / git / config. Każda zmienna jednowartościowa ustawiona w tym pliku zostanie nadpisana przez zawartość ~ / .gitconfig. Dobrze jest nie tworzyć tego pliku, jeśli czasami używasz starszych wersji Gita, ponieważ obsługa tego pliku została dodana dość niedawno.
Który został niedawno dodany. Ten zrzut pochodzi z wersji 2.15.0.
Pracuje dla mnie.
%PROGRAMFILES%\Git\etc
profile
HOME="c:\location_were_you_want_gitconfig"
Uwaga: uprawnienia do plików są zwykle ograniczone, więc zmień je odpowiednio, w przeciwnym razie nie będziesz mógł zapisać zmian.
git config --list --show-origin
pokazuje, że oryginalny HOME jest nadal na swoim miejscu.
U mnie zadziałało bardzo prosto:
Rozwiązanie bez konieczności zmiany zmiennej Windows HOME
System operacyjny: Windows 10
wersja git: 2.27.0.windows.1
Używam przenośnej wersji Gita, więc wszystkie moje pliki konfiguracyjne znajdują się na moim pendrive (E :). Oto, co zadziałało dla mnie:
.gitconfig
i inne pliki bash w E , więc utworzyłem folder o nazwie home, w którym chcę je wszystkie.mkdir home
HOME="E:\git\home"
Teraz nie szuka już w katalogu C: \ Users <nazwa_użytkownika> pliku .gitconfig, ale szuka tylko w ustawionej powyżej ścieżce.
$ git config --global --list
fatal: unable to read config file 'E:/git/home/.gitconfig': No such file or directory
Wystąpił błąd, ponieważ nie ma tam jeszcze pliku .gitconfig. Ma to na celu jedynie zademonstrowanie, że pomyślnie zmieniliśmy lokalizację pliku .gitconfig bez zmiany katalogu HOME w systemie Windows.