如何在不同的用户名下推送到GitHub ?

我和一个朋友共用我的电脑。我已经在Windows 7上使用git bash shell推送到GitHub。现在我们在那台电脑上做一个不同的项目,我需要她推到她的账户上。但它一直试图使用我的用户名,并说我没有访问她的存储库:

$ 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
380400 次浏览

如果您使用不同的windows用户,您的SSH密钥和git设置将是独立的。

如果这对你来说不是一个选择,那么你的朋友应该把你的SSH密钥添加到她的Github帐户。

虽然,之前的解决方案会让你自己推动,但它会让你推动她的回购。如果你不想这样做,并且在同一台电脑的不同文件夹中工作,你可以通过删除config命令的-g标志,在git的本地文件夹中设置用户名和电子邮件:

git config user.name her_username
git config user.email her_email

或者,如果你推https协议,Github每次都会提示输入用户名/密码(除非你使用密码管理器)。

如果运行git push Git后要求密码为user,但你想按new_user,你可能想使用git config remote.origin.url:

$ git push
user@my.host.com:either/branch/or/path's password:

此时,使用^C退出git push,并使用following将其推为new_user

$ git config remote.origin.url
user@my.host.com:either/branch/or/path


$ git config remote.origin.url new_user@my.host.com:either/branch/or/path


$ git push
new_user@my.host.com:either/branch/or/path's password:

我使用自定义IdentityFile设置了一个ssh别名,并重写了原点,以使用我的自定义me-github主机名。

#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 git@github.com: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

如果你使用SSH URL (git@github.com:username/projectname.git)而不是HTTPS URL,你可以使用$GIT_SSH_COMMAND环境变量临时指定一个不同的SSH密钥:

$ GIT_SSH_COMMAND="ssh -i different_private_key" git push

据我所知,使用SSH url, GitHub并不关心用户名,只关心密钥:如果用户帐户有权访问存储库,并且该帐户有SSH密钥(参见帐户设置中的SSH密钥页面),那么如果你使用该SSH密钥推送到该存储库,则该推送将被视为来自该用户。

如前所述,您可以使用

git config user.name her_username
git config user.email her_email

手动设置单次回购的用户名和邮箱,但必须添加此命令:

git commit --amend --reset-author

如果你在改变之前已经尝试过了。否则更改不会出现在配置文件中。

进入证书管理器 转到Windows凭证 删除通用凭证下的条目

.

.

如果你有https://desktop.github.com/
那么你可以去首选项(或选项) -> Accounts
然后签出和签入。

git config user.name只改变我提交的名称。我还是推不动。这就是我解决它的方法,我认为对我来说是一个简单的方法。

  1. 在你要使用的计算机上用你想要推送的用户名生成一个SSH密钥 李https://help.github.com/articles/connecting-to-github-with-ssh/ < / p > < / >

  2. 将此键添加到您想要推送的github用户帐户 李https://help.github.com/articles/adding-a-new-ssh-key-to-your-github-account/ < / p > < / >

  3. 选择SSH克隆

你可以以这个用户推入到那个回购。

这是简单的克隆,请采取的git URL与您的用户名。在提交时,它将询问您的新用户密码。

例如:

git克隆https://username@github.com/username/reponame.git

git克隆https://username@bitbucket.org/username/reponame.git

如果这是你的问题

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

除了使用git配置从终端更改用户名和电子邮件:

$ git config --global user.name "Bob"
$ git config --global user.email "bob@example.com"

您需要从钥匙串中删除授权信息。我花了好几个小时才想出这个解决办法。我发现我的钥匙链里也有证书。

打开钥匙链访问,点击所有项目,搜索git。删除所有keychain

您可以使用不同的帐户推送。 例如,如果你的帐户是一个,它存储在.gitconfig中,你想使用帐户B,它是你想推送的回购的所有者

Account B: B_user_name, B_password
SSH链接示例:https://github.com/B_user_name/project.git

带有B帐户的推送是:

$ git push https://'B_user_name':'B_password'@github.com/B_user_name/project.git

查看.gitconfig中的帐户

  1. $git config --global --list
  2. $git config --global -e(也要更改帐户)

如果在Windows下,用户Git for Windows和manager用于管理凭据(又名Git-Credential-Manager-for-Windows 链接),问题是当使用OAuth令牌通过https推到GitHub时,没有简单的方法在用户之间切换。

原因是令牌被存储为:

  • 互联网地址:git:https://github.com
  • 用户名:Personal Access Token
  • 密码:OAuth_Token

Internet Address中的URL变体是无效的,例如:

  • git:https://username@github.com
  • git:https://github.com/username
  • ...

解决方案:名称空间。这可以在Git-Credential-Manager-for-Windows的配置细节中找到:

引用其中的话:

名称空间

为存储的凭证设置名称空间。

默认情况下,GCM对所有存储的凭证使用'git'命名空间,设置这个配置值可以控制全局或每台主机使用的命名空间。

git config --global credential.namespace name

现在,在Windows凭据管理器中存储您的凭据为:

  • 互联网地址:git.username:https://github.com
  • 用户名:Personal Access Token
  • 密码:OAuth_Token

注意,我们已经更改了:git -> git.username(你可以将username更改为你的实际用户名,或者为了它,更改为任何你想要作为唯一标识符的东西)

现在,在你想要使用特定条目的存储库中,执行:

git config credential.namespace git.username

(再次…用你想要的值替换username)

你的.git/config现在将包含:

[credential]
namespace = git.username

果不其然!正确的凭据将从Windows凭据存储中取出。

当然,这不会改变哪个用户/电子邮件正在推送。为此,你必须配置通常的user.nameuser.email

这对我有用,它会提示输入用户名和密码

git config --local credential.helper ""
git push origin master

您可以使用git remote add origin-username https://username@github.expedia.biz/repository_name.git为另一个用户名添加一个新的远程URL

在这之后,如果你使用git push -u origin-username master进行推送,这会提示你输入密码。

我一直在使用一台机器,用不同的用户名将代码推送到两个不同的GitHub帐户。假设您已经设置了一个帐户,并想添加一个新帐户:

  1. 生成新的SSH密钥ssh-keygen -t rsa -C "myaddress@example.com"
  2. 保存它,但记住不要覆盖现有的id_rsa。给它一个不同的名字,例如id_rsa_another
  3. 复制密钥的内容到你的GitHub帐户:

Settings -> SSH和GPG密钥-> SSH新密钥-> 粘贴标签 the key ->添加SSH key

  1. 将密钥添加到ssh代理:ssh-add ~/.ssh/id_rsa_another
  2. 设置一个GitHub主机:使用touch ~/.ssh/config创建一个配置文件,并通过向您的帐户提供配置来编辑该文件:
#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
现在,您应该能够从不同的帐户推送,这取决于您添加到ssh代理的密钥,即使用您的第一个帐户 ssh-add ~/.ssh/id_rsa . < / p >

你可能还想更改你的用户邮箱:

git config --global user.email "myaddress@example.com"

或者在向其中一个帐户发送代码时,在权限错误的情况下清除SSH密钥:

ssh-add -D

发生提交的用户id存储在配置文件中。

到存储库的顶部 vi . /配置< / p >

更改“[remote "origin"]后列出的url行,使其具有适当的用户id

如果您使用ssh和get

对some_username/repository的权限。Git拒绝 Alice_username < / >强

虽然你不想推作为Alice_username,确保Alice_username没有你的电脑的ssh密钥添加到它的github帐户。

我从爱丽丝的github账户上删除了ssh密钥,推送成功了。

我不知道如何在一台机器上有第二个github身份(这些答案都不适合我),但我确实弄清楚了如何能够以我自己的身份推送多个不同的github账户。

推送相同的用户名,但不同的github帐户

  1. 为你的第二个github账户设置第二个SSH密钥(like so)

  2. 帐户之间的变化如下:

用我的第二个github账号推送

ssh-add -D
ssh-add ~/.ssh/ssh_key_for_my_2nd_account
git push

用我的主账号推送

ssh-add -D
ssh-add ~/.ssh/id_rsa
git push

请遵循以下步骤:

    你必须明白,你在提交之前定义了作者! 李提交已经被冻结:它们拥有为其作者和提交者设置的任何名称,并且这些名称不能更改。 < / >
# you can check what's currently:
git config user.name
git config user.email


git config user.name "your_github_username"
git config user.email "your_github_email"


# Again check what's currently:
git config user.name
git config user.email
  1. 检查你的提交被标记到谁?
git log
# once you're confirmed that it's tagged to you, then you should move to step 3

如果作者是错的,那么你可以很容易地在不丢失更改的情况下撤消上次提交

此外,在移动到步骤3之前,不要忘记遵循步骤1进行完整性检查。

  1. 提示自己输入github_username和github_password
git config --local credential.helper ""
git push
# it will ask you to enter your github_username and github_password

这个,应该工作: git push origin local-name:remote-name < / p >

更好的是,对于GitLab,我使用第二个“origin",说“__abc1”:

< p > git remote add origin2 ...
< / p >

git push origin2 master

常规的(短)git push应该隐式地与第一个“origin"

git add .
git commit -m "initial commit"
git config --local credential.helper ""
git push https://github.com/youraccount/repo.git --all

执行此push命令后,将打开用户名密码提示符。

我刚刚添加了额外的用户:

  • 回购的设置,
  • 管理访问,
  • 邀请合作者

这对我很有效。

我也遇到过类似的问题。我有一个工作用的github账户和一个私人账户。在我的mac上,我主要使用我的工作github。我无法说服git通过终端推送到我的私人回购。但当我使用github桌面时,它是有效的。

(我知道肯定有不同的方法,但上面的答案都没用,所以这是阻力最小的方法。)

我最喜欢这样做。

git push https://username@github.com/username/repo

这将提示输入密码,因此您不必在shell中以纯文本的形式编写密码。

修改名为config的文件,该文件位于项目根文件夹中的.git目录中:[PROJECT_PATH]/.git/config

我在这个文件的末尾添加了以下部分。之后我就可以用我的新名字按遥控器了。

[user]
name = Your Name
email = MyEmailAddress@company.com

在git bash shell中,导航到你朋友的存储库并键入以下内容:

git config --local credential.username "friend's_username"

现在,凭据存储将使用属于她的用户名而不是您的用户名的凭据。

本例将值johndoe@example.com写入配置名user.email。它使用——global标志,所以这个值是为当前操作系统用户设置的。

$ git config --global user.name "John Doe"
$ git config --global user.email johndoe@example.com