Modification de l'emplacement .gitconfig sous Windows

105

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

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

Cela peut-il être fait du tout?

Tour
la source
Je voulais juste ajouter que je rencontre cela aussi. J'ai tous mes autres trucs de configuration globale git ("exludesfiles" et "attrirutesfile") dans% userprofile% /. Git / .gitignore (donc dans un dossier), mais le .gitconfig j'aimerais qu'il soit placé juste à côté d'eux , mais doit être à la racine de% userprofile% .. juste vraiment ennuyeux.
WORMSS
6
Des progrès depuis que la question a été posée? Mon .gitconfig se trouve par défaut sur un lecteur réseau, ce qui signifie qu'il ne peut pas le lire lorsque je suis hors ligne.
Lech Rzedzicki

Réponses:

67

Si vous définissez HOMEsur c:\my_configuration_files\, git y localisera .gitconfig. La modification des variables d'environnement est décrite ici . Vous devez définir la variable HOME, puis rouvrir n'importe quelle fenêtre cmd.exe. Utilisez la commande "set" pour vérifier que HOME pointe bien vers la bonne valeur.

Le changement de HOME affectera bien sûr également d'autres applications. Cependant, à la lecture du code source de git, cela semble être le seul moyen de changer l'emplacement de ces fichiers sans avoir besoin d'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 que vous désirez, vous devez passer le --globaldrapeau à tous les appels git (plus tous les fichiers .git / config locaux sont ignorés).

Martin c.Löwis
la source
2
Hmm, je ne sais pas si j'ai bien compris mais le changement de HOME n'aura-t-il pas une influence sur toutes les autres applications qui l'utilisent? N'y a-t-il pas un moyen de changer HOME, mais local en Git?
Tour du
Oui, cela aurait également un effet sur d'autres applications. Vous avez demandé comment changer d'emplacement, et je vous l'ai dit. Voir ma modification.
Martin v.Löwis
10
Quelqu'un a-t-il vraiment réussi à faire fonctionner cela sans que les effets secondaires du déménagement à la MAISON ne gâchent tout un tas d'autres choses?
Ade Miller
Il s'agit probablement d'une solution qui fonctionne sur la plate-forme Windows. Cela a fonctionné aussi pour moi. J'ai utilisé le script refreshenv de Chocolatey pour actualiser la variable d'environnement HOME que j'ai définie (variable d'environnement utilisateur). Après cela, j'ai obtenu l'emplacement de fichier souhaité.
Tore Aurstad
J'ai dû réinstaller Git pour que cela fonctionne. Si je viens d'ajouter une nouvelle variable d'environnement nommée HOME et que je déplace le .gitconfigfichier dans ce répertoire, cela ne fonctionne pas.
Csa77
46

Changer le répertoire HOME car c'est faux. Mieux vaut créer un lien symbolique pour gitconfig vers le répertoire HOME.

  1. Déplacez votre .gitconfig du répertoire de base de l'utilisateur vers le répertoire où vous le souhaitez.
  2. Exécutez la ligne de commande en tant qu'administrateur
  3. Accédez à votre répertoire de base utilisateur
  4. Entrez mklink .gitconfig \ PathForNewLocationOfConfig.gitconfig
MicTech
la source
9
Cela peut valoir la peine d'ajouter que si vous exécutez git config --global pour ajouter un élément à votre configuration, votre lien symbolique sera écrasé par la copie réelle du .gitconfig qui est utilisé. J'ai rencontré ce problème lors du test d'un emplacement où \ PathForNewLocationOfConfig.gitconfig était mon dossier Dropbox
MotoWilliams
8
Si votre .gitconfig se trouve sur un lecteur réseau, vous pouvez recevoir un message «Le périphérique ne prend pas en charge les liens symboliques» qui exclut cette option.
midi et
4
Je ne pense pas que cette solution fonctionnera pour personne. Dans notre entreprise, se $HOMEtrouve sur un lecteur réseau et chaque fois qu'il y a un problème avec la connexion réseau, le lien est également inaccessible.
andreee
1
@MotoWilliams revisite cela en 2017: le lien symbolique reste intact après l'édition avec --global
Snake
2
Ici, la police de groupe (AD) définit HOMEDRIVE, HOMEPATH et HOMESHARE, mais pas simple, old, simple HOME. En l'absence de HOME, git semble utiliser une combinaison des trois précédents. Mais définir HOME (via la méthodologie habituelle pour définir des variables d'environnement spécifiques à l'utilisateur) fonctionne: GIT utilise la valeur HOME que vous avez définie, et grouppolicy ne supprime pas HOME.
David I. McIntosh
29

J'ai résolu ce problème en utilisant une approche légèrement différente que j'ai vue fonctionner pour d'autres fichiers de configuration. Git Config supports comprend que vous permet de pointer vers un fichier de configuration dans un autre emplacement. Cet autre emplacement est ensuite importé et développé sur place 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

Les mises à jour écrites par Git dans le fichier .gitconfig n'écraseront pas mon chemin d'inclusion. Cela signifie que parfois je peux avoir besoin de déplacer des valeurs de .gitconfig vers my.config.

Joe Brinkman
la source
+1: pas de configurations étranges et mon gitconfig global est quelque chose que je stocke dans un dépôt git lui-même, donc garder une trace de ce qu'il y a dedans est mon travail. Lors de modifications globales, je modifie simplement le fichier global à la main. Donc, cela fonctionne parfaitement pour moi, et ne nécessite aucune bizarrerie comme changer votre variable d'environnement "HOME", ce qui est une idée étrange juste pour obtenir la configuration de Git où vous le souhaitez. Le répertoire personnel a après tout d'autres significations pour de nombreux autres programmes. Vous pouvez également mettre une identité différente en haut et conserver les mêmes paramètres clés dans toutes les identités avec cette solution. Excellent!
user62177541
2
Je me demande s'il est possible de faire écrire à git config dans le fichier du fichier [include] d à la place.
Jonathan Nazario
1
@JonathanNazariogit config --file "included.file"
Pero P.
12

Regardez dans la section FICHIERS et ENVIRONNEMENT de git help config.

Stefan Näwe
la source
11

Je ne suis pas un maître Git, mais après avoir cherché la solution qui fonctionnait le plus facilement pour moi, il suffisait d'aller dans un éditeur de texte C:\Program Files (x86)\Git\etcet de l'ouvrir profile.

Il y a une ifdéclaration à la ligne 37 # Set up USER's home directory. J'ai sorti la ifdéclaration et mis dans le répertoire local que je voulais que gitconfig soit, puis j'ai juste copié mon fichier gitconfig existant (se trouvait sur un lecteur réseau) à cet emplacement.

scottsandersdev
la source
Merci beaucoup. Bien que toutes les autres options aient échoué pour moi, cela m'a fait gagner un million de déclarations git multipliées par 6 secondes: D voici ce que j'ai fait ... `HOME =" $ USERPROFILE \ Downloads \ Tools \ Git_Config "`
PravyNandas
2
Le mot 'home' (ou tout ce qui vous ressemble line: 37) n'existe plus dans git 2.24 (décembre 2019).
Frank Nocke
6

Pour moi, changer l'emplacement de départ (de git-gui au moins) n'affectait pas où il cherchait .gitconfig. Ma configuration au travail monte U: pour notre maison, mais nous n'avons pas la permission d'écrire dans U: directement, seulement les sous-répertoires qui ont été créés pour nous à l'intérieur, donc c'était un facteur décisif pour moi.

J'ai résolu le problème en créant un script batch qui remplacerait les variables d'environnement HOMEDRIVE et HOMEPATH uniquement pour cette application. Ensuite, j'ai changé mon raccourci du menu Démarrer pour qu'il pointe plutôt vers ce script de commandes.

Brian Blackburn
la source
1
J'aimerais plus d'informations sur ce que vous avez fait pour accomplir cette correction.
Matt Casto
Pouvez-vous partager votre solution?
Sal le
4

Vérifiez d'abord le paramètre 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 en

set HOME=c:\tmp
set HOMEDRIVE=C:
Aliti
la source
3

Si vous êtes sous Windows et que vous rencontrez des problèmes pour changer les variables d'environnement ou en mklinkraison de privilèges insuffisants, une solution simple à votre problème est de démarrer git batch dans un autre emplacement.

Faites un clic droit sur Git Bash.exe, cliquez sur Propriétés et modifiez la propriété "Démarrer dans" en c:\my_configuration_files\.

FatAlbert
la source
Wow, cela fonctionne totalement avec facilité. Créé un nouveau raccourci et sous 'propriétés-> démarrer dans' changé %HOMEDRIVE%%HOMEPATH%en `c: \ my_repo_folder`. A travaillé un charme.
Shane
2
Cela n'a pas fonctionné pour moi. Le fichier .gitconfig était toujours chargé à partir de mon répertoire personnel
Dave B
3

Je voulais faire la même chose. Le mieux que j'ai pu trouver était la solution de @ MicTech. Cependant, comme l'a souligné @MotoWilliams, cela ne survit pas aux mises à jour effectuées par Git sur le fichier .gitconfig qui remplace le lien par un nouveau fichier contenant uniquement les nouveaux paramètres.

J'ai résolu ce problème en écrivant le script PowerShell suivant et en l'exécutant dans mon script de démarrage de profil. Chaque fois qu'il est exécuté, il copie tous les paramètres 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 référentiel avec de nombreux autres scripts et outils globaux. Tout ce que j'ai à faire est de ne pas oublier de vérifier toutes les modifications que le script ajoute à mon fichier global.

Cela semble fonctionner de manière assez transparente pour moi. J'espère que ça aide!

9 septembre: mise à jour pour détecter quand les nouvelles entrées ajoutées au fichier de configuration sont des doublons et les ignorer. Ceci est utile pour des outils comme SourceTree qui écriront de nouvelles mises à jour s'ils ne peuvent pas trouver les existantes 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(@("["), [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
}
Ade Miller
la source
2

Comme 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. S'il $XDG_CONFIG_HOMEn'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 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é ajouté que récemment. Ce vidage est de la version 2.15.0.

Travaille pour moi.

hein
la source
Il s'agit de la solution la plus simple, la moins intrusive et la plus fiable de Windows.
kwill
2
  1. Passer au dossier %PROGRAMFILES%\Git\etc
  2. Modifier le fichier profile
  3. Ajouter à la première ligne HOME="c:\location_were_you_want_gitconfig"
  4. Terminé

Remarque: les autorisations de fichier sont généralement limitées, alors modifiez-les en conséquence, sinon vous ne pourrez pas enregistrer vos modifications.

cuasijoe
la source
Cela ne fonctionne pas depuis git 2.24, Win10, décembre 2019. git config --list --show-originmontre que le HOME d'origine est toujours en place.
Frank Nocke
1

Pour moi, cela a fonctionné très simplement:

  1. Copiez ".gitconfig" de l'ancien répertoire: vers% USERPROFILE% (standard dans "c: \ users \ username")
  2. Faites un clic droit sur les icônes de démarrage de GITGUI et GITBASH et remplacez "run in": "% HOMEDRIVE %% HOMEPATH%" par "% USERPROFILE%". Bien entendu, vous pouvez utiliser n'importe quel autre répertoire au lieu de "% USERPROFILE%".

capture d'écran avant

capture d'écran après

Ralph Schwerdt
la source
0

Solution sans avoir à changer le
système d'exploitation variable de Windows HOME : Windows 10
version git: 2.27.0.windows.1

J'utilise la version portable de Git, donc tous mes fichiers de configuration sont sur ma clé USB (E :). C'est ce qui a fonctionné pour moi:

  1. Téléchargez Git portable depuis https://git-scm.com/ . Exécutez le fichier et installez-le à l'emplacement requis. Je l'ai installé dans E: \ git .
  2. Exécutez git-bash.exe à partir de E: \ git .
  3. Je voulais mettre .gitconfiget d'autres fichiers bash dans E , alors j'ai créé un dossier appelé home où je les veux tous.
    mkdir home
  4. Allez dans le dossier etc et ouvrez le fichier appelé profile (dans mon cas, c'est E: \ git \ etc \ profile)
  5. Ajouter un chemin absolu à la maison répertoire que nous avons créé (ou dans le répertoire où vous voulez avoir votre fichier .gitconfig situé) à la fin du profil fichier.
    HOME="E:\git\home"

Maintenant, il ne recherche plus dans le répertoire C: \ Users <username> pour .gitconfig mais ne recherche que dans votre chemin défini ci-dessus.

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

Il a donné une erreur car il n'y a pas encore de fichier .gitconfig. Ceci est juste pour démontrer que nous avons réussi à changer l'emplacement du fichier .gitconfig sans changer le répertoire HOME dans Windows.

Allika
la source