Zmiana lokalizacji .gitconfig w systemie Windows


105

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ć?


Chciałem tylko dodać, że też w to wpadam. Mam wszystkie inne rzeczy związane z globalną konfiguracją git („exludesfiles” i „attrirutesfile”) w% userprofile% /. Git / .gitignore (czyli w folderze), ale plik .gitconfig chciałbym, aby znajdował się tuż obok nich , ale musi znajdować się w katalogu głównym% userprofile% .. po prostu naprawdę irytujące.
WORMSS

6
Czy są jakieś postępy od czasu zadania pytania? Mój plik .gitconfig domyślnie znajduje się na dysku sieciowym, co oznacza, że ​​nie może go odczytać, gdy jestem offline.
Lech Rzedzicki

Odpowiedzi:


67

Jeśli ustawisz HOMEna 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ć --globalflagę do wszystkich wywołań gita (plus wszystkie lokalne pliki .git / config są ignorowane).


2
Hmm, nie jestem pewien, czy dobrze zrozumiałem, ale czy zmiana HOME nie wpłynie również na wszystkie inne aplikacje, które go używają? Czy nie ma sposobu na zmianę HOME, ale lokalnie na Git?
Rook

Tak, miałoby to wpływ również na inne aplikacje. Zapytałeś, jak zmienić lokalizację, a ja ci powiedziałem. Zobacz moją edycję.
Martin v. Löwis

10
Czy ktokolwiek rzeczywiście sprawił, że to zadziałało bez skutków ubocznych przeniesienia DOMU, psującego całą masę innych rzeczy?
Ade Miller

Najprawdopodobniej jest to rozwiązanie działające na platformie Windows. U mnie też się udało. Użyłem skryptu odświeżającego Chocolatey, aby odświeżyć ustawioną przeze mnie zmienną środowiskową HOME (zmienną środowiskową użytkownika). Następnie uzyskałem żądaną lokalizację pliku.
Tore Aurstad

Musiałem ponownie zainstalować Git, aby to zadziałało. Jeśli właśnie dodałem nową zmienną środowiskową o nazwie HOME i przeniosłem .gitconfigplik do tego katalogu, to nie zadziałało.
Csa77

46

Zmień katalog HOME, ponieważ jest to nieprawidłowe. Lepiej jest utworzyć dowiązanie symboliczne dla gitconfig do katalogu HOME.

  1. Przenieś plik .gitconfig z katalogu domowego użytkownika do wybranego katalogu.
  2. Uruchom wiersz poleceń jako administrator
  3. Przejdź do katalogu domowego użytkownika
  4. Wpisz mklink .gitconfig \ PathForNewLocationOfConfig.gitconfig

9
Warto dodać, że jeśli uruchomisz git config --global, aby dodać element do konfiguracji, to twoje dowiązanie symboliczne zostanie nadpisane aktualną kopią używanego pliku .gitconfig. Napotkałem ten problem podczas testowania lokalizacji, w której \ PathForNewLocationOfConfig.gitconfig był moim folderem Dropbox
MotoWilliams,

8
Jeśli plik .gitconfig znajduje się na dysku sieciowym, może zostać wyświetlony komunikat „Urządzenie nie obsługuje dowiązań symbolicznych”, który wyklucza tę opcję.
południe i

4
Myślę, że to rozwiązanie nie zadziała dla nikogo. W naszej firmie $HOMEznajduje się na dysku sieciowym i ilekroć jest jakiś problem z połączeniem sieciowym, również łącze jest nieosiągalne.
andreee

1
@MotoWilliams ponownie odwiedza to w 2017 roku: link symboliczny pozostaje nienaruszony po edycji za pomocą --global
Snake

2
Tutaj policja grupowa (AD) ustawia HOMEDRIVE, HOMEPATH i HOMESHARE, ale nie zwykły, stary, prosty DOM. W przypadku braku HOME, git wydaje się używać kombinacji trzech poprzednich. Ale ustawienie HOME (za pomocą zwykłej metodologii ustawiania zmiennych środowiskowych specyficznych dla użytkownika) działa: GIT używa ustawionej wartości HOME, a grouppolicy nie blokuje HOME.
David I. McIntosh

29

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.


+1: brak dziwnych konfiguracji, a mój globalny plik gitconfig jest czymś, co przechowuję w samym repozytorium git, więc śledzenie tego, co tam jest, jest moją pracą. Podczas wprowadzania zmian globalnych po prostu edytuję plik globalny ręcznie. Więc to działa idealnie dla mnie i nie wymaga żadnych dziwactw, takich jak zmiana zmiennej środowiskowej "HOME", co jest dziwnym pomysłem tylko po to, aby uzyskać konfigurację Gita tam, gdzie chcesz. W końcu katalog domowy ma inne znaczenie dla wielu innych programów. Możesz również umieścić inną tożsamość na górze i zachować te same ustawienia kluczy we wszystkich tożsamościach dzięki temu rozwiązaniu. Doskonały!
user62177541

2
Zastanawiam się, czy można zamiast tego zapisać konfigurację git do pliku w pliku [include] d.
Jonathan Nazario

1
@JonathanNazariogit config --file "included.file"
Pero P.,


11

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\etci otwarcie profilego.

W iflinii 37 jest oświadczenie # Set up USER's home directory. Wyciągnąłem ifoś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.


Dzięki za tonę. Podczas gdy wszystkie inne opcje zawiodły, zaoszczędziło mi to milion instrukcji git pomnożonych przez 6 sekund: D oto, co zrobiłem ... `HOME =" $ USERPROFILE \ Downloads \ Tools \ Git_Config "`
PravyNandas

2
Słowo `` dom '' (lub cokolwiek podobnego do twojej linii: 37) nie istnieje już w git 2.24 (grudzień 2019).
Frank Nocke

6

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.


1
Chciałbym uzyskać więcej informacji o tym, co zrobiłeś, aby wykonać tę poprawkę.
Matt Casto

Czy możesz podzielić się swoim rozwiązaniem?
Sal

4

Najpierw sprawdź ustawienie HOME, a następnie zmień HOME i HOMEDRIVE na istniejący reż.

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

następnie zmień HOME i HOMEDRIVE o

set HOME=c:\tmp
set HOMEDRIVE=C:

3

Jeśli pracujesz w mklinksystemie 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\.


Wow, to całkowicie działa z łatwością. Utworzono nowy skrót i pod 'properties-> start in' zmieniono %HOMEDRIVE%%HOMEPATH%na `c: \ my_repo_folder`. Działał urok.
Shane

2
To nie zadziałało dla mnie. Plik .gitconfig był nadal ładowany z mojego katalogu domowego
Dave B

3

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
}

2

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_HOMEnie 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.


To najprostsze, najmniej uciążliwe i najbardziej niezawodne rozwiązanie w systemie Windows.
kwill

2
  1. Przejdź do folderu %PROGRAMFILES%\Git\etc
  2. Edytuj plik profile
  3. Dodaj do pierwszego wiersza HOME="c:\location_were_you_want_gitconfig"
  4. Gotowe

Uwaga: uprawnienia do plików są zwykle ograniczone, więc zmień je odpowiednio, w przeciwnym razie nie będziesz mógł zapisać zmian.


To nie działa od git 2.24, Win10, grudzień 2019. git config --list --show-originpokazuje, że oryginalny HOME jest nadal na swoim miejscu.
Frank Nocke

1

U mnie zadziałało bardzo prosto:

  1. Skopiuj plik „.gitconfig” ze starego katalogu: do% USERPROFILE% (standard w „c: \ users \ nazwa_użytkownika”)
  2. Kliknij prawym przyciskiem myszy ikony startowe GITGUI i GITBASH i zmień „uruchom w”: „% HOMEDRIVE %% HOMEPATH%” na „% USERPROFILE%”. Oczywiście zamiast „% USERPROFILE%” można użyć dowolnego innego katalogu.

zrzut ekranu przed

zrzut ekranu po


0

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:

  1. Pobierz przenośny Git ze strony https://git-scm.com/ . Uruchom plik i zainstaluj go w wymaganej lokalizacji. Zainstalowałem go w E: \ git .
  2. Uruchom git-bash.exe z E: \ git .
  3. Chciałem umieścić .gitconfigi inne pliki bash w E , więc utworzyłem folder o nazwie home, w którym chcę je wszystkie.
    mkdir home
  4. Przejdź do folderu etc i otwórz plik o nazwie profile (w moim przypadku jest to E: \ git \ etc \ profile)
  5. Dodaj bezwzględną ścieżkę do utworzonego przez nas katalogu domowego (lub do katalogu, w którym chcesz umieścić plik .gitconfig) na końcu pliku profilu .
    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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.