Modification de l’emplacement .gitconfig sous Windows

Par défaut, sous Windows, Git place le fichier .gitconfig global dans c:\documents and settings\user\

Comment puis-je changer cette position pour que .gitconfig soit stocké dans c:\my_configuration_files\ ?

Peut-on le faire du tout?

Si vous définissez HOME sur c:\my_configuration_files\ , alors git y localisera .gitconfig. La modification des variables d’environnement est décrite ici . Vous devez définir la variable HOME, puis rouvrir toute fenêtre cmd.exe. Utilisez la commande “set” pour vérifier que HOME pointe bien sur la bonne valeur.

Le changement de HOME affectera bien entendu d’autres applications. Cependant, en lisant le code source de git, cela semble être le seul moyen de modifier l’emplacement de ces fichiers sans avoir à ajuster la ligne de commande. Vous devriez également considérer la réponse de Stefan: vous pouvez définir la variable GIT_CONFIG. Cependant, pour lui donner l’effet souhaité, vous devez passer le drapeau --global à toutes les invocations git (plus les fichiers .git / config locaux sont ignorés).

Changer de répertoire HOME pour cela est faux. Mieux vaut créer un lien symbolique pour le répertoire gitconfig vers HOME.

  1. Déplacez votre fichier .gitconfig du répertoire de base de l’utilisateur vers le répertoire de votre choix.
  2. Exécuter la ligne de commande en tant qu’administrateur
  3. Accédez à votre répertoire utilisateur
  4. Entrez mklink .gitconfig \ PathForNewLocationOfConfig.gitconfig

Regardez dans la section FILES et ENVIRONMENT de git help config .

J’ai résolu ce problème en utilisant une approche légèrement différente que j’ai vu fonctionner pour d’autres fichiers de configuration. Git Config prend en charge les fonctionnalités qui vous permettent de pointer vers un fichier de configuration situé à un autre endroit. Cet autre emplacement est ensuite importé et développé comme s’il faisait partie du fichier .gitconfig. Alors maintenant, je n’ai qu’une seule entrée dans .gitconfig:

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

Toute mise à jour écrite par Git dans le fichier .gitconfig ne remplacera pas mon chemin d’inclusion. Cela signifie que, de temps en temps, il peut être nécessaire de déplacer des valeurs de .gitconfig vers my.config.

Je ne suis pas git master, mais en cherchant autour de la solution qui a fonctionné le plus facilement, il suffisait d’aller sur C: \ Program Files (x86) \ Git \ etc et d’ouvrir “profile” dans un éditeur de texte. Il y a une instruction if sur la ligne 37 “# Configurer le répertoire personnel de USER” J’ai sorti l’instruction if et l’ai mise dans le répertoire local que je voulais que gitconfig soit, puis j’ai juste copié mon fichier gitconfig existant (sur un lecteur réseau) à cet endroit.

Pour moi, le changement de l’emplacement de démarrage (de git-gui au moins) n’a pas eu d’incidence sur la recherche de .gitconfig. Mon installation au travail monte U: pour notre maison, mais nous n’avons pas la permission d’écrire en U: directement, seuls les sous-répertoires qui ont été créés pour nous à l’intérieur, donc c’était un casse-tête pour moi.

J’ai résolu le problème en créant un script batch qui remplacera les variables env. HOMEDRIVE et HOMEPATH uniquement pour cette application. Ensuite, j’ai modifié le raccourci du menu Démarrer pour qu’il pointe vers ce script de lot.

Si vous êtes sur Windows et que vous rencontrez des problèmes de modification des variables d’environnement ou de mklink raison de privilèges insuffisants, une solution simple à votre problème consiste à démarrer git batch dans un autre emplacement.

Cliquez avec le bouton droit sur Git Bash.exe, cliquez sur Propriétés et modifiez la propriété “Démarrer dans” en c:\my_configuration_files\ .

Je voulais faire la même chose. Le mieux que j’ai pu trouver était la solution de @ MicTech. Cependant, comme indiqué par @MotoWilliams, cela ne survit pas aux mises à jour apscopes par Git au fichier .gitconfig qui remplace le lien par un nouveau fichier contenant uniquement les nouveaux parameters.

J’ai résolu ce problème en écrivant le script PowerShell suivant et en l’exécutant dans le script de démarrage de mon profil. Chaque fois qu’il est exécuté, il copie tous les parameters qui ont été ajoutés au fichier .gitconfig de l’utilisateur dans le fichier global, puis remplace tout le texte du fichier .gitconfig par un en-tête [include] qui importe le fichier global.

Je garde le fichier global .gitconfig dans un repo avec beaucoup d’autres scripts et outils globaux. Tout ce que j’ai à faire est de mémoriser les modifications apscopes par le script à mon fichier global.

Cela semble fonctionner de manière assez transparente pour moi. J’espère que cela aide!

9 septembre: mise à jour pour détecter quand de nouvelles entrées ajoutées au fichier de configuration sont des doublons et les ignorer. Ceci est utile pour les outils comme SourceTree qui écriront de nouvelles mises à jour s’ils ne peuvent pas trouver celles qui existent et ne suivent pas les inclusions.

 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(@("["), [SsortingngSplitOptions]::RemoveEmptyEnsortinges) | where { ![Ssortingng]::IsNullOrWhiteSpace($_) } | %{ "[$_".TrimEnd() } $globalLines = (get-content $globalPath) -join "`n" $globalSettings = $globalLines.Split(@("["), [SsortingngSplitOptions]::RemoveEmptyEnsortinges)| where { ![Ssortingng]::IsNullOrWhiteSpace($_) } | %{ "[$_".TrimEnd() } $appendSettings = ($newSettings | %{ $_.Trim() } | where { !($globalSettings -contains $_.Trim()) }) if ([ssortingng]::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 } 

Vérifiez d’abord le réglage HOME, puis changez HOME et HOMEDRIVE en un répertoire existant.

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

puis changez HOME et HOMEDRIVE par

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

En tant que quelqu’un qui s’intéresse à cela depuis très longtemps. Voir dans le manuel:

$ XDG_CONFIG_HOME / git / config – Deuxième fichier de configuration spécifique à l’utilisateur. Si $XDG_CONFIG_HOME n’est pas défini ou vide, $ HOME / .config / git / config sera utilisé. Toute variable à valeur unique définie dans ce fichier sera écrasée par tout ce qui se trouve dans ~ / .gitconfig. C’est une bonne idée de ne pas créer ce fichier si vous utilisez parfois des versions plus anciennes de Git, car la prise en charge de ce fichier a été ajoutée assez récemment.

Ce qui n’a été que récemment ajouté. Ce vidage provient de 2.15.0.

Travaille pour moi.