[英]Cannot push to Git repository on Bitbucket
我创建了一个新的存储库,但遇到了一个奇怪的错误。 我之前在 Bitbucket 上使用过 Git 但我刚刚重新格式化,现在我似乎无法让 Git 工作。 提交后,我不得不将我的 email 和名称添加到全局变量中,但随后它提交得很好。
当我尝试使用命令时
git push origin master
它不起作用。 我收到这条消息:
$ git push origin master
Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
我在这里不知所措。 我与之共享此存储库的朋友,可以很好地访问它并很好地推送它,但我似乎无法让它工作。
为那些刚开始在 Windows 上使用 Git 和 BitBucket 并且不熟悉 Bash 的人编写这篇文章(因为在搜索问题中的错误消息时,这既是一个常见问题,又是一个高排名的谷歌结果)。
对于那些不介意 HTTPS 并且正在寻找快速解决方案的人,请滚动到此答案的底部以获取有关“懒惰”下的说明
对于那些希望解决实际问题的人,请按照以下说明操作:
尽快修复 SSH 问题
这是从 VonC 链接的 URL 派生的一组指令。 它被修改为尽可能有弹性和简洁。
不要输入$
或任何不以$
开头的行( $
表示这是您在 GitBash 中输入的内容)。
打开 GitBash
如果您还没有设置您的全局信息:
$ git config --global user.name "Your Name"
$ git config --global user.email "you@example.com"
检查 OpenSSH:
$ ssh -v localhost
OpenSSH_4.6p1, OpenSSL...
看到类似的东西了吗?
查看您是否已经生成了密钥:
$ ls -a ~/.ssh/id_*
如果有两个文件,可以跳过下一步。
$ ssh-keygen
将所有内容保留为默认值,输入密码。 您现在应该使用此命令查看结果:
$ ls -a ~/.ssh/id_*
检查现有的配置文件:
$ ls -a ~/.ssh/config
如果得到结果,请检查此文件中的错误信息。 如果不存在文件,请执行以下操作:
$ echo "Host bitbucket.org" >> ~/.ssh/config
$ echo " IdentityFile ~/.ssh/id_rsa" >> ~/.ssh/config
确认内容:
$ cat ~/.ssh/config
Host bitbucket.org
IdentityFile ~/.ssh/id_rsa
每次运行 GitBash 时检查是否启动了 SSH 代理:
$ cat ~/.bashrc
start_agent
的函数,则这一步已经完成。在 GitBash 中输入以下内容以创建 .bashrc 文件:
$ echo "SSH_ENV=$HOME/.ssh/environment" >> ~/.bashrc
$ echo "" >> ~/.bashrc
$ echo "# start the ssh-agent" >> ~/.bashrc
$ echo "function start_agent {" >> ~/.bashrc
$ echo " echo \"Initializing new SSH agent...\"" >> ~/.bashrc
$ echo " # spawn ssh-agent" >> ~/.bashrc
$ echo " /usr/bin/ssh-agent | sed 's/^echo/#echo/' > \"\${SSH_ENV}\"" >> ~/.bashrc
$ echo " echo succeeded" >> ~/.bashrc
$ echo " chmod 600 \"\${SSH_ENV}\"" >> ~/.bashrc
$ echo " . \"\${SSH_ENV}\" > /dev/null" >> ~/.bashrc
$ echo " /usr/bin/ssh-add" >> ~/.bashrc
$ echo "}" >> ~/.bashrc
$ echo "" >> ~/.bashrc
$ echo "if [ -f \"\${SSH_ENV}\" ]; then" >> ~/.bashrc
$ echo " . \"\${SSH_ENV}\" > /dev/null" >> ~/.bashrc
$ echo " ps -ef | grep \${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {" >> ~/.bashrc
$ echo " start_agent;" >> ~/.bashrc
$ echo " }" >> ~/.bashrc
$ echo "else" >> ~/.bashrc
$ echo " start_agent;" >> ~/.bashrc
$ echo "fi" >> ~/.bashrc
验证文件是否已成功创建(您的文件应该只在“您的用户名”出现的地方有所不同):
$ cat ~/.bashrc
SSH_ENV=/c/Users/yourusername/.ssh/environment
# start the ssh-agent
function start_agent {
echo "Initializing new SSH agent..."
# spawn ssh-agent
/usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"
echo succeeded
chmod 600 "${SSH_ENV}"
. "${SSH_ENV}" > /dev/null
/usr/bin/ssh-add
}
if [ -f "${SSH_ENV}" ]; then
. "${SSH_ENV}" > /dev/null
ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
start_agent;
}
else
start_agent;
fi
.bashrc
- .bash_profile
是。 要解决此问题,请将此代码段放在您的.bash_profile
: [[ -s ~/.bashrc ]] && source ~/.bashrc
如果你没有输入密码,你会在启动 GitBash 时看到如下内容:
Initializing new SSH agent...
succeeded
Identity added: /c/Users/yourusername/.ssh/id_rsa (/c/Users/yourusername/.ssh/id_rsa)
以下应返回结果:
$ ssh-add -l
但是,如果您从ssh-add -l
获得以下信息:
Could not open a connection to your authentication agent.
它没有产生 SSH 代理,您的 .bashrc 可能是原因。
如果在启动 GitBash 时,您看到:
Initializing new SSH agent...
sh.exe": : No such file or directory
这意味着您在回显到文件时忘记用 \\ 转义 $(即变量已扩展)。 重新创建您的 .bashrc 来解决这个问题。
验证代理正在运行并且您的密钥已添加:
$ ssh-add -l
应该返回与此类似的内容:
2048 0f:37:21:af:1b:31:d5:cd:65:58:b2:68:4a:ba:a2:46 /Users/yourusername/.ssh/id_rsa (RSA)
运行以下命令以获取您的公钥:
$ cat ~/.ssh/id_rsa.pub
(它应该返回以“ssh-rsa ......”开头的内容
ssh-rsa
位和结尾的== youremail@yourdomain.com
位)CTRL+A
然后CTRL+C
再次将公钥复制到剪贴板。通过执行以下步骤,使用 BitBucket 配置您的私钥:
Global Public Key
Global Public Key
条目现在应该在您的密钥列表中可见。
检查您的遥控器:
$ git remote -v
切换到 SSH 网址:
$ git remote set-url origin git@bitbucket.org:youraccount/yourproject.git
检查事情是否正常:
$ git remote show origin
您应该会看到如下内容:
Warning: Permanently added the RSA host key for IP address '...' to the list of known hosts.
* remote origin
Fetch URL: git@bitbucket.org:youruser/yourproject.git
Push URL: git@bitbucket.org:youruser/yourproject.git
HEAD branch: master
Remote branch:
master tracked
Local ref configured for 'git push':
master pushes to master (fast-forwardable)
完毕!
您可以选择使用 HTTPS 而不是 SSH。 它将要求您在远程操作期间输入您的密码(您输入一次后它会被临时缓存)。 以下是配置 HTTPS 的方法:
对于懒人
您应该按照 VonC 的描述修复 SSH 问题; 但是,如果你在赶时间承诺和没有工具/时间/知识,现在生成一个新的公用密钥,请将您的起源到HTTPS选择:
> https://accountname@bitbucket.org/accountname/reponame.git
使用 GUI 工具,例如TortoiseGit或命令行工具。
如果原点不存在,则添加原点的命令行:
git remote add origin https://accountname@bitbucket.org/accountname/reponame.git
更改现有原点的命令行:
git remote set-url origin https://accountname@bitbucket.org/accountname/reponame.git
注意:您的帐户名称不是您的电子邮件。
您可能还想设置您的全局信息:
git config --global user.name "Your Name"
git config --global user.email "you@example.com"
然后再次尝试推送(无需再次提交)
git push origin master
如果您忘记将私钥添加到ssh-agent
也会发生此错误。 这样做:
ssh-add ~/.ssh/id_rsa
我必须将我的密钥添加到工作区,而不是“每个存储库”的基础。
由于这些键是只读的,工作区的键允许推送。
bitbucket.org/<my-workspace>/workspace/settings/ssh-keys
请务必从子存储库中删除相同的密钥,否则您将无法将其添加到工作区。
原始答案(2013):
重新格式化意味着您可能删除了您的公共和私人 ssh 密钥(在 ~/.ssh 中)。
您需要重新生成它们并在您的 BitBucket 配置文件上发布您的公共 ssh 密钥,如“ 使用 Bitbucket 使用 SSH 协议”中所述,“ 使用 GitBash 为 Git 设置 SSH ”。
账户->管理账户->SSH 密钥:
然后:
我通过使用命令删除遥控器解决了这个问题:
git remote remove origin
然后尝试使用 https url 而不是 ssh 添加远程
git remote add origin httpsUrl
它要求提供 github 凭据。 输入凭据,然后尝试使用以下命令推送到 git:
git push origin master
只需要 ~/.ssh 目录下的配置文件
参考: https : //confluence.atlassian.com/bitbucket/set-up-ssh-for-git-728138079.html
在配置文件中添加波纹管配置
Host bitbucket.org
IdentityFile ~/.ssh/<privatekeyfile>
我有同样的问题。 我的 SSH 密钥设置正确。 我像这样解决了这个问题。
在 Bitbucket 中创建新项目后,使用 clone。 在终端中输入克隆命令,它应该将空项目克隆到您的计算机。 之后,您可以将文件复制到此目录并开始提交并推送到 bitbucket。
两个小的澄清可能会挽救某人我所经历的困惑:
通过 https 连接时,您使用
https://your_account_name@bitbucket.org/owner-account/repo-name.git
"git"但是当通过 SSH 连接时,帐户名“git”
ssh://git@bitbucket.org/owner-account/repo-name.git
尝试使用前面的帐户名连接到 SSH 会导致原始发布者收到的错误。 这是您如何进行连接到 git@ 的测试,然后错误地尝试使用您的用户名并看到错误。
如果您在团队帐户上设置 SSH 密钥,他们建议将它们切换到个人帐户。 避免e的有用提示
这可能不是每个人的情况,但我仍然在这里回答,以防有人有同样的原因。 基本上我有两个 Bitbucket 帐户,每个帐户都有两个不同的公钥。 通过运行ssh -Tv bitbucket.org
我设法看到我的笔记本电脑发送了不正确的密钥(但由于两个公钥都在 bitbucket 中注册,该密钥仍然被批准,然后因为该密钥链接到另一个没有访问权限的帐户到我正在推送的回购,推送被拒绝)。
所以我遵循了本指南,我的问题消失了: https : //blog.developer.atlassian.com/different-ssh-keys-multiple-bitbucket-accounts/
如果您使用的是 SourceTree(我使用的是 2.4.1),我找到了一种更简单的方法来生成 SSH 密钥并将其添加到我的 Bitbucket 设置中。 这为我解决了这个问题。
我收到了一封来自 Bitbucket 的确认电子邮件,表明 SSH 密钥已添加到我的帐户中。
作为参考,在 macOS 上,使用终端,您可以使用以下命令查看为您的设备生成的密钥。 这是您生成的密钥的存储位置。
ls -la ~/.ssh
正如其他人所说,此文档对我有帮助: 将 SSH 协议与 Bitbucket Cloud 一起使用
我正在使用 macOS,虽然我在下次尝试推送时在 bitbucket 中设置了我的公钥
存储库访问被拒绝。
致命:无法从远程存储库读取。
请确保您拥有正确的访问权限并且存储库存在。
我必须做的是第 2 步。如Bitbucket SSH 密钥设置指南中所述,将密钥添加到 ssh-agent ,尤其是第 3 步:
(仅限 macOS)为了让您的计算机在每次重新启动时记住您的密码,打开(或创建) ~/.ssh/config 文件并将这些行添加到文件中:
主持人 *
使用钥匙串 是
希望它可以帮助遇到相同问题的 mac 用户。
像在 Atlassian 教程中一样完成 ssh 并确保将私钥粘贴到配置文件中,而不是存储库中:)
Git 已经更改了它的一些 repo 指令 - 检查您是否已将本地 repo 连接到 Git 云 - 检查这些步骤中的每一个,看看您是否遗漏了任何步骤。
Git 文档 [https://docs.github.com/en/free-pro-team@latest/github/authenticating-to-github/connecting-to-github-with-ssh] 如果您更喜欢以下文档 - 它很远更详细和值得阅读以了解为什么总结了以下步骤。
我的 Git 清单:-
$rm -rf .git
取消跟踪 git,它会递归地删除 gitwhich git
/usr/local/bin/git
- 如果您使用 Homebrew $brew install git
$git config --global user.name "Your Name"
$git config --global user.email "you@example.com"
$git config --global core.ignorecase false
如果你犯了一个错误,你可以更新文件$ls -a
来定位文件,然后$open .gitignore
并编辑它,保存并关闭。
ssh-keygen -t rsa -C "your_email@example.com"
生成新的 SSH 密钥 保存密钥ssh-add ~/.ssh/id_rsa
您也可以通过单击您的个人资料图片和左侧导航栏中的编辑键来找到它。
使用终端命令将您的密钥复制到剪贴板: pbcopy < ~/.ssh/id_rsa.pub
在Title字段中输入可以识别您的机器的内容,例如YOUR_NAME 的 MacBook Air
在Key字段中,只需按cmd + V粘贴您之前创建的键 -不要在键中添加或删除字符或空格
单击添加密钥并通过键入以下内容检查终端中的一切正常: ssh -T git@github.com
您应该看到以下消息:
Hi YOUR_NAME! You've successfully authenticated, but GitHub does not provide shell access.
现在您的本地机器已连接到云,您可以在线或在本地机器上创建一个 repo。 Git 已将分支 main 的名称更改为 master。 链接 repos 时,使用 HTTPS 密钥比使用 SSH 密钥更容易。 虽然您最初需要 SSH 来链接存储库以避免问题中的错误。
Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
按照您现在在存储库中获得的步骤进行操作 - GitHub 添加了一个额外的步骤来创建一个分支(写作时间 2020 年 10 月)。
在命令行上创建一个新的存储库 echo "# testing-with-jest" >> README.md git init git add README.md git commit -m "first commit" git branch -M main git remote add origin — (使用HTTPS url 不是 SSH) git push -u origin main
从命令行推送现有存储库 git remote add origin (使用 HTTPS url 而不是 SSH) git branch -M main git push -u origin main
如果你弄错了,你总是可以通过从本地机器$rm -rf .git
的 git 文件夹中删除初始化并重新开始来重新开始 - 但首先检查是否没有遗漏上述步骤并且始终是有用的最好的真相来源是文档——即使阅读和理解需要更长的时间!
我在一个存储库中遇到了同样的错误 - 突然间,当我尝试推送提交时,所有其他存储库都可以正常工作。 问题似乎出在 SSH 密钥上(正如您从之前的评论中已经知道的那样) - 在 bitbucket 上转到View Profile
然后单击Manage Account
。
在左侧单击SSH Keys
然后在 ~/.ssh/ 目录下添加您系统上的SSH Keys
。
如果您还没有生成 - 使用其中一篇文章中的说明,但请确保您使用默认的 id_dsa.pub 文件或自定义命名的文件,稍后需要-i
选项和密钥的路径当你连接即
ssh -i ~/.ssh/customkeyname username@ip_address
一旦您在 bitbucket 上将本地密钥添加到您的帐户,您就可以开始与您的存储库进行交互。
我发现最适合我的解决方案是将推送分解成更小的块。
并从提交中删除大屏幕截图图像文件(10mb+)
安全性最终不是问题,更多是关于 bin 文件的限制
当存储库不存在时,也会显示此错误。 我尝试了所有的答案,直到我看到 repo 名称缺少一个破折号
对于错误:
[错误]存储库访问被拒绝。 通过部署密钥访问是只读的。 致命:无法从远程存储库读取。 请确保您拥有正确的访问权限并且存储库存在。
[错误]致命:无法从远程存储库读取。
[错误]致命:无法找到“https”的远程助手
我按照以下步骤解决了:
首先安装这个依赖项:
$ yum install expat expat-devel openssl openssl-devel
然后删除git:
$ yum remove git git-all
现在在最新版本上构建并安装 Git,在这种情况下:
$ wget https://github.com/git/git/archive/v2.13.0.tar.gz
$ tar zxf v.2.13.0.tar.gz
$ cd git-2.13.0/
然后对于配置:
$ make configure
$ ./configure --with-expat --with-openssl
最后像这样安装:
$ make
$ make install install-doc install-html install-info
就是这样,现在用 https 配置你的仓库:
$ git remote add origin https://github.com/*user*/*repo*.git
# Verify new remote
$ git remote -v
如果您在远程服务器中配置了 ssh 密钥,则必须将其删除。
我收到这个错误
远程主机关闭了与 bitbucket.org 的连接。 致命:无法从远程存储库读取。 请确保您拥有正确的访问权限。
然后我试过了
git config --global user.email "you@example.com"
没有引号。
我发现 git 命令行不喜欢我的选美生成的密钥(Windows 10)。
请参阅我对Serverfault 的回答
这可能是由于 SSH 代理(和/或 BitBucket)中有多个 SSH 密钥造成的。 检查Atlassian 文档以了解解决方法
我有这个问题,我以为我疯了。 我已经使用 SSH 20 年了。 和 git over SSH 自 2012 年以来......但为什么我不能在我的家用电脑上获取我的 bitbucket 存储库?
好吧,我有两个 bitbucket 帐户,并且在我的代理中加载了 4 个 SSH 密钥。 即使我的 .ssh/config 配置为使用正确的密钥。 当 ssh 初始化连接时,它按顺序使用它们加载到代理中。 所以我正在登录我的个人 bitbucket 帐户。
然后在尝试获取 repo 时遇到 Forbidden 错误。 说得通。
我从代理处卸载了密钥
ssh-add -d ~/.ssh/personal_rsa
然后我可以获取回购。
...后来我发现我可以强制它只使用指定的身份
Host bitbucket.org-user2
HostName bitbucket.org
User git
IdentityFile ~/.ssh/user2
IdentitiesOnly yes
我不知道最后一个选项IdentitiesOnly
来自 bitbucket 文档本身
https://blog.developer.atlassian.com/different-ssh-keys-multiple-bitbucket-accounts/
Just navigate to your source project, open.git folder, open the config file with notepad++ (or any other text editor) and compare the two git's URL on this file with the URL on your source git. 它解决了我的问题。
试一试
git remote add origin <HTTP URL>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.