"Je ne veux pas y inclure les détails du github, d'où la raison pour laquelle je voudrais les inclure à partir d'un fichier externe": c'est précisément à cela que sert le fichier de configuration global. Y a-t-il une raison de ne pas l'utiliser dans votre cas?
VonC
11
Oui, car je veux publier le .gitconfig dans un référentiel git et je ne veux pas que quelqu'un vole mes informations d'identification github.
David Reynolds
Je ne vous suis pas: votre fichier gitconfig habituel sera publié sur github, mais sans aucun paramètre github. Pourquoi? Parce que ceux-ci seraient dans votre fichier de configuration global ( ~/.gitconfig), c'est-à-dire non poussés vers votre dépôt github. Lorsque vous tapez ' git config', vous voyez la concaténation du fichier de configuration 3 (repo, global et system). Seul le fichier de configuration de repo est poussé. Les 2 autres restent locaux.
VonC
90
il semble que tout le monde a raté le point de cette question. David veut évidemment pousser vers le haut un dépôt de tous ses fichiers dot (bashrc, gemrc, etc.) INCLUANT son .gitconfig afin qu'il puisse avoir tous ses paramètres sur toutes ses machines. Une façon de pousser des parties d'un fichier .gitconfig en incluant et en ignorant les entrées privées est ce qu'il (et moi, d'ailleurs) est après
Bo Jeanes
5
@bjeanes: précisément! Je n'ai toujours pas trouvé de moyen de le faire.
David Reynolds
Réponses:
302
Git (1.7.10+) prend désormais en charge cette syntaxe dans .gitconfig:
[include]
path = /path/to/file
Voir ici pour une description détaillée du changement de git et de ses cas de bord.
Soit dit en passant, quelques subtilités méritent d'être soulignées:
L'extension à variable d'environnement, par exemple $HOME, n'est pas prise en charge. (Expansion de ~apparu dans Git 1.7.10.2.)
Si un chemin relatif est spécifié, il est relatif au fichier .gitconfig qui contient l' [include]instruction. Cela fonctionne correctement même entre les chaînes chaînées - par exemple, ~/.gitconfigpeut avoir:
[include]
path = subdir/gitconfig
et subdir/gitconfigpeut avoir:
[include]
path = nested_subdir/gitconfig
... ce qui entraînera subdir/nested_subdir/gitconfigle chargement.
Si git ne trouve pas le fichier cible, il ignore silencieusement l'erreur. Cela semble être par conception.
en fait, vous n'avez pas besoin ~. c'est parce que votre fichier .gitconfig doit encore résider dans ~/.gitconfigun chemin relatif dans la configuration impliquerait ~...
robustus
2
L' extension ~/ $HOMEest en fait à partir de git describe --contains 4c0a89fc-> v1.7.10.2~12^2(c'est-à v1.7.10.2- dire ou plus tard), notable car il semble que Debian 7 et Ubuntu Quantal sortiront avec v1.7.10.4.
FauxFaux
1
Est-ce que cela prend en charge les globes? par exemple path = ~ / gitconfig.d / *?
Bret
1
@Bret non, cela ne prend pas en charge les globes.
Mike Morearty
8
Notez que les configurations incluses de cette façon ne sera pas affiché lorsqu'un fichier spécifique est donnée (qui est, avec --global, --localou --file), à moins que dit explicitement --includes(comme git config --global --includes --list).
Vous pouvez inclure un fichier de configuration d'un autre en définissant la include.pathvariable spéciale sur le nom du fichier à inclure.
Le fichier inclus est immédiatement développé, comme si son contenu avait été trouvé à l'emplacement de la directive include.
Si la valeur de la include.pathvariable est un chemin relatif, le chemin est considéré comme relatif au fichier de configuration dans lequel la directive include a été trouvée.
La valeur de include.pathest soumise à l'expansion du tilde: ~/est étendue à la valeur de $HOMEet ~user/au répertoire de base de l'utilisateur spécifié.
Fichier de configuration spécifique à l'utilisateur. Aussi appelé fichier de configuration "global".
De cette façon, il complète le fichier spécifique au projet .gitconfig, sans être publié lorsqu'il est poussé vers GitHub. Voir également cette réponse SO pour plus d'informations sur le fichier de configuration global.
Git a 3 fichiers de configuration .
il semble que tout le monde a raté le point de cette question.
David veut évidemment pousser un repo de tous ses fichiers de points ( bashrc, gemrc, etc.) dont son .gitconfigafin qu'il puisse avoir tous ses paramètres sur toutes ses machines.
Un moyen de pousser des parties d'un .gitconfigfichier en incluant et en ignorant les entrées privées est ce qu'il (et moi, d'ailleurs) est après.
Un moyen possible serait d'utiliser un pilote de filtre de nettoyage / nettoyage pour décrypter / crypter un fichier avec des informations sensibles privées (voir ce fil ), afin de compléter un fichier local comme ~ / .gitconfig avec les parties décryptées qui sont pertinentes pour cela fichier.
De cette façon, vous pouvez avoir un dépôt Git avec tous vos fichiers dot, plus un fichier avec des informations cryptées destinées à être décryptées et ajoutées auxdits fichiers dot.
(une solution basée sur GPG signifie, bien sûr, que vous avez communiqué vos clés privées / publiques par un autre moyen sur l'ordinateur de destination où vous souhaitez restaurer tous vos fichiers dot en clonant ce dépôt spécial)
En fait, dans votre cas, le script de maculage doit être terminé car il doit, après avoir déchiffré ce fichier, continuer et ajouter des parties pertinentes à votre ~/.gitconfigfichier global (sauf si vous écrasez le fichier de configuration global avec un autre emplacement ) ou d'autres fichiers dot pour cela matière.
Je veux publier mon fichier .gitconfig de base dans un référentiel git, mais je ne veux pas y inclure les détails de github, d'où la raison pour laquelle je voudrais les inclure à partir d'un fichier externe.
David Reynolds
10
Vous pouvez le charger depuis la ligne de commande:
Je pense que vous pouvez accomplir cela en utilisant l'outil hub de defunkt . Ceci est une enveloppe pour la commande git qui , entre autres choses, vous permet d'avoir GITHUB_USERet GITHUB_TOKENvariables d'environnement. Qui remplacera les paramètres dans le local.gitconfig fichier .
Ensuite, pour rendre transparente l'utilisateur que vous avez souligné alias git=hubdans sa configuration ZSH . Vous devriez pouvoir ensuite source un fichier local où vous définissez vos variables d'environnement et pousser votre référentiel vers le monde public avec toutes vos informations privées en contact.
** REMARQUE pour les utilisateurs homebrew sur OSX, vous pouvez installer l'outil via brew install hub.
~/.gitconfig
), c'est-à-dire non poussés vers votre dépôt github. Lorsque vous tapez 'git config
', vous voyez la concaténation du fichier de configuration 3 (repo, global et system). Seul le fichier de configuration de repo est poussé. Les 2 autres restent locaux.Réponses:
Git (1.7.10+) prend désormais en charge cette syntaxe dans
.gitconfig
:Voir ici pour une description détaillée du changement de git et de ses cas de bord.
Soit dit en passant, quelques subtilités méritent d'être soulignées:
L'extension à variable d'environnement, par exemple
$HOME
, n'est pas prise en charge. (Expansion de~
apparu dans Git 1.7.10.2.)Si un chemin relatif est spécifié, il est relatif au fichier .gitconfig qui contient l'
[include]
instruction. Cela fonctionne correctement même entre les chaînes chaînées - par exemple,~/.gitconfig
peut avoir:et
subdir/gitconfig
peut avoir:... ce qui entraînera
subdir/nested_subdir/gitconfig
le chargement.Si git ne trouve pas le fichier cible, il ignore silencieusement l'erreur. Cela semble être par conception.
la source
~
. c'est parce que votre fichier .gitconfig doit encore résider dans~/.gitconfig
un chemin relatif dans la configuration impliquerait~
...~
/$HOME
est en fait à partir degit describe --contains 4c0a89fc
->v1.7.10.2~12^2
(c'est-àv1.7.10.2
- dire ou plus tard), notable car il semble que Debian 7 et Ubuntu Quantal sortiront avecv1.7.10.4
.--global
,--local
ou--file
), à moins que dit explicitement--includes
(commegit config --global --includes --list
).Mise à jour 2012:
Voir Mike Morearty de » réponse :
Comprend
Je ne pense pas.
Je préfère mettre ce paramètre dans le
~/.gitconfig
fichierDe cette façon, il complète le fichier spécifique au projet .gitconfig, sans être publié lorsqu'il est poussé vers GitHub. Voir également cette réponse SO pour plus d'informations sur le fichier de configuration global.
Git a 3 fichiers de configuration .
bjeanes ajoute dans les commentaires:
Un moyen possible serait d'utiliser un pilote de filtre de nettoyage / nettoyage pour décrypter / crypter un fichier avec des informations sensibles privées (voir ce fil ), afin de compléter un fichier local comme ~ / .gitconfig avec les parties décryptées qui sont pertinentes pour cela fichier.
De cette façon, vous pouvez avoir un dépôt Git avec tous vos fichiers dot, plus un fichier avec des informations cryptées destinées à être décryptées et ajoutées auxdits fichiers dot.
En
.gitattributes
(ou.git/info/a..
) utilisation:Dans votre fichier repo .config:
(une solution basée sur GPG signifie, bien sûr, que vous avez communiqué vos clés privées / publiques par un autre moyen sur l'ordinateur de destination où vous souhaitez restaurer tous vos fichiers dot en clonant ce dépôt spécial)
En fait, dans votre cas, le script de maculage doit être terminé car il doit, après avoir déchiffré ce fichier, continuer et ajouter des parties pertinentes à votre
~/.gitconfig
fichier global (sauf si vous écrasez le fichier de configuration global avec un autre emplacement ) ou d'autres fichiers dot pour cela matière.https://kerneltrap.org/mailarchive/git/2008/3/13/1153274/thread (les inconvénients gpg sont discutés plus loin dans ce fil ) (cela est différent que d'avoir un dépôt Git crypté complet, comme discuté ici )
la source
Vous pouvez le charger depuis la ligne de commande:
Utilisez à la
"$PWD"/.gitconfig
place, si vous souhaitez charger le fichier à partir du répertoire en cours.Après avoir exécuté la commande ci-dessus, les lignes suivantes sont ajoutées dans votre
.git/config
fichier:la source
Je pense que vous pouvez accomplir cela en utilisant l'outil hub de defunkt . Ceci est une enveloppe pour la commande git qui , entre autres choses, vous permet d'avoir
GITHUB_USER
etGITHUB_TOKEN
variables d'environnement. Qui remplacera les paramètres dans le local.gitconfig
fichier .Ensuite, pour rendre transparente l'utilisateur que vous avez souligné
alias git=hub
dans sa configuration ZSH . Vous devriez pouvoir ensuite source un fichier local où vous définissez vos variables d'environnement et pousser votre référentiel vers le monde public avec toutes vos informations privées en contact.** REMARQUE pour les utilisateurs homebrew sur OSX, vous pouvez installer l'outil via
brew install hub
.la source