我找到了 GitKraken,它看起来很酷,而且我从来没有遇到过与 SourceTree 不同的 index.lock 问题。唯一的问题是我无法推拉到另一个房间的服务器。我已经配置了我的 ssh 密钥和那个。我可以推/拉到 github/bitbucket 帐户,但不能推/拉到隔壁房间。如果您遇到过此类问题,或者您对我如何解决我的问题有一点想法,请告诉我。我已经与支持团队取得了联系,但回复非常少。
13 回答
似乎在我的 Mac 上,如果我不运行,ssh-add -k ~/.ssh/id_rsa
那么我会收到有关 ssh 密钥错误的错误。
这似乎也适用于 Ubuntu (18.04)。
已经有很多答案了,我认为其中大多数都非常有帮助。我仍然会在这里添加更多信息,因为我认为任何答案都无法真正解决问题。
这就是我从一开始就坐在 MacOS 上解决它的方法。
- 运行
ssh-keygen
以生成密钥。我确实提供了密码。 - 运行
ssh-add -K ~/.ssh/id_rsa
以将我的身份保存在我的本地 ssh 代理中。这个很重要。请注意这里是一个大写的-K,这意味着我也想将我的密码存储在本地 ssh 代理中,这将导致它把我的密码存储在钥匙串中,所以我不需要一直重新输入它,井井有条! - 在 Gitkraken中,转到“Preferences -> authentication... -> General”
- 选中“使用本地 SSH 代理”。这将告诉 Gitkraken 在步骤 2 中使用我的代理。如果您不这样做,那么 Gitkraken 将使用它自己的捆绑 ssh 代理,我认为这对大多数人来说是导致问题的原因
- 将您的
~/.ssh/id_rsa.pub
公钥添加到您的服务器(bitbucket.org、azure devops、github 或 w/e)。 - 现在,当您
git fetch
从终端执行或从 Gitkraken 执行 git fetch 时,它应该都可以工作。Gitkraken 将使用您的计算机自己的 ssh 代理,我们已配置该代理来成功验证我们的身份。
希望这会有所帮助。
更新:我还必须在其中包含ssh-add -K ~/.ssh/id_rsa
以~/.bash_profile
使其自动加载,否则您必须在每次计算机重新启动时运行该命令。
在 macOS 上,我有一个私钥/公钥对,GitKraken 成功地使用它来推送到 bitbucket 存储库。公钥文件 ~/.ssh/id_rsa.pub 格式类似于 Josh Patterson 的回答:
ssh-rsa AAAAB3NzaC1yc2...8swZ0Ew==
我创建了第二个 bitbucket 存储库。在某些时候 gitKraken 无法再推送到第一个 repo。我仍然可以从终端命令行 git push 到第一个 repo,手动输入密码。
GitKraken 说“配置的 SSH 密钥格式无效。请确保您的密钥有效并且是 RSA 类型的密钥。”
与 Coming Sun 的回答类似,我去了 GitKraken Preferences/Authentication/General。与 Coming Sun 的回答不同,我已经有一个私钥/公钥,并且不想生成一个新对。相反,我选择了“使用本地 SSH 代理”。这为我修复了 GitKraken。
- GitKraken -> 首选项 -> 身份验证 -> 生成新的私钥/公钥;
- 将新公钥添加到您的 git 服务器。
我通过使用 gabeios 答案的组合以及打开和关闭“使用本地 ssh 代理”选项(gitkraken 首选项>身份验证>“使用本地 ssh 代理”)来让我的工作。
我将其关闭并尝试了 gabeios 答案,但它不起作用,但随后将其打开并再次尝试使用 gabeios 答案。出于某种原因,两者的某种组合对我有用。我在mac上。希望能帮助到你。
因此,如果这有助于其他人(或者一旦我忘记了),GIT Kraken 似乎对其公钥格式非常挑剔,并且不支持我对标准格式的看法。我通常会看到如下所示的键:
---- BEGIN SSH2 PUBLIC KEY ----
Comment: "rsa-key-20181204"
AAAAB3NzaC1yc2EAAAABJQAAAQEA5kpsxjtSZ4kMyKIBy0ASQShN/BSAEa7d4lrL
...
hA2TX0L2fLKDkpzCngkDgGbLDxj5dXTN4gpnZdr7lzMciFQu0uhfTLmeYgi1nFOi
KfJ+cQWg3uOHQ0zd8/2GyvfARWy3nZDFoLSQTrbErkX8swZ0Ew==
---- END SSH2 PUBLIC KEY ----
Git Kraken 似乎坚持这种格式:
ssh-rsa AAAAB3NzaC1yc2...8swZ0Ew==
您可以看到这是“相同”的密钥,但它需要采用更简单的格式才能让 Git Kraken 满意。
谢谢,乔什
首选项... > 身份验证
我只需要切换到
[ ] 使用本地 SSH 代理
而不是使用我的本地 ssh 的路径
我有很多用于多个项目的密钥,并且已经在另一个地方很好地管理~/.ssh/config
和/或~/.gitconfig
不想在另一个地方跟踪/引用它们的身份!
到目前为止,大多数工作答案都需要我的键和定义,~/.ssh/config
然后还添加对ssh-add -K ~/.ssh/...
in的引用/调用~/.bash_profile
和/或~/.profile
两者都不理想。
我正要创建一个函数来插入~/.bash_profile
和/或~/.profile
遍历其中的所有键和子文件夹,~/.ssh/*/...
因此至少我不需要记住在那里添加新键。
然后我在这里找到了这个漂亮的方法,我需要做的就是为我想要自动添加到 ssh-agent 的任何凭据添加额外的AddKeysToAgent yes
指令:~/.ssh/config
Host *
AddKeysToAgent yes
UseKeychain yes
IdentityFile ~/.ssh/[your-secure-ssh-key-name]
注意:这仍然需要您ssh-add -K ~/.ssh/[your-secure-ssh-key-name]
至少运行一次才能将密码存储在钥匙串中。否则,您可以省略UseKeychain yes
,并且在使用密钥时会提示您输入密码。
这将在重新启动后持续存在,并且对于 CLI 以及 GitKraken 等应用程序来说“神奇地工作”。
当密钥没有密码时,该UseKeychain yes
指令也可以省略,您不需要将该指令应用于所有主机。以下是使用子域通配符捕获由同一提供商托管的多个项目的特定主机示例:
Host project1.myrepo.com
User git
PreferredAuthentications publickey
IdentityFile ~/.ssh/myrepo.com/project1
AddKeysToAgent yes
UseKeychain no
Host *.myrepo.com
User git
PreferredAuthentications publickey
IdentityFile ~/.ssh/myrepo.com/[your-secure-ssh-key-name]
AddKeysToAgent yes
UseKeychain yes
Host git-codecommit.*.amazonaws.com
User ABC1234DEFGHI1234
IdentityFile ~/.ssh/[your-secure-ssh-key-name]
AddKeysToAgent yes
Host *
AddKeysToAgent no
UseKeychain no
IdentityFile ~/.ssh/id_rsa
gabeio 的回答有效。为了避免ssh-add -K ~/.ssh/id_rsa
每次都在终端中调用,可以将其添加到配置文件中。
你可以把它放到~/.bash_profile
:
放入
ssh-add -K ~/.ssh/id_rsa
你的~/.bash_profile
但它需要打开终端来执行这一行。
就我而言,我将其添加到/etc/profile
. ssh-add -K ~/.ssh/id_rsa
在 的底部添加行/etc/profile
。以下是终端中的说明:
- 更改文件的权限,
$sudo chmod 644 /etc/profile
- 编辑文件,
$sudo nano /etc/profile
- 在文件底部添加这一行,
ssh-add -K ~/.ssh/id_rsa
. - 关闭并保存文件
- 重启。
它对我有用,而无需每次都打开终端。希望它可以提供帮助。
如果您尝试访问Github中的存储库,但它不起作用。
这对我有用:
首先,看看你的存储库中是否有“写权限”
(Setting -> Manage Access)
如果错误仍然存在:
在 Gitkraken 中断开 Github 帐户
(File-> Preferences -> Authentication -> Github -> Disconnect)
在 Github 中撤销对 Gitkraken 的访问
(Settings-> Applications -> Authorized Oauth Apps -> Gitkraken -> Revoke)
再次将 Gitkraken 连接到 Github
(make sure that you give permission to all your repositories)
我希望这对你有帮助:)
Make sure your remote is set correctly. Gitkraken will allow you to clone by pasting in the "git clone" command but it will erroneously set that as the origin
这适用于 Windows 用户。我的配置是 Win 10,带有 GitKraken v8.2。它可能适用于其他配置,但是 ymmv。
- 如果尚未安装 Putty 和 Pageant,请安装它们。可以在这里找到:http: //www.chiark.greenend.org.uk/~sgtatham/putty/download.html
- 通过转到安装文件夹并双击它来启动 Pageant。或者,打开命令提示符并输入“Pageant”
- 在系统托盘中,找到选美图标,右键单击它,然后单击“添加密钥”。将其指向您拥有的 PPK 文件。
- 在 GitKraken 中,转到 Preferences -> SSH 并选择“Use local SSH Agent”。它现在将使用 Pageant
您现在应该能够使用 SSH 克隆/推送/拉取远程服务器。对于自托管的 git 服务器,请确保使用正确的 url,格式为ssh://{user}@{host}/{repo}
,其中“repo”是主机上的完整路径
在尝试了所有答案之后,即使是我自己后来再次遇到问题时也没有解决的问题,我注意到问题与 SSH 密钥无关,而是与 GitKraken UI 中的给定选项有关(截至撰写本文时的最新版本:7.3.2 )
即使已成功添加 SSH 密钥,尝试使用以下选项进行克隆:File > Clone Repo > Clone with URL (using SSH or HTTPS) 将导致此错误:
Clone Failed
C:\path-to-folder Configured SSH key is invalid. Please confirm that it is properly associated with your Git provider.
但是...它适用于以下选项:File > Clone Repo > Bitbucket.org > Repository to Clone (选择帐户中的存储库之一)。
Successfully cloned repo 'my_repo'
不应该使用 URL选项进行克隆吗?
那好吧...