Un ami et moi partageons mon ordinateur. J'ai fait des push sur GitHub en utilisant le shell git bash sous Windows 7. Maintenant, nous sommes dans un projet différent sur cet ordinateur et j'ai besoin d'elle pour Push vers son compte. Mais il continue d'essayer d'utiliser mon nom d'utilisateur et de dire que je n'ai pas accès à son référentiel:
$ git Push her_github_repository our_branch
ERROR: Permission to her_username/repository.git denied to my_username.
fatal: The remote end hung up unexpectedly
Si vous utilisez un utilisateur Windows différent, votre clé SSH et vos paramètres git seront indépendants.
Si ce n'est pas une option pour vous, votre ami devrait alors ajouter votre clé SSH à son compte Github.
Bien que la solution précédente vous permette de continuer à pousser comme vous-même, mais elle vous permettra de pousser dans son dépôt. Si vous ne le souhaitez pas et que vous travaillez dans un dossier différent sur le même ordinateur, vous pouvez configurer le nom d'utilisateur et l'e-mail localement dans un dossier avec git en supprimant -g
l'indicateur de la commande config:
git config user.name her_username
git config user.email her_email
Sinon, si vous utilisez le protocole https
Push, Github vous demandera de saisir un nom d'utilisateur/mot de passe à chaque fois (sauf si vous utilisez un gestionnaire de mot de passe).
Cela a fonctionné pour moi, il va demander le nom d'utilisateur et mot de passe
git config --local credential.helper ""
git Push Origin master
J'ai configuré un alias ssh en utilisant une IdentityFile
personnalisée et réécrit l'Origine pour qu'elle utilise mon nom d'hôte me-github
personnalisé.
#when prompted enter `id_rsa_user1` as filename
ssh-keygen -t rsa
# ~/.ssh/config
Host user1-github
HostName github.com
Port 22
User git
IdentityFile ~/.ssh/id_rsa_user1
#check original remote Origin url
git remote -v
Origin [email protected]:user1/my-repo.git
#change it to use your custom `user1-github` hostname
git remote rm Origin
git remote add Origin git@user1-github:user1/my-repo.git
Vous pouvez pousser avec en utilisant un compte différent. Par exemple, si votre compte est A qui est stocké dans .gitconfig et que vous souhaitez utiliser le compte B qui est le propriétaire du référentiel que vous souhaitez envoyer.
Compte B: nom_utilisateur_B, mot_passe_B
Exemple de lien SSH: https://github.com/B_user_name/project.git
Le compte Push avec B est:
$ git Push https://'B_user_name':'B_password'@github.com/B_user_name/project.git
Pour voir le compte dans .gitconfig
$git config --global --list
$git config --global -e
(pour changer de compte également)Si, après l'exécution de git Push
, Git vous demande un mot de passe de user
, mais que vous souhaitez utiliser l'option Push en tant que new_user
, vous pouvez utiliser git config remote.Origin.url
:
$ git Push
[email protected]:either/branch/or/path's password:
À ce stade, utilisez ^C
pour quitter git Push
et utilisez les options suivantes pour pousser en tant que new_user
.
$ git config remote.Origin.url
[email protected]:either/branch/or/path
$ git config remote.Origin.url [email protected]:either/branch/or/path
$ git Push
[email protected]:either/branch/or/path's password:
Si vous utilisez une URL SSH ([email protected]:username/projectname.git
) plutôt qu'une URL HTTPS, vous pouvez spécifier temporairement une clé SSH différente à l'aide de la variable d'environnement $GIT_SSH_COMMAND
:
$ GIT_SSH_COMMAND="ssh -i different_private_key" git Push
Autant que je sache, avec les URL SSH, GitHub ne s’intéresse pas aux noms d’utilisateur, mais uniquement aux clés: si un compte utilisateur a accès à un référentiel et que ce compte a une clé SSH (voir la page Clés SSH dans les paramètres du compte), si vous utilisez cette clé SSH pour envoyer à ce référentiel, le Push sera traité comme provenant de cet utilisateur.
C'est simple lors du clonage, veuillez prendre l'URL git avec votre nom d'utilisateur. Tout en le validant, il vous demandera votre nouveau mot de passe.
Par exemple:
si c'est ton problème
remote: Permission to username1/repo.git denied to username2.
fatal: unable to access 'https://github.com/username1/repo.git/':
The requested URL returned error: 403
En plus de changer le nom d'utilisateur et le courrier électronique du terminal à l'aide de git config:
$ git config --global user.name "Bob"
$ git config --global user.email "[email protected]"
vous devrez supprimer les informations d'autorisation du trousseau. Cette solution m'a pris plusieurs heures à comprendre. J'ai constaté que j'avais également un certificat dans mon trousseau.
Ouvrez l’accès au trousseau, cliquez sur Tous les éléments et recherchez git. Supprimer tout le trousseau
Allez à Credential Manager Allez à Windows Credentials Supprimez les entrées sous Generic Credentials Essayez de vous reconnecter.
Comme mentionné précédemment, vous pouvez utiliser
git config user.name her_username
git config user.email her_email
pour définir manuellement le nom d'utilisateur et l'e-mail pour un dépôt unique, mais vous devez ajouter cette commande:
git commit --amend --reset-author
si vous avez déjà essayé de pousser avant le changement. Sinon, les modifications n'apparaissent pas dans le fichier de configuration.
J'utilise une machine pour envoyer du code à deux comptes GitHub différents avec un nom d'utilisateur différent. En supposant que vous ayez déjà créé un compte et que vous souhaitiez en créer un nouveau:
ssh-keygen -t rsa -C "[email protected]"
id_rsa
. Donnez-lui un nom différent, par exemple id_rsa_another
Paramètres -> Clés SSH et GPG -> Nouvelle clé SSH -> Attribuer une étiquette et coller la clé -> Ajouter une clé SSH
ssh-add ~/.ssh/id_rsa_another
touch ~/.ssh/config
et éditez-le en fournissant des configurations à vos comptes:#first account
Host github.com-first
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa
#another account
Host github.com-another
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_another
Maintenant, vous devriez être capable d’appliquer de différents comptes en fonction de la clé que vous ajoutez à l’agent ssh, c’est-à-dire pour utiliser votre premier compte, faites ssh-add ~/.ssh/id_rsa
.
Vous voudrez peut-être aussi changer votre email d'utilisateur:
git config --global user.email "[email protected]"
ou effacez les clés ssh en cas d’erreur d’autorisation lors de la lecture du code d’un des comptes:
ssh-add -D
git config user.name change seulement le nom que je commets. Je ne peux toujours pas pousser. C'est comme ça que j'ai résolu le problème et je pense que c'est un moyen facile pour moi.
Générez une clé SSH sous le nom d'utilisateur que vous souhaitez envoyer sur l'ordinateur que vous utiliserez https://help.github.com/articles/connecting-to-github-with-ssh/
Ajoutez cette clé au compte d'utilisateur github sur lequel vous souhaitez diffuser https://help.github.com/articles/adding-a-new-ssh-key-to-your-github-account/
Choisissez de cloner avec SSH
Vous pouvez maintenant appuyer en tant que cet utilisateur sur ce dépôt.
Si vous avez https://desktop.github.com/
alors vous pouvez aller dans Préférences (ou Options) -> Comptes
puis déconnectez-vous et connectez-vous.
Si vous utilisez Windows et l'utilisateur Git pour Windows et la variable manager
pour gérer les informations d'identification (alias Git-Credential-Manager-for-Windows
Lien _), le problème est qu'il n'existe pas de moyen facile de changer d'utilisateur entre utilisateurs lorsque vous passez à GitHub avec https
à l'aide de OAuth
.
La raison en est que le jeton est stocké comme:
git:https://github.com
Personal Access Token
OAuth_Token
Les variantes de l'URL dans Internet Address
ne fonctionnent pas, par exemple:
git:https://[email protected]
git:https://github.com/username
La solution: namespaces. Cela se trouve dans les détails de la configuration du Git-Credential-Manager-for-Windows
:
Citant de cela:
espace de noms
Définit l'espace de noms pour les informations d'identification stockées.
Par défaut, le GCM utilise l'espace de noms 'git' pour toutes les informations d'identification stockées. La définition de cette valeur de configuration permet de contrôler l'espace de noms utilisé globalement ou par hôte.
git config --global credential.namespace name
Maintenant, stockez vos informations d'identification dans le gestionnaire des informations d'identification Windows en tant que:
git.username:https://github.com
Personal Access Token
OAuth_Token
Notez que nous avons changé: git
-> git.username
(où vous remplacez username
par votre nom d'utilisateur actuel ou, à titre d'information, par tout ce que vous voudrez peut-être comme identifiant unique)
Maintenant, dans le référentiel où vous voulez utiliser l'entrée spécifique, exécutez:
git config credential.namespace git.username
(Encore une fois ... remplacez username
par votre valeur souhaitée)
Votre .git/config
va maintenant contenir:
[credential]
namespace = git.username
Et voilà! Les informations d'identification correctes seront extraites de la banque d'informations d'identification Windows.
Ceci, bien sûr, ne change pas quel utilisateur/courriel pousse. Pour cela, vous devez configurer les habituels user.name
et user.email
L'ID utilisateur où se trouve la validation est stocké dans le fichier de configuration.
aller en haut du référentielvi .git/config
changez la ligne url listée après "[remote" Origin "] pour avoir l'ID utilisateur approprié
Vous pouvez ajouter une nouvelle URL distante pour l'autre nom d'utilisateur à l'aide de git remote add Origin-username https://[email protected]/repository_name.git
.
Après cela, si vous utilisez Push avec git Push -u Origin-username master
, ceci vous demandera le mot de passe.