Git 从终端错误地推送用户

我的 Git 和终端有点问题。

这里有一个画廊向你展示我的问题: http://imgur.com/a/6RrEY

当我从我的终端推送提交时,git 说我用另一个用户名推送它们,那是一个来自我的组织(我的公司)的用户,根本没有提交,它似乎不属于任何人: (检查画廊第一张图片)

但是当我在 mac 中使用 Github 时就不会发生这种情况,在 feed 中我看到提交是由我自己推送的。

这个问题也影响到我的个人存储库,我的终端说我没有权限推送这些存储库的提交(这显然是错误的) ,因为它试图推送这个用户: (检查画廊第二张图片)

你猜怎么着? 这种事情在 Mac 的 Github 上不会发生。

几天前我把我的电脑换成了一个全新的,所以我重置了我所有的 Github 的 ssh 密钥,只留下一个由 Github 生成的新的给 Mac,所以我不认为有一些鬼用户/ssh 密钥隐藏在某个地方,这个 hdd 是全新的: (检查画廊第三张图片)

我的. gitconfig 文件全部清除,只有我的凭证: (检查画廊第四张图片)

我真的不明白,帮帮我,StackOverflow,你是我唯一的希望。

(对于我糟糕的瘸子技能和《星球大战》的参考文献,我表示歉意)

编辑: ssh-add -l只显示了 github 为 mac 创建的 ssh 密钥,我只有一个 github 帐户

编辑2: ssh -T git@github.com承认我是好用户。

编辑3: 经过几次测试后,我的终端似乎用我的用户名进行了提交,但是用另一个 Github for mac 提交,并用好的用户名进行提交。这种情况发生在我的每一次回购(甚至是新的回购)中。

编辑4: 在个人存储库中,git log --pretty="%h %an %ae"显示了我的好用户名

编辑5: env中没有环境变量覆盖我的凭据的迹象。即使我试图设置这些变量,良好的凭据问题仍然存在。

编辑6: 如果我强迫用户使用存储库的 /.git/config路径,那么事情会恢复正常,但是我不认为这是一个好的选择: http://USER@github.com/USER/REPO.git

编辑7: 我们删除了为我推送提交的 git 用户,这带来了另一个错误: remote: Invalid username or password. fatal: Authentication failed for 'https://github.com/USER/REPO.git/'

最后编辑: 我用自制软件安装了 git,输入了 git config --global push.default simple < strong > ,现在它甚至可以在不强迫用户的情况下获取我的凭证。真奇怪。谢谢大家的帮助,你们是伟大的人!

122835 次浏览

看起来我的终端用我的用户名进行提交,但是用另一个用户名推送它们

作者和提交者的姓名和电子邮件(这对 GitHub 很重要)来源于:

git config user.name
git config user.email

但是,正如在 git configgit commit-tree中提到的,这些值可以被环境变量覆盖:

GIT_AUTHOR_NAME
GIT_AUTHOR_EMAIL
GIT_COMMITTER_NAME
GIT_COMMITTER_EMAIL

再检查一遍这些变量。

如果我强制用户使用存储库的 .git/config,那么一切都会正常工作,但我不认为这是一个好的选择。

但这应该是一个很好的解决方案。
当使用 https url 时,我总是在其中指定用户,以确保身份验证是由正确的用户完成的。

http://USER@github.com/USER/REPO.git

尽管其他用户提供了很多很棒的选项,但解决这个问题的唯一方法是完全重新安装 git 并键入 git config --global push.default simple来重写良好的凭据。

我只是工作上有点问题。随 Mac 附带的内置 git 或者在安装 xcode 缓存时在 keychain 中提供 git 凭证。对我来说,解决办法是:

启动密钥链访问(通过 cmd + space 启动聚光灯,键入密钥链,按回车键)

在左上角的 keychain 下面,选择“ login” 在左边的类别中,选择“密码”

找到“ github”并删除它。

如果您正在使用 MAC,那么转到 钥匙链访问并删除您不希望 git 访问的用户条目。

GitHub 通过它看到的 ssh 键来识别您,而不是通过来自 git 的任何设置。

因此,当您尝试从您的个人帐户推送时,您需要确保您的工作帐户的 ssh 密钥不在密钥环中,反之亦然。

使用 ssh-add -l来确定您的密钥环中有哪些密钥,使用 ssh-add -d <keyfile>来从您的密钥环中删除一个密钥,如果它不起作用,则从 ~/.ssh/config中删除“不需要的”ssh 密钥。

来源

注意: GitHub 仍然只会根据电子邮件识别你的提交。

临时解决方案是首先运行 killall ssh-agent,然后添加为您需要使用 ssh-add ~/.ssh/id_4shameer的帐户生成的 ssh 密钥

当我们得到 ERROR: Permission to user/repo-git.git denied to username.类型的错误时,它将帮助我们处理多个 github 帐户

我的解决方案是在我的 ~/中添加一个条目。Github 的 ssh/config 文件。我这么做是因为:

  1. 我有多个用同一个密钥的 github 帐户(不要这样做!)
  2. 当您使用 ssh“ git push”时,计算机默认获取 id _ rsa 并将其用作 ssh 标识。
  3. Github 无法(不出所料)消除您所指的帐户之间的冲突,因为它是根据所呈现的密钥创建帐户的,如果与多个帐户绑定,就会导致这样的痛苦。凶手是,很长一段时间以来,我一直逍遥法外,事情就这样解决了。

我添加的条目是:

Host github.com
Hostname github.com
Port 22
User waterproofpatch
IdentityFile ~/.ssh/id_rsa_waterproofpatch

我已经创建了一个 新的密钥,对我的帐户来说是唯一的,作为 id _ rsa _ 叠加防水补丁。Ssh 配置中的这个条目指定,对于到 github.com 的连接,我希望显示这个键。

另一个解决方案可能是让我登录另一个帐户,删除重复的 ssh 密钥。

清除钥匙链没有帮助... 我必须 ssh-add -D和重新添加与 ssh-add <keyfile>的关键

我解决了这个问题,删除(或重命名为 *)。Id _ rsa 和 id _ rsa。MacOS High Sierra 的酒吧文件。给你的创意。

我在 ~/中有自定义的主机重定向。Ssh/config,应该应用,但使用错误的用户之前,我重命名两个文件..。

我就是这么做的:

  1. 更改内部的凭据。 git-凭据
  2. 更改. gitconfig 中的全局 user.name 和 user.email

对我来说,删除回购协议并重新添加它有效的方法是:

git remote rm origin
git remote add origin git@github.com:fguillen/MyApp.git

我正在使用 Windows10,今天也遇到了同样的问题。在我的例子中,不同用户的凭据由 Windows 凭据管理器保存。因此,使用以下命令删除/取消 git 凭据, git config --global --unset credential.helper

我不得不按照下面的方法手动删除 Windows 中的条目,

开始—— > 控制面板——-> 用户帐户——-> 管理您的凭据——-> Windows 凭据

然后搜索一个条目,如,git: https://github.com并删除它。

我在 Windows10中遇到了同样的问题,即使卸载了我的 git,就像 @ user542833说的那样,这是因为 windows 缓存和你应该删除你的 windows Credential Manager中的 Github 凭据,当你再次尝试推送的时候,windows 询问你的凭据并重新设置它

对我有效的方法是使用 Github 回购的 Https URL 而不是 URL。我转到 Github 项目页面,将 https URL 复制到剪贴板中,然后将其粘贴到下面的第二个命令中:

git remote rm origin
git remote add origin https://[...]

我也遇到过类似的问题,结果发现问题在于公钥文件在最后一行包含了我的电子邮件地址。它似乎覆盖了我的配置中的 User 设置。只要我把我的电子邮件从。发布文件(并重新上传到我的回购) Git 连接使用正确的用户。

真讨厌!

问题:

  1. 在 Git hub 上创建一个回购协议
  2. 对本地机器进行克隆
  3. 不能按403。

由于不明原因 git push 使用了错误的用户。我有几个不同的 git hub 用户 ID。我在两家不同的公司工作,还有学生证

我正在做一个苹果电脑,这是我最后做的

1)删除 credential.helper

  • 凭据助手是如何设置为 osxkeychain 的
  • 当我启动密钥链,点击登录,密码和搜索 github 我发现3个条目。我不知道钥匙链是怎么知道该用哪个的

您需要找出 credential.helper 的配置位置

git config --local credential.helper
git config --global credential.helper
git config --system credential.helper

一旦找到正确的图形文件,删除它如下

git config --global --unset credential.helper

现在,在我的本地回购中,我破解了. git/config 文件

我变了

    url = https://github.com/aedavids/lab3RotationProject.git

    url = https://myGitHubUserId@github.com/aedavids/lab3RotationProject.git

在我的特殊情况下,问题是我使用 .netrc访问 github.com,并且它配置了来自不同用户的令牌:

machine github.com login <another-user-token>

刚刚花了6个小时的时间弄清楚这一点,当试图推到一个新的 GitHub 页面回购一个新的帐户。

即使在设置了 config user.name 和 user.email 之后,它也会默认设置为我的主帐户。

这是因为 ssh 键将默认为 id _ rsa (我的主帐户)。

使用我不得不运行的新帐户:

ssh-add ~/.ssh/my_new_key

这将使 git 在按下时使用新键。

首先在 Windows 中转到此路径
开始—— > 控制面板—— > 用户帐户—— > 管理您的凭证—— > Windows 凭证

从 git 中删除凭据: https://github.com

然后添加您的 GitHub 帐户用户名和密码,从中可以将代码推送到相同的位置。

要检查 git 是否会从您添加的用户名中推出,现在在 gitbash 中输入以下命令。

git config user.name

这将显示 git 将从中推送的用户名。如果用户名正确,那么问题就解决了。

对我来说,这并没有解决问题,它仍然显示我以前的帐户用户名,我删除了。

现在,在 gitbash 中输入要从其中推入以下命令的帐户的用户名和电子邮件 ID。

git config --global user.name your_username
git config --global user.email your_emaiid

这将改变用户。
在推送任何代码之前,可以使用以下命令再次验证用户是否已更改。

git config user.name

@ bolun-zhang 的评论帮助我最终解决了这个问题:

“ github 通过它看到的 ssh 键识别您,而不是通过 git 的任何设置”

恕我直言,这是不准确的,非常误导/错误的。当您使用 SSH 与 github 交互时,SSH 将检查权限。但是,github 根据电子邮件 gitconfig 确定提交的作者,而不管 SSH 键是什么。

对我来说,这是完全准确的。不管我在 ~/.ssh/config中设置了什么,甚至使用: export GIT_SSH_COMMAND="ssh -i ~/.ssh/some-key",一个替代用户名仍然被选中。

问题和解决方案是 git config user.email与另一个 github 用户的备用电子邮件匹配。

删除了来自其他 github 用户的邮件之后,提交工作正常。

最终,正如@venkatesh-murugesh 所指出的,你需要设置:

git config user.email

匹配应该拥有提交的 github 用户帐户的电子邮件地址。

当然,您需要使用 ~/.ssh/configGIT_SSH_COMMAND来确保 SSH 使用了正确的密钥。用以下方法测试:

ssh -T git@github.com

我在 VisualStudio 代码中通过远程 SSH 运行 git 时遇到过类似的问题。原来 VSCode 在默认情况下将自己设置为身份验证处理程序,并将 $GIT_ASKPASS设置为脚本($HOME/.vscode-server/bin/*/extensions/git/dist/askpass.sh) ,用于设置/覆盖 git 凭据。

这可以通过将 git.terminalAuthentication设置为 false(又名。Git: 终端认证) ,并有效地从终端删除 ABc2环境变量。

无论我怎么尝试,我都无法在 github 上更改名称,因为提交本身需要一个不同的作者:

Git 提交——修正—— Author = “ Author Name email@address.com”

现在提交显示了正确的帐户。

我这边也有同样的问题。

解决办法很简单:

打开本地或全局 git 配置文件, 并明确提供 [author]电子邮件。

enter image description here

可能是因为远程 URL 错误。您可以使用: git remote -v进行检查。

  • 坏: git@github.com:<user>/<repo>.git
  • git@<user>:<user>/<repo>.git

取而代之的是:

git remote remove origin
git remote add origin git@<user>:<user>/<repo>.git

这件事已经烦了我两年了,我今天终于花时间想明白了。我强行推动的任何东西都会显示为由 GitHub 网站上的不同用户推动的,或者由 CircleCI 网站上的不同用户触发的。罪魁祸首似乎是我的本地回购协议,懒惰地创建通过 Code > Open with GitHub Desktop从我的分叉 GH 网站,都使用 HTTPS。

如果你像我一样,你的遥控器应该是这样的:

> git remote -v
origin  https://github.com/USERNAME/REPO.git (fetch)
origin  https://github.com/USERNAME/REPO.git (push)
upstream    https://github.com/ORG/REPO.git (fetch)
upstream    https://github.com/ORG/REPO.git (push)

然后我:

  • 运行 git config --system --unset credential.helper来清除我的 HTTPS 凭据; 这可能没有必要,所以您可以尝试跳过它,除非您处于存储了一些坏的/无效的凭据的场景中。
    • 如果你使用的是 Mac OS,你也可以打开 Keychain 应用程序,查看/修改/删除存储在你的登录密钥链中的个人 GitHub.com 网络密码凭证。这些凭证的访问控制选项卡将显示一个名为 git-credential-osxkeychain的终端小图标,在“总是允许访问...”下面
    • 或者,你也可以通过 Git 凭证-osxkeychain在终端机上玩它们
  • 通过运行 ssh -T git@github.com确保我设置了 SSH,它打印了一个响应,确认我已经通过身份验证。
  • 重新配置了我的遥控器,使用我的 fork 上的 SSH url:
> git remote remove origin
> git remote add origin git@github.com:USERNAME/REPO.git
> git remote remove upstream
> git remote add upstream git@github.com:ORG/REPO.git


# Shorter alternative:
> git remote set-url origin git@github.com:USERNAME/REPO.git
> git remote set-url upstream git@github.com:ORG/REPO.git

您的下一个请求可能会告诉您重新设置您的上游跟踪分支(如果您不熟悉,错误消息将打印该分支的语法)。

我怀疑强制推送事件是通过凭证归属于用户的,并且在从 HTTPS 克隆版本推送时识别用户存在一些问题; 为了防止在推送不能归属于用户时出现完全失败的体验,GH 方面可能有一些逻辑,任意选择一个组织用户来归属事件。像确保一个作者被设置(即使我的用户信息在提交日志中显示为作者非常好)这样的事情对我不起作用; 他们不会解决这个问题是有道理的,因为推送可能包含来自不同作者的许多新提交。这个故事的寓意总是使用 SSH。


注意: 要小心那些告诉您更新 git 配置以自动用 SSH 存储库 URL 替换 HTTPS 存储库 URL 的解决方案。有些事情的处理方法将会非常混乱,比如私有回购协议中的自制水龙头(到2021年为止,该协议仍然只支持 HTTPS)。

使用这个命令,您可以很容易地推到另一个用户名下的 git。

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

我在使用几个 github 帐户时遇到了同样的问题,尽管推送请求通过了正确的用户名,但是在 github 用户上设置了 --global配置中使用的主帐户。

因此,简单的修复方法就是使用本地配置: git config --local user.email second_account_account

解决了我的问题。

这就是为 ssh url 调试和修复它的方法

首先,检查哪个用户通过 ssh:

ssh -T git@github.com

您好 <your_current_github_username>! 您已经成功地进行了身份验证,但是 GitHub 不提供 shell 访问。

用以上 your_current_github_username登录 GitHub 检查所有配置的 ssh 键: < a href = “ https://github.com/sets/keys”rel = “ nofollow norefrer”> https://github.com/settings/keys

方法一:

your_current_github_username中删除 ssh 键

方法二:

  • 确定哪个键与 your_current_github_username相关联

    cat ~/.ssh/id_*.pub
    
  • 假设 id_rsa是您的目标 github 用户名的 SSH 键,在您的情况下,它可能是一个不同的文件名。

    eval "$(ssh-agent -s)" && ssh-add ~/.ssh/id_rsa
    

方法三:

如果在您的计算机上没有找到公钥(或者您已经丢失了公钥) 然后通过 ssh-keygen创建一个新的 ssh 键,并将其放置在这里: ~/.ssh/id_new_keyyyy

eval "$(ssh-agent -s)" && ssh-add ~/.ssh/id_new_keyyyy

在我看来,Github CLI是解决办法:

gh auth login

然后:

  1. GitHub.com
  2. 是的
  3. HTTPS
  4. 是的
  5. 用网页浏览器登入

在 win10上向新的 git repo 添加新的 ssh 键的步骤:

  1. 生成并保存 ssh 密钥对。Ssh 目录。我假设您以正确的形式创建了它们,因为腻子 gen 在默认情况下可以生成有趣的键类型。
  2. 您应该在 ssh 目录中有一个配置文件(如果还不存在,将其添加为. ssh/config) :

主机 github.com//这是您的主默认键; 删除注释
主机名 github.com
用户 git
IdentityFile ~/. ssh/id _ rsa//当前主键; 删除注释

主持任何你想要的主持人昵称
主机名 github.com
用户 git
IdentityFile ~/. ssh/id _ rsa _ second-key//path to new key; 删除注释

  1. 在您的存储库中,您需要第二个密钥

Git config user.name username-from-second-account
Git config user.email-from-second-account

  1. 现在使用前面设置的主机昵称和新帐户的用户名和回购名更改存储库中的原始信息:

Git 远程删除原点
Git Remote 添加起源 git@whatever-host-name-you-want: username-from-second-account/itory-name. git

你应该可以走了。