Dans mon ~/.gitconfig
, je liste mon adresse e-mail personnelle sous [user]
, car c'est ce que je veux utiliser pour les dépôts Github.
Mais, j'ai récemment commencé à utiliser git pour le travail aussi. Le dépôt git de mon entreprise me permet de m'engager, mais lorsqu'il envoie des annonces de nouveaux changesets, il dit qu'ils viennent d'Anonymous car il ne reconnaît pas l'adresse e-mail dans ma .gitconfig
- du moins, c'est ma théorie.
Est-il possible de spécifier plusieurs [user]
définitions dans .gitconfig
? Ou existe-t-il un autre moyen de remplacer la valeur .gitconfig
par défaut pour un certain répertoire? Dans mon cas, je vérifie tout le code de travail ~/worksrc/
- existe-t-il un moyen de spécifier un .gitconfig
pour uniquement ce répertoire (et ses sous-répertoires)?
la source
Réponses:
Vous pouvez configurer un référentiel individuel pour utiliser un utilisateur / une adresse e-mail spécifique qui remplace la configuration globale. Depuis la racine du référentiel, exécutez
tandis que l'utilisateur / email par défaut est configuré dans votre ~ / .gitconfig
la source
.git/config
fichiergit config --edit
etgit config --global --edit
. Et au cas où vous auriez manqué le commentaire d'Abizern , le fichier de configuration d'un référentiel est à<repo-root>/.git/config
.Git 2.13
sortie aujourd'hui.Depuis git 2.13 , il est possible de résoudre ce problème en utilisant les inclusions conditionnelles nouvellement introduites .
Un exemple:
Configuration globale ~ / .gitconfig
Configuration spécifique au travail ~ / work / .gitconfig
la source
git config --list
dans différents répertoires. Dans les sous-répertoires~/work/
qui contiennent un référentiel git, leincludeIf
prend effet. Notez que dans les sous-répertoires~/work/
qui ne contiennent pas de référentiel git, leincludeIf
n'est pas exécuté.Ou vous pouvez ajouter les informations suivantes dans votre
.git/config
fichier localla source
Commutateur de comptes github à une commande
Cette solution prend la forme d'un seul alias git. Une fois exécuté, l'utilisateur actuel du projet sera rattaché à un autre compte
Générer des clés ssh
Liez-les à vos comptes GitHub / Bitbucket
pbcopy < ~/.ssh/id_rsa.pub
add SSH key
page githubpbcopy < ~/.ssh/id_rsa_pro.pub
Étape 1. Commutation automatique des touches ssh.
Nous pouvons configurer
ssh
pour envoyer une utilisation une clé de cryptage spécifique en fonction de lahost
. La bonne chose est que vous pouvez avoir plusieurs alias pour le mêmehostname
.Voir cet exemple de
~/.ssh/config
fichier:configuration à distance git
Vous pouvez maintenant utiliser ces alias dans les télécommandes git en changeant
[email protected]
pargit@github_pro
.Vous pouvez soit modifier vos télécommandes de projets existants (en utilisant quelque chose comme
git remote set-url origin git@github_pro:foo/bar.git
), soit les adapter directement lors du clonage.en utilisant un alias, il devient:
git clone git@github_pro:ArnaudRinquin/atom-zentabs.git
Étape 2. Changer git user.email
Les paramètres de configuration de Git peuvent être globaux ou par projet. Dans notre cas, nous voulons un paramètre par projet. Il est très facile de le changer:
Bien que cela soit facile, cela prend beaucoup de temps aux développeurs que nous sommes. Nous pouvons écrire un alias git très simple pour cela.
Nous allons l'ajouter au
~/.gitconfig
fichier.Ensuite, tout ce que nous avons à faire est
git setpromail
de faire changer notre email pour ce projet uniquement.Étape 3. Un commutateur de commande s'il vous plaît?!
Ne serait-il pas agréable de passer d'un compte par défaut à un compte spécifié avec une seule commande sans paramètre? C'est certainement possible. Cette commande comportera deux étapes:
Nous avons déjà une solution à commande unique pour la deuxième étape, mais la première est beaucoup plus difficile. Changement d'hôte distant à une commande
Voici la solution sous la forme d'une autre commande d'alias git à ajouter à votre
~/.gitconfig
:Cela permet de changer toutes les télécommandes d'un hôte à un autre (l'alias). Voir l'exemple:
Combinez-les tous
Il ne nous reste plus qu'à combiner les deux commandes en une seule, c'est assez simple. Découvrez comment j'intègre également la commutation d'hôte bitbucket.
Lien source - Tutoriel
la source
setpromail
alias fait donc à laconfig --global
place (et j'ai d'autres alias définis pour définir différentes adresses e-mail). Ça marche!useConfigOnly = true
l'autre réponse.Après m'être inspiré du billet de blog d' Orr Sella, j'ai écrit un crochet de pré-validation (résidant en
~/.git/templates/hooks
) qui définirait des noms d'utilisateur et des adresses e-mail spécifiques en fonction des informations contenues dans un référentiel local./.git/config
:Vous devez placer le chemin d'accès au répertoire du modèle dans votre
~/.gitconfig
:Ensuite, chacun
git init
ougit clone
récupérera ce crochet et appliquera les données utilisateur lors du prochaingit commit
. Si vous souhaitez appliquer le hook à des dépôts déjà existants, exécutez simplement ungit init
à l'intérieur du référentiel afin de le réinitialiser.Voici le crochet que j'ai trouvé (il a encore besoin d'être poli - les suggestions sont les bienvenues). Enregistrez-le sous
ou
et assurez-vous qu'il est exécutable:
chmod +x ./post-checkout || chmod +x ./pre_commit
ÉDITER:
J'ai donc réécrit le hook en hook et commande en Python. De plus, il est également possible d'appeler le script en tant que commande Git (
git passport
). Il est également possible de définir un nombre arbitraire d'ID dans un configfile (~/.gitpassport
) qui peuvent être sélectionnés à l'invite. Vous pouvez trouver le projet sur github.com: git-passport - Une commande Git et un hook écrits en Python pour gérer plusieurs comptes Git / identités d'utilisateurs .la source
chmod +x post-checkout
, 2. lesgit_remotes
valeurs sont la partie de début du nom d'hôte entier, par exemple[email protected]
, 3. leslocal_id
valeurs doivent être modifiées par l'utilisateur pour les noms et adresses e-mail respectifs.git init
nouveaux projets à partir d'un IDE tel queeclipse
(qui ne peut pas gérer les déclencheurs interactifs de pré-validation)Si vous ne souhaitez pas avoir d'adresse e-mail par défaut ( les liens d'adresse e-mail vers un utilisateur github ), vous pouvez configurer que vous souhaitez être invité. La façon dont vous pouvez le faire dépend de la version de git que vous utilisez, voir ci-dessous.
L'inconvénient (prévu) est que vous devez configurer votre adresse e-mail (et votre nom) une fois pour chaque référentiel. Donc, vous ne pouvez pas oublier de le faire.
Version <2.7.0
dans votre configuration globale,
~/.gitconfig
comme indiqué dans un commentaire de Dan Aloni dans le blog d'Orr Sella . Lorsque vous essayez de faire le premier commit dans un dépôt, git échoue avec le joli message:Le nom est tiré de la configuration globale lorsque l'adresse e-mail est définie localement (le message n'est pas parfaitement précis).
2.7.0 ≤ Version <2.8.0
Le comportement dans les versions <2.7.0 n'était pas prévu et corrigé avec 2.7.0. Vous pouvez toujours utiliser un hook de pré-validation comme décrit dans le blog d'Orr Sella . Cette solution fonctionne également pour d'autres versions, mais les autres solutions pas pour cette version.
Version ≥ 2.8.0
Dan Aloni a ajouté une option pour obtenir ce comportement (voir les notes de version ). Utilisez-le avec:
Pour le faire fonctionner, vous ne pouvez pas donner un nom ou une adresse e-mail dans la configuration globale. Ensuite, au premier commit, vous obtenez un message d'erreur
Le message n'est donc pas très instructif, mais puisque vous définissez l'option explicitement, vous devez savoir quoi faire. Contrairement à la solution des versions <2.7.0, vous devez toujours définir le nom et l'e-mail manuellement.
la source
git bisect
de trouver que le commit 19ce497c ... a introduit ce comportement. Cependant, indépendamment de la version (2.5 - 2.7) je peux utiliseremail =
(sans argument) dans la configuration et cela montre le même comportement queemail = "(none)"
dans les anciennes versions. Pouvez-vous le confirmer? Si c'est le cas, je modifierai ma réponse. Je suis juste sceptique car cela semble si évident et je ne l'ai pas utilisé auparavant.email =
dans 2.7.0, Git devine toujours l'adresse e-mail basée sur le nom d'utilisateur et le nom d'hôte. J'utilise maintenant l'pre-commit
approche dans le blog de Sella. J'ai également informé le Dan Aloni qui a proposé l'"(none)"
idée dans le post de Sella et il a déposé un patch pour l'implémenter officiellement en tant que fonctionnalité: permalink.gmane.org/gmane.comp.version-control.git/285301Avec les inclusions conditionnelles dans Git 2.13, il est désormais possible de faire coexister plusieurs utilisateurs / e-mails sur une seule machine avec peu de travail.
user.gitconfig
a mon nom et mon adresse e-mail.work-user.gitconfig
a mon nom de travail et mon e-mail. Les deux fichiers sont au~
chemin.Mon nom / e-mail personnel s'applique donc par défaut. Pour
c:/work/
dir, mon nom de travail / e-mail est appliqué. Pourc:/work/github/
dir, mon nom / e-mail personnel est appliqué. Cela fonctionne lorsque le dernier paramètre est appliqué.gitdir
est sensible à la casse etgitdir/i
ne respecte pas la casse."gitdir/i:github/"
appliquerait l'inclusion conditionnelle pour tout répertoire avecgithub
dans son chemin.la source
gitdir/i
m'a aidé (ce que sa réponse ne mentionne pas).Une autre option pour se familiariser
git
avec plusieurs noms / e-mails consiste à créer un aliasgit
et à utiliser l'-c
indicateur pour remplacer la configuration globale et spécifique au référentiel.Par exemple, en définissant un alias:
Pour voir si cela fonctionne, tapez simplement
git config user.email
:Au lieu d'un alias, vous pouvez également mettre un
git
exécutable personnalisé dans votre$PATH
.Un avantage de ces méthodes par rapport à un référentiel spécifique
.git/config
est qu'elles s'appliquent à chaquegit
référentiel lorsque legit
programme personnalisé est actif. De cette façon, vous pouvez facilement basculer entre les utilisateurs / noms sans modifier aucune configuration (partagée).la source
les alias git (et les sections dans les configurations git) à la rescousse!
ajoutez un alias (depuis la ligne de commande):
puis, définissez, par exemple
et dans un référentiel nouveau ou cloné, vous pouvez exécuter cette commande:
Cette solution est automatique, mais l' utilisateur désenclencher et e - mail dans votre globale
~/.gitconfig
et la miseuser.useConfigOnly
àtrue
contraindrait git pour vous rappeler de les définir manuellement dans chaque nouveau ou cloné repo.la source
Voici les étapes complètes après avoir lu de nombreuses réponses ici
Comment configurer les paramètres de plusieurs clés SSH pour différents comptes Github
Vous voudrez peut-être commencer à vérifier vos clés actuellement enregistrées
Si vous décidez de supprimer toutes les clés en cache avant ( facultatif, faites attention à ce sujet )
Ensuite, vous pouvez créer une clé pub / priv ssh liée à chaque e-mail / compte que vous souhaitez / devez utiliser
Après avoir exécuté ces commandes, les fichiers suivants seront créés
Assurez-vous que l' agent d'authentification est en cours d'exécution
Ajoutez les clés générées comme suit (à partir du dossier ~ / .ssh)
Vous pouvez maintenant vérifier à nouveau vos clés enregistrées
Vous devez maintenant ajouter les clés publiques générées à vos clés d'accès au serveur github / bickbuket
Clonez chacun des référentiels dans différents dossiers
Accédez au dossier dans lequel le travail de l'utilisateur fonctionnera et exécutez-le
Juste pour voir ce que cela fait vérifier le contenu du ".git / config"
Accédez au dossier dans lequel l'utilisateur pers travaillera et exécutez ce
Juste pour voir ce que cela fait vérifier le contenu du ".git / config"
Après tout cela, vous pourrez valider votre code personnel et professionnel en basculant simplement entre ces deux dossiers
Dans le cas où vous utilisez Git Bash et devez générer des clés ssh sous Windows, procédez comme suit:
https://support.automaticsync.com/hc/en-us/articles/202357115-Generating-an-SSH-Key-on-Windows
la source
Il existe une solution simple qui semble bien fonctionner pour éviter les erreurs.
Supprimez simplement la
[user]
section de votre~/.gitconfig
, ce qui vous empêchera de faire des commits sans définiruser.name
pour chaque référentiel.Dans votre
~/.bashrc
, ajoutez quelques alias simples pour l'utilisateur et l'e-mail:la source
Cette réponse est partiellement inspirée du message de @Saucier, mais je cherchais un moyen automatisé de définir
user.name
etuser.email
sur une base par rapport, basé sur la télécommande, qui était un peu plus léger que le paquet git-passeport qu'il a développé . H / t également à @John pour le paramètre useConfigOnly. Voici ma solution:.gitconfig
changements:crochet post-paiement qui doit être enregistré dans le chemin suivant
~/.git-templates/hooks/post-checkout
::J'utilise des informations d'identification différentes pour github et gitlab, mais ces références dans le code ci-dessus peuvent être remplacées ou augmentées par n'importe quel service que vous utilisez. Afin que le hook post-paiement définisse automatiquement le nom d'utilisateur et l'adresse e-mail localement pour un dépôt après une vérification, assurez-vous que le nom du service apparaît dans l'URL distante, ajoutez-le au tableau des services dans le
post-checkout
script et créez une section pour celui-ci dans votre.gitconfig
qui contient votre nom d'utilisateur et votre adresse e-mail pour ce service.Si aucun des noms de service n'apparaît dans l'URL distante ou si le dépôt n'a pas de télécommande, le nom d'utilisateur et l'e-mail ne seront pas définis localement. Dans ces cas, le
user.useConfigOnly
paramètre sera en jeu, ce qui ne vous permettra pas d'effectuer des validations tant que le nom d'utilisateur et l'e-mail ne sont pas définis au niveau du référentiel, et invitera l'utilisateur à configurer ces informations.la source
chmod 755
le script hook. Sinon, il sera copié mais jamais exécuté.GIT_AUTHOR_EMAIL
+ local.bashrc
.bashrc_local
: ne suivez pas ce fichier, placez-le uniquement sur votre ordinateur de travail:.bashrc
: suivre ce fichier, le rendre identique sur les ordinateurs professionnels et personnels:J'utilise https://github.com/technicalpickles/homesick pour synchroniser mes fichiers dot.
Si seulement gitconfig acceptait les variables d'environnement: Expansion des variables shell dans git config
la source
Environnement Windows
Ceci peut être modifié à partir de
Git Extensions --> Settings --> Global Settings
, si vous l'avez installé dans vos systèmes.gitextensions-dernière-version
Cliquez avec le bouton droit sur un dossier / répertoire dans l'environnement Windows pour accéder à ces paramètres.
Mise à jour : comment changer / maintenir plusieurs paramètres dans la version 2.49
la source
C'est peut-être un simple hack, mais c'est utile. Générez simplement 2 clés ssh comme ci-dessous.
De la même façon, créez-en un de plus pour le personnel. Donc, vous avez 2 clés SSH, votre travail et votre entreprise. Copiez work.pub, work, personal.pub, personal dans ~ / .ssh / Directory.
Créez ensuite un script shell avec les lignes suivantes et nommez-le comme crev.sh (Company Reverse) avec le contenu suivant.
De la même manière, créez-en un de plus appelé prev.sh (Personal Reverse) avec le contenu suivant.
dans ~ / .bashrc ajoutez des alias pour ces scripts comme ci-dessous
Chaque fois que vous voulez utiliser la société, faites simplement crev, et si vous voulez utiliser personnel, prev :-p.
Ajoutez ces clés ssh à vos comptes GitHub. Assurez-vous que id_rsa n'a pas été généré précédemment, car ces scripts remplaceront id_rsa. Si vous avez déjà généré id_rsa, utilisez-le pour l'un des comptes. Copiez-les comme personnelles et ignorez la génération de clés personnelles.
la source
J'ai créé une fonction bash qui gère cela. Voici le repo Github .
Pour l'enregistrement:
la source
Ajoutez simplement ceci à votre ~ / .bash_profile pour basculer entre les clés par défaut de github.com
la source
Vous pouvez également utiliser
git commit --author "Your Name <[email protected]>"
au moment de faire une validation dans un référentiel où vous souhaitez valider en tant qu'utilisateur différent.la source
Quelque chose comme la réponse de Rob W , mais autorisant différentes clés ssh différentes, et fonctionne avec les anciennes versions de git (qui n'ont pas par exemple une configuration core.sshCommand).
J'ai créé le fichier
~/bin/git_poweruser
, avec la permission exécutable, et dans le CHEMIN:Chaque fois que je veux engager ou pousser quelque chose en tant que "Utilisateur avancé", j'utilise à la
git_poweruser
place degit
. Il devrait fonctionner sur n'importe quel répertoire et ne nécessite pas de modifications dans,.gitconfig
ou.ssh/config
du moins pas dans le mien.la source
Bien que la plupart des questions aient en quelque sorte répondu à l'OP, je n'ai eu qu'à passer par moi-même et sans même googler, j'ai pu trouver la solution la plus rapide et la plus simple. Voici des étapes simples:
.gitconfg
de votre autre référentiel.gitconfig
fichier, telles que le nom, l'e-mail et le nom d'utilisateur[user] name = John email = [email protected] username = john133
.gitignore
liste, pour vous assurer de ne pas valider le.gitconfig
fichier dans votre référentiel de travailla source