2009-06-30 6 views
2

Je devais utiliser dans mon ancien Git des paramètres similaires à ceux qui suivent pour pouvoir utiliser difftool. Les paramètres ne sont pas exactement les mêmes, puisque j'ai accidentellement enlevé mon ancien .gitconfig.Impossible de comprendre comment sont configurées les config difftool de Git

[merge] 
    tool=opendiff 

[mergetool] 
    tool=opendiff 

[difftool] 
    difftool=opendiff 

J'ai un .gitconfig vide à la maison. Je peux toujours utiliser l'outil opendiff. Ceci est une surprise, car cela devrait être impossible.

Comment les paramètres difftool de Git fonctionnent-ils en interne?

+0

Juste mis à jour ma réponse sur les fichiers de configuration git choisis lors de la mise à jour des paramètres git. – VonC

+0

Juste mis à jour ma réponse avec la valeur du préfixe pour Mac OsX – VonC

+0

J'ai mon git externe outil de configuration de diff documenté dans: http://stackoverflow.com/questions/267761/what-does-your-gitconfig-contain/596821#596821 Cela peut être utile. Faites-moi savoir si vous aimeriez aussi que le script que cette réponse contient comme un exercice pour le lecteur. Je l'ai fait parce que c'est assez spécifique à Araxis Merge. – Mark

Répondre

5

Vous pouvez voir un complete setup using mergetool and difftool here.

Si le paramètre semble toujours être actif, il peut être parce qu'il a été défini globalement ou dans votre compte, car il y a trois fichiers où-config git rechercher des options de configuration:

$GIT_DIR/config 

Repository fichier de configuration spécifique. (Le nom de fichier est bien sûr par rapport à la racine du référentiel, pas le répertoire de travail.)

~/.gitconfig 

fichier de configuration spécifique à l'utilisateur. Aussi appelé fichier de configuration "global" à l'emplacement d'installation de votre Git:

$(prefix)/etc/gitconfig 

Fichier de configuration à l'échelle du système.


Git enregistre les informations utilisateur chaque fois que vous le dites sauver lorsque vous tapez 'git config':

De git config manual page:

Le fichier option peut être l'un des --system, --global ou --file qui spécifient d'où les valeurs seront lues ou écrites.
La valeur par défaut est de supposer le fichier de configuration du référentiel actuel, .git/config sauf si défini autrement avec GIT_DIR et GIT_CONFIG.

Vous pouvez remplacer ces règles par des options de ligne de commande ou par des variables d'environnement. Les options --global et --system limitent respectivement le fichier utilisé pour le fichier global ou le fichier système.
La variable d'environnement GIT_CONFIG a un effet similaire, mais vous pouvez spécifier n'importe quel nom de fichier.

Peut-être avez-vous cette variable d'environnement définie dans votre installation précédente? Prenez la configuration du fichier donné au lieu de .git/config. L'utilisation de l'option "--global" force cela à ~/.gitconfig. L'utilisation de l'option "--system" force cela à $(prefix)/etc/gitconfig.

Note: pour Mac OS X, $(prefix) devrait être /usr/local (si vous avez installé Git comme described here)

make prefix=/usr/local all 
sudo make prefix=/usr/local install 
which git 
+0

@VonC: Comment pouvez-vous modifier le paramètre dans lequel Git enregistre les informations utilisateur? --- Mon vieux Git a tout sauvegardé dans .gitconfig. Mon Git actuel enregistre tout dans $ GIT_DIR/config. –

+0

@VonC: Où se trouve le dossier $ (préfixe)/etc/gitconfig? Je ne l'ai pas trouvé dans mon OS/X. –

+1

@Masi, oh, que le répertoire * Unix * par défaut, mais je vais vérifier où cela traduit pour un Mac – VonC

3

Vous avez également (en plus de se souvenir de beaucoup de lieux Git recherches pour la configuration, comme indiqué dans response by VonC) pour se rappeler que les deux git-difftool et git-mergetool fournissent une autodétection/autodiscovery (dans un ordre fixe de préférence) des outils dont vous disposez.

Cette pourrait être pourquoi "git difftool" appelle opendiff sur votre ordinateur.

+0

+1. J'ai essayé de vérifier dans le script 'git-merge-tool' où ce paramètre de détection automatique par défaut pourrait avoir lieu, mais je n'ai rien trouvé à première vue. Savez-vous si l'auto-détection est scriptée, ou est dans un exécutable git? – VonC

+0

@VonC: Bonne question! –

+0

La question de VonC est maintenant à http://stackoverflow.com/questions/1064103/is-gits-auto-detection-scripted-or-is-it-within-some-git-executable –

Questions connexes