118 votes

Changer l'emplacement du fichier .gitconfig sous Windows

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

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

Est-il possible de le faire ?

0 votes

Je voulais juste ajouter que je rencontre aussi ce problème. J'ai tous mes autres éléments de configuration globale de git ("exludesfiles" et "attrirutesfile") dans %userprofile%/.git/.gitignore (donc dans un dossier), mais le .gitconfig, j'aimerais qu'il soit juste à côté, mais il doit être à la racine de %userprofile% c'est vraiment ennuyeux.

7 votes

Des progrès depuis que la question a été posée ? Mon fichier .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.

0 votes

La véritable question qui se pose est la suivante : pourquoi voulez-vous faire cela ?

81voto

Martin v. Löwis Points 61768

Si vous définissez HOME a c:\my_configuration_files\ alors git localisera .gitconfig à cet endroit. L'édition des variables d'environnement est décrite aquí . Vous devez définir la variable HOME, puis rouvrir une fenêtre cmd.exe. Utilisez la commande "set" pour vérifier que HOME pointe bien sur la bonne valeur.

La modification de HOME aura, bien entendu, une incidence sur d'autres applications. Cependant, d'après la lecture du code source de git, il semble que ce soit le seul moyen de modifier 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 la variable --global à toutes les invocations de git (et les fichiers .git/config locaux sont ignorés).

2 votes

Hmm, je ne suis pas sûr d'avoir bien compris mais le fait de changer 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 modifier HOME, mais localement dans Git ?

0 votes

Oui, cela aurait un effet sur d'autres applications également. Vous avez demandé comment changer l'emplacement, et je vous l'ai dit. Voir mon édition.

12 votes

Est-ce que quelqu'un a réussi à faire fonctionner ce système sans que les effets secondaires du déménagement de HOME ne viennent perturber tout un tas d'autres choses ?

51voto

MicTech Points 6080

Changer de répertoire HOME pour cela est une erreur. Le mieux est de créer un lien symbolique pour gitconfig vers le répertoire HOME.

  1. Déplacez votre .gitconfig depuis le répertoire personnel de l'utilisateur, vers le répertoire où vous voulez.
  2. Exécuter la ligne de commande en tant qu'administrateur
  3. Allez dans le répertoire personnel de votre utilisateur
  4. Entrez mklink .gitconfig \PathForNewLocationOfConfig.gitconfig

11 votes

Il peut être utile 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 actuelle du .gitconfig utilisé. J'ai rencontré ce problème lorsque j'ai testé un emplacement dans lequel \PathForNewLocationOfConfig.gitconfig était mon dossier Dropbox

0 votes

@MotoWilliams très ennuyeux en effet. Existe-t-il des solutions de contournement, je me le demande ? A part passer à Linux :)

9 votes

Si votre fichier .gitconfig se trouve sur un lecteur réseau, vous risquez d'obtenir un message "Le périphérique ne prend pas en charge les liens symboliques", ce qui exclut cette option.

12voto

Stefan Näwe Points 1728

Regardez dans le FICHES y ENVIRONNEMENT section de git help config .

3voto

FatAlbert Points 1601

Si vous êtes sous Windows et que vous avez du mal à modifier les variables d'environnement ou à mklink en raison de privilèges insuffisants, une solution simple à votre problème est de lancer git batch à un autre endroit.

Il suffit de faire un clic droit sur Git Bash.exe, de cliquer sur Propriétés et de changer la propriété "Démarrer dans" en c:\my_configuration_files\ .

0 votes

Wow, cela fonctionne totalement avec facilité. J'ai créé un nouveau raccourci et sous 'propriétés->début dans' j'ai modifié %HOMEDRIVE%%HOMEPATH% à `c : \my_repo_folder `. Ça a marché comme sur des roulettes.

3 votes

Cela n'a pas fonctionné pour moi. Le fichier .gitconfig était toujours chargé depuis mon répertoire personnel.

3voto

Ade Miller Points 7750

Je voulais faire la même chose. La meilleure solution que j'ai trouvée est celle de @MicTech. Cependant, comme l'a souligné @MotoWilliams, cette solution ne survit pas aux mises à jour du fichier .gitconfig effectuées par Git, 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 le démarrage de mon profil script. À chaque exécution, il copie tous les paramètres qui ont été ajoutés au fichier .gitconfig de l'utilisateur vers le fichier global, puis remplace tout le texte du fichier .gitconfig par un en-tête [include] qui importe le fichier global.

Je conserve le fichier global .gitconfig dans un repo avec beaucoup d'autres scripts et outils globaux. Tout ce que j'ai à faire, c'est de me rappeler de vérifier les changements que le scripts ajoute à mon fichier global.

Cela semble fonctionner de manière assez transparente pour moi. J'espère que cela vous aidera !

9 septembre : Mis à 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 écrivent de nouvelles mises à jour s'ils ne trouvent pas celles qui existent et ne suivent pas les includes.

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
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X