Modifica della posizione di .gitconfig su Windows


105

Per impostazione predefinita su Windows Git inserisce .gitconfig globale in c:\documents and settings\user\

Come posso cambiare quella posizione in modo che sia archiviato .gitconfig c:\my_configuration_files\?

Può essere fatto affatto?


Volevo solo aggiungere che mi sto imbattendo anche in questo. Ho tutte le mie altre cose di configurazione git globale ("exludesfiles" e "attrirutesfile") in% userprofile% /. Git / .gitignore (quindi in una cartella), ma il .gitconfig mi piacerebbe che si trovasse proprio accanto a loro , ma deve essere alla radice di% userprofile% .. solo davvero fastidioso.
WORMSS

6
Qualche progresso da quando è stata posta la domanda? Il mio .gitconfig si trova su un'unità di rete per impostazione predefinita, il che significa che non può leggerlo quando sono offline.
Lech Rzedzicki

Risposte:


67

Se imposti HOMEsu c:\my_configuration_files\, git individuerà .gitconfig lì. La modifica delle variabili di ambiente è descritta qui . È necessario impostare la variabile HOME, quindi riaprire qualsiasi finestra cmd.exe. Usa il comando "set" per verificare che HOME punti effettivamente al valore corretto.

La modifica di HOME, ovviamente, influirà anche su altre applicazioni. Tuttavia, dalla lettura del codice sorgente di git, questo sembra essere l'unico modo per modificare la posizione di questi file senza la necessità di modificare la riga di comando. Dovresti anche considerare la risposta di Stefan: puoi impostare la variabile GIT_CONFIG. Tuttavia, per ottenere l'effetto desiderato, è necessario passare il --globalflag a tutte le chiamate git (più eventuali file .git / config locali vengono ignorati).


2
Hmm, non sono sicuro di aver capito bene ma il cambio di HOME non influirà anche su tutte le altre applicazioni che lo utilizzano? Non c'è un modo per cambiare HOME, ma locale in Git?
Rook

Sì, avrebbe effetto anche su altre applicazioni. Hai chiesto come cambiare la posizione e te l'ho detto. Vedi la mia modifica.
Martin v. Löwis,

10
Qualcuno ha davvero fatto in modo che funzioni senza che gli effetti collaterali del trasloco di CASA rovinino un sacco di altre cose?
Ade Miller

Questa è molto probabilmente una soluzione che funziona su piattaforma Windows. Ha funzionato anche per me. Ho usato lo script refreshenv di Chocolatey per aggiornare la variabile d'ambiente HOME che ho impostato (variabile d'ambiente dell'utente). Successivamente, ho ottenuto il percorso del file desiderato.
Tore Aurstad

Ho dovuto reinstallare Git perché funzionasse. Se ho appena aggiunto una nuova variabile di ambiente denominata HOME e ho spostato il .gitconfigfile in quella directory, non ha funzionato.
Csaba

46

Cambiare la directory HOME per questo è sbagliato. È meglio creare un collegamento simbolico per gitconfig alla directory HOME.

  1. Sposta il tuo .gitconfig dalla directory home dell'utente, nella directory in cui desideri.
  2. Esegui la riga di comando come amministratore
  3. Vai alla home directory dell'utente
  4. Immettere mklink .gitconfig \ PathForNewLocationOfConfig.gitconfig

9
Potrebbe valere la pena aggiungere che se esegui git config --global per aggiungere un elemento alla tua configurazione, il tuo collegamento simbolico verrà sovrascritto con la copia effettiva del .gitconfig che viene utilizzato. Ho riscontrato questo problema durante il test di una posizione in cui \ PathForNewLocationOfConfig.gitconfig era la mia cartella Dropbox
MotoWilliams

8
Se il tuo .gitconfig si trova su un'unità di rete potresti ricevere un messaggio "Il dispositivo non supporta i collegamenti simbolici" che esclude questa opzione.
mezzogiorno e

4
Non penso che questa soluzione funzionerà per nessuno. Nella nostra azienda, $HOMEè su un drive di rete e ogni volta che c'è un problema con la connessione di rete, anche il collegamento è irraggiungibile.
andreee

1
@MotoWilliams che rivisita questo nel 2017: il collegamento simbolico rimane intatto dopo la modifica con --global
Snake

2
Qui, la polizia di gruppo (AD) imposta HOMEDRIVE, HOMEPATH e HOMESHARE, ma non semplice, vecchia, semplice CASA. In assenza di HOME, git sembra utilizzare una combinazione dei tre precedenti. Ma l'impostazione di HOME (tramite la consueta metodologia per l'impostazione delle variabili di ambiente specifiche dell'utente) funziona: GIT utilizza il valore HOME impostato e grouppolicy non sostituisce HOME.
David I. McIntosh

29

Ho risolto questo problema utilizzando un approccio leggermente diverso che ho visto funzionare per altri file di configurazione. Git Config supporta include che ti consentono di puntare a un file di configurazione in un'altra posizione. Quella posizione alternativa viene quindi importata ed espansa in posizione come se facesse parte del file .gitconfig. Quindi ora ho solo una singola voce in .gitconfig:

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

Qualsiasi aggiornamento scritto da Git al file .gitconfig non sovrascriverà il mio percorso di inclusione. Significa che occasionalmente potrei aver bisogno di spostare i valori da .gitconfig a my.config.


+1: nessuna configurazione strana e il mio gitconfig globale è qualcosa che memorizzo in un repository git stesso, quindi tenere traccia di cosa c'è dentro è il mio lavoro. Quando apporto modifiche globali, modifico semplicemente il file globale a mano. Quindi questo funziona perfettamente per me, e non richiede stranezze come cambiare la tua variabile d'ambiente "HOME", che è una strana idea solo per il gusto di portare la configurazione di Git dove vuoi. Dopo tutto, la directory home ha altri significati per molti altri programmi. Inoltre puoi mettere un'identità diversa in alto e mantenere le stesse impostazioni chiave per tutte le identità con questa soluzione. Eccellente!
user62177541

2
Mi chiedo se sia possibile che git config scriva invece nel file nel file [include] d.
Jonathan Nazario

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


11

Non sono un maestro di Git, ma dalla ricerca intorno alla soluzione che ha funzionato più facilmente per me è stato semplicemente andare su C:\Program Files (x86)\Git\etce aprireprofile in un editor di testo.

C'è una ifdichiarazione sulla linea 37 # Set up USER's home directory. Ho estratto l' ifistruzione e ho inserito nella directory locale che volevo fosse gitconfig, quindi ho semplicemente copiato il mio file gitconfig esistente (era su un'unità di rete) in quella posizione.


Grazie mille. Sebbene tutte le altre opzioni non funzionassero per me, questo mi ha fatto risparmiare un milione di istruzioni git moltiplicate per 6 secondi: D ecco cosa ho fatto ... `HOME =" $ USERPROFILE \ Downloads \ Tools \ Git_Config "`
PravyNandas

2
La parola 'home' (o qualsiasi cosa simile alla tua riga: 37) non esiste più in git 2.24 (dicembre 2019).
Frank Nocke

6

Per me, la modifica della posizione di inizio in (almeno di git-gui) non ha influenzato la posizione in cui cercava .gitconfig. La mia configurazione al lavoro monta U: per la nostra casa, ma non abbiamo il permesso di scrivere in U: direttamente, solo sottodirectory che sono state create per noi all'interno, quindi questo è stato un problema per me.

Ho risolto il problema creando uno script batch che sovrascriva le variabili env HOMEDRIVE e HOMEPATH solo per quell'applicazione. Quindi ho cambiato il mio collegamento del menu Start per puntare invece a quello script batch.


1
Vorrei maggiori informazioni su ciò che hai fatto per ottenere questa correzione.
Matt Casto

Puoi condividere la tua soluzione?
Sal

4

Prima controlla l'impostazione HOME, quindi cambia HOME e HOMEDRIVE in una directory esistente.

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

quindi cambia HOME e HOMEDRIVE con

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

3

Se sei su Windows e hai problemi a modificare le variabili di ambiente o mklink causa di privilegi insufficienti, una soluzione semplice al tuo problema è avviare git batch in un'altra posizione.

Basta fare clic con il pulsante destro del mouse su Git Bash.exe, fare clic su proprietà e modificare la proprietà "Avvia in" in c:\my_configuration_files\.


Wow, questo funziona totalmente con facilità. Creata una nuova scorciatoia e in 'proprietà-> inizia in' cambiato %HOMEDRIVE%%HOMEPATH%in `c: \ my_repo_folder`. Ha funzionato un fascino.
Shane

2
Questo non ha funzionato per me. Il file .gitconfig era ancora caricato dalla mia directory home
Dave B

3

Volevo fare la stessa cosa. Il meglio che ho trovato è stata la soluzione di @ MicTech. Tuttavia, come sottolineato da @MotoWilliams questo non sopravvive agli aggiornamenti effettuati da Git al file .gitconfig che sostituisce il collegamento con un nuovo file contenente solo le nuove impostazioni.

Ho risolto questo problema scrivendo il seguente script PowerShell ed eseguendolo nello script di avvio del mio profilo. Ogni volta che viene eseguito, copia tutte le impostazioni che sono state aggiunte al .gitconfig dell'utente a quello globale e quindi sostituisce tutto il testo nel file .gitconfig con l'intestazione e [include] che importa il file globale.

Conservo il file .gitconfig globale in un repository insieme a molti altri script e strumenti globali. Tutto quello che devo fare è ricordarmi di controllare tutte le modifiche che lo script aggiunge al mio file globale.

Questo sembra funzionare in modo abbastanza trasparente per me. Spero che sia d'aiuto!

9 settembre: aggiornato per rilevare quando le nuove voci aggiunte al file di configurazione sono duplicate e ignorarle. Questo è utile per strumenti come SourceTree che scriveranno nuovi aggiornamenti se non riescono a trovare quelli esistenti e non seguono gli include.

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

Come qualcuno che è stato interessato a questo per MOLTO TEMPO. Vedi dal manuale:

$ XDG_CONFIG_HOME / git / config - Secondo file di configurazione specifico dell'utente. Se $XDG_CONFIG_HOMEnon è impostato o è vuoto, verrà utilizzato $ HOME / .config / git / config. Qualsiasi variabile a valore singolo impostata in questo file verrà sovrascritta da ciò che si trova in ~ / .gitconfig. È una buona idea non creare questo file se a volte usi versioni precedenti di Git, poiché il supporto per questo file è stato aggiunto abbastanza di recente.

Che è stato aggiunto solo di recente. Questo dump è da 2.15.0.

Per me va bene.


Questa è la soluzione più semplice, meno invadente e più affidabile in Windows.
kwill

2
  1. Cambia in cartella %PROGRAMFILES%\Git\etc
  2. Modifica file profile
  3. Aggiungi alla prima riga HOME="c:\location_were_you_want_gitconfig"
  4. Fatto

Nota: i permessi dei file sono generalmente limitati, quindi modificali di conseguenza o non sarai in grado di salvare le modifiche.


Questo non funziona a partire da git 2.24, Win10, dicembre 2019. git config --list --show-originmostra, la HOME originale è ancora al suo posto.
Frank Nocke

1

Per me ha funzionato molto semplice:

  1. Copia ".gitconfig" dalla vecchia directory: in% USERPROFILE% (standard in "c: \ users \ username")
  2. Fai clic con il pulsante destro del mouse sulle icone di avvio di GITGUI e GITBASH e cambia "run in": "% HOMEDRIVE %% HOMEPATH%" in "% USERPROFILE%". Ovviamente puoi usare qualsiasi altra directory invece di "% USERPROFILE%".

screenshot prima

schermata dopo


0

Soluzione senza dover modificare il sistema
operativo variabile Windows HOME : Windows 10
versione git: 2.27.0.windows.1

Uso la versione portatile di Git, quindi tutti i miei file di configurazione sono sulla mia pen-drive (E :). Questo è ciò che ha funzionato per me:

  1. Scarica Git portatile da https://git-scm.com/ . Esegui il file e installalo nella posizione richiesta. L'ho installato in E: \ git .
  2. Esegui git-bash.exe da E: \ git .
  3. Volevo mettere .gitconfige altri file bash in E , quindi ho creato una cartella chiamata home dove li voglio tutti dentro.
    mkdir home
  4. Vai alla cartella ecc e apri il file chiamato profilo (nel mio caso, è E: \ git \ etc \ profile)
  5. Aggiungi il percorso assoluto alla directory home che abbiamo creato (o alla directory in cui desideri che si trovi il tuo file .gitconfig) alla fine del file del profilo .
    HOME="E:\git\home"

Ora non cerca più nella directory C: \ Users <username> .gitconfig ma cerca solo nel percorso impostato sopra.

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

Ha dato un errore perché non c'è ancora un file .gitconfig lì. Questo è solo per dimostrare che abbiamo cambiato con successo la posizione del file .gitconfig senza cambiare la directory HOME in Windows.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.