Jas*_*ahl 136 git bitbucket git-bash
我创建了一个新的存储库,我遇到了一个奇怪的错误.我之前在Bitbucket上使用过Git,但我只是重新格式化了,现在我似乎无法让Git工作.在提交之后,我不得不将我的电子邮件和名称添加到全局变量中,但之后它就提交了.
当我尝试使用该命令时
git push origin master
Run Code Online (Sandbox Code Playgroud)
它不起作用.我收到这条消息:
$ 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.
Run Code Online (Sandbox Code Playgroud)
我在这里不知所措.我和我分享这个存储库的朋友,访问它很好并推到它就好了,但我似乎无法让它工作.
Gra*_*ted 226
为那些刚开始使用Windows上的Git和BitBucket并且不熟悉Bash的人写这个(因为这是一个常见的问题,并且在搜索问题中的错误消息时是一个高排名的Google结果).
对于那些不介意HTTPS并且正在寻找快速修复的人,请滚动到此答案的底部,以获取有关FOR THE LAZY的说明
对于那些希望解决实际问题的人,请按照以下说明操作:
尽快修复SSH问题
这是从VonC链接的URL派生的一组指令.它被修改为尽可能有弹性和简洁.
不要键入$或不以任何开头的行$(这$意味着这是你在GitBash中键入的内容).
打开GitBash
如果您还没有设置全局信息:
$ git config --global user.name "Your Name"
$ git config --global user.email "you@example.com"
Run Code Online (Sandbox Code Playgroud)
检查OpenSSH:
$ ssh -v localhost
OpenSSH_4.6p1, OpenSSL...
Run Code Online (Sandbox Code Playgroud)
看到类似的东西?
看看你是否已经生成了密钥:
$ ls -a ~/.ssh/id_*
Run Code Online (Sandbox Code Playgroud)
如果有两个文件,则可以跳过下一步.
$ ssh-keygen
Run Code Online (Sandbox Code Playgroud)
将所有内容保留为默认值,输入密码.您现在应该使用此命令查看结果:
$ ls -a ~/.ssh/id_*
Run Code Online (Sandbox Code Playgroud)
检查现有配置文件:
$ ls -a ~/.ssh/config
Run Code Online (Sandbox Code Playgroud)
如果得到结果,请检查此文件是否有错误信息.如果不存在文件,请执行以下操作:
$ echo "Host bitbucket.org" >> ~/.ssh/config
$ echo " IdentityFile ~/.ssh/id_rsa" >> ~/.ssh/config
Run Code Online (Sandbox Code Playgroud)
确认内容:
$ cat ~/.ssh/config
Host bitbucket.org
IdentityFile ~/.ssh/id_rsa
Run Code Online (Sandbox Code Playgroud)
检查每次运行GitBash时是否启动SSH代理:
$ cat ~/.bashrc
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
验证文件是否已成功创建(您的文件应仅在"yourusername"出现的位置不同):
$ 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
Run Code Online (Sandbox Code Playgroud)
.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)
Run Code Online (Sandbox Code Playgroud)
以下应返回结果:
$ ssh-add -l
Run Code Online (Sandbox Code Playgroud)
但是,如果您从以下地址获得以下内容ssh-add -l:
Could not open a connection to your authentication agent.
Run Code Online (Sandbox Code Playgroud)
它没有产生SSH代理,你的.bashrc可能是原因.
如果,在启动GitBash时,您会看到:
Initializing new SSH agent...
sh.exe": : No such file or directory
Run Code Online (Sandbox Code Playgroud)
这意味着当回显到文件时(即变量被扩展),你忘了用$转义$.重新创建.bashrc以解决此问题.
验证代理是否正在运行并且您的密钥已添加:
$ ssh-add -l
Run Code Online (Sandbox Code Playgroud)
应该返回类似于此的内容:
2048 0f:37:21:af:1b:31:d5:cd:65:58:b2:68:4a:ba:a2:46 /Users/yourusername/.ssh/id_rsa (RSA)
Run Code Online (Sandbox Code Playgroud)
运行以下命令以获取您的公钥:
$ cat ~/.ssh/id_rsa.pub
Run Code Online (Sandbox Code Playgroud)
(它应该返回以"ssh-rsa ......"开头的内容
ssh-rsa位和尾随== youremail@yourdomain.com位)CTRL+A然后按CTRL+C,将公钥再次复制到剪贴板.通过执行以下步骤配置您的私钥与BitBucket:
Global Public Key标签Global Public Key现在,您的密钥列表中应显示一个条目.
检查你的遥控器:
$ git remote -v
Run Code Online (Sandbox Code Playgroud)
切换到SSH网址:
$ git remote set-url origin git@bitbucket.org:youraccount/yourproject.git
Run Code Online (Sandbox Code Playgroud)
检查事情是否正常工作:
$ git remote show origin
Run Code Online (Sandbox Code Playgroud)
你应该看到这样的东西:
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)
Run Code Online (Sandbox Code Playgroud)
DONE!
您可以选择使用HTTPS而不是SSH.它将要求您在远程操作期间键入密码(在您键入一次后暂时缓存).以下是配置HTTPS的方法:
对于懒惰
你应该修复VonC描述的SSH问题; 但是,如果你在赶时间承诺和没有工具/时间/知识生成一个新的公钥现在,您的原点设置为HTTPS选择:
> https://accountname@bitbucket.org/accountname/reponame.git
Run Code Online (Sandbox Code Playgroud)
使用诸如TortoiseGit或命令行工具之类的GUI 工具.
如果不存在,则添加源的命令行:
git remote add origin https://accountname@bitbucket.org/accountname/reponame.git
Run Code Online (Sandbox Code Playgroud)
用于更改现有原点的命令行:
git remote set-url origin https://accountname@bitbucket.org/accountname/reponame.git
Run Code Online (Sandbox Code Playgroud)
注意:您的帐户名称不是您的电子邮件.
您可能还想设置全局信息:
git config --global user.name "Your Name"
git config --global user.email "you@example.com"
Run Code Online (Sandbox Code Playgroud)
然后再次尝试推送(无需再次提交)
git push origin master
Run Code Online (Sandbox Code Playgroud)
Mat*_*aun 56
如果您忘记添加私钥,也会发生此错误ssh-agent.这样做:
ssh-add ~/.ssh/id_rsa
Run Code Online (Sandbox Code Playgroud)
Von*_*onC 25
重新格式化意味着您可能删除了公共和私有ssh密钥(在〜/ .ssh中).
您需要重新生成它们并在BitBucket配置文件上发布公共ssh密钥,如" 使用带有Bitbucket的SSH协议 "中所述,在" 使用GitBash为Git设置SSH "之后.
帐户 - >管理帐户 - > SSH密钥:

然后:

来自" 将Mercurial/BitBucket与JetBrains软件集成 "的图片
小智 17
我通过删除远程使用命令解决了这个问题:
git remote remove origin
Run Code Online (Sandbox Code Playgroud)
然后尝试使用https url而不是ssh添加远程
git remote add origin httpsUrl
Run Code Online (Sandbox Code Playgroud)
它要求github凭据.输入凭据然后尝试使用以下命令推送到git:
git push origin master
Run Code Online (Sandbox Code Playgroud)
我有同样的问题。我的 SSH 密钥设置正确。我这样解决了这个问题。
在Bitbucket中创建新项目后,使用克隆。在终端中输入克隆命令,它应该将空项目克隆到您的计算机。之后,您可以将文件复制到此目录并开始提交并推送到 bitbucket。
小智 5
只需要 ~/.ssh 目录下的配置文件
ref :https://confluence.atlassian.com/bitbucket/set-up-ssh-for-git-728138079.html
在配置文件中添加波纹管配置
Host bitbucket.org
IdentityFile ~/.ssh/<privatekeyfile>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
128528 次 |
| 最近记录: |