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?
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?
Risposte:
Se imposti HOME
su 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 --global
flag a tutte le chiamate git (più eventuali file .git / config locali vengono ignorati).
.gitconfig
file in quella directory, non ha funzionato.
Cambiare la directory HOME per questo è sbagliato. È meglio creare un collegamento simbolico per gitconfig alla directory HOME.
$HOME
è su un drive di rete e ogni volta che c'è un problema con la connessione di rete, anche il collegamento è irraggiungibile.
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.
git config --file "included.file"
Guarda nella sezione FILE e AMBIENTE di git help config
.
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\etc
e aprireprofile
in un editor di testo.
C'è una if
dichiarazione sulla linea 37 # Set up USER's home directory
. Ho estratto l' if
istruzione 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.
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.
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\
.
%HOMEDRIVE%%HOMEPATH%
in `c: \ my_repo_folder`. Ha funzionato un fascino.
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
}
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_HOME
non è 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.
%PROGRAMFILES%\Git\etc
profile
HOME="c:\location_were_you_want_gitconfig"
Nota: i permessi dei file sono generalmente limitati, quindi modificali di conseguenza o non sarai in grado di salvare le modifiche.
git config --list --show-origin
mostra, la HOME originale è ancora al suo posto.
Per me ha funzionato molto semplice:
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:
.gitconfig
e altri file bash in E , quindi ho creato una cartella chiamata home dove li voglio tutti dentro.mkdir home
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.