小乌龟使用debug记录(附小乌龟使用步骤总结)
小乌龟使用步骤总结
小乌龟只是简化了项目中后期的仓库管理操作;而仓库最开始的初期配置,还是需要我们通过git bash手动进行配置。
本地创建仓库:文件夹中 -> 右键,小乌龟“创建本地存储库”;
关联本地仓库&远程仓库:
git bash 中执行
git remote add <远程仓库本地代称> <远程仓库 SSH 链接>
;
执行完后,通过执行git remote -v
检查是否关联成功。克隆仓库:在 git bash 中执行
git clone <远程仓库 SSH 链接>
;
之后就可以进行正常的仓库推拉了(大概)
debug记录
【2025/03/16 ~ 2025/03/17】
背景介绍
我尝试通过 SSH 方式进行文件传输。
- 本地仓库已和远程仓库关联。
说明:执行git remote -v
后,会显示远程仓库的本地代称、推拉链接。 - 已配置小乌龟 PuTTY 密钥。
说明:通过(小乌龟配套下载的)PuTTYgen 工具生成 PuTTY 密钥,并配置到远程仓库和小乌龟(.ppk
密钥文件)。 SSH 客户端设为 TortoiseGitPlink 。
问题:当我试图通过小乌龟的“获取”来同步本地仓库&远程仓库时,发现小乌龟显示了执行fetch命令后:
1
git.exe fetch --progress -v --"origin" master...
就卡住不动了,也未成功拉取到远程仓库中的文件。
debug记录
最后解决得比较莫名其妙,主要就将debug过程 & 注意到的点记录一下。
一、查看小乌龟文档
小乌龟的文档对GUI界面进行了详细说明。
设置 - Git - 远端:TortoiseGit’s Settings – TortoiseGit – Remote
但小乌龟的文档看的脑瓜疼。看了一会没啥有用的,就没继续看了。
二、Git Bash测试
因为小乌龟没有显示任何可供 debug 的详细信息,于是我重新试用 git bash,测试 SSH 连接能否成功建立。
包括配对 SSH 密钥(git bash 通过 OpenSSH 生成密钥)、配置 ~/.ssh/config
文件……
三、查看远程仓库文档
发现这个仓库是基于一个叫做“Gogs: A painless self-hosted Git service”的服务搭建的,遂查看仓库文档。
但是冇有用:故障排查 - Gogs。
四、怀疑密钥匹配类型
因为以下错误信息:
1
Unable to negotiate with ...: no matching host key type found. Their offer: ssh-rsa
怀疑到了密钥类型不正确——因为我想到了 SSH 密钥生成时,有分为“RSA”和“SSH-1 (RSA)”两个种类。
后面其实不是(GPT前后两天的回答不一样,以后谨慎辨别)。
五、继续Git Bash测试
git错误&测试指导:Error: Permission denied (publickey) - GitHub Docs
执行命令,查看 SSH 连接时的详细 debug 信息:
1
$ ssh -vT git@git.wpsit.cn:2222
折腾了一会:
你遇到的问题是 OpenSSH 8.8 及以上版本默认禁用了
ssh-rsa
,而服务器只支持ssh-rsa
。(因为不安全) 解决方案是 手动启用ssh-rsa
作为 Host Key 类型。
设置 ~/.ssh/config
按着GPT的意思修修改改,最后成功的设置如下:
1
2
3
4
5
6
7
8
9
10
11
# wpsit
Host git.wpsit.cn
Hostname 123.249.104.242
Port 2222
User git
# 重点是下面三条
# 永久允许ssh-rsa
HostKeyAlgorithms +ssh-rsa
PubkeyAcceptedAlgorithms +ssh-rsa
# 指定特定密钥
IdentityFile ~/.ssh/jinShan2025Test_rsa
测试了半天连接,但一直没返回欢迎信息,还以为连接没成功。
——其实是成功了,标志如下:
1
2
3
4
Authenticated to 123.249.104.242 ([123.249.104.242]:2222) using "publickey".
debug1: channel 0: new session [client-session] (inactive timeout: 0)
debug1: Entering interactive session.
debug1: pledge: filesystem
最后尝试性的执行了$ git clone ssh://git@git.wpsit.cn:2222/ccnu-2026-cpp-tasks.git
,莫名其妙就成功了?!然后小乌龟 push 也成功了……
### 总结
建立 SSH 连接并不难。中间很多次其实已经成功建立连接了,但我不知道——因为概念不明晰脑袋debug到懵掉了,很多时候绕了一大圈之后,发现某个“bug”其实很快就能搞定。
bugs:
服务器没有为
git
用户配置ForceCommand
来强制返回欢迎信息,导致 SSH 连接保持打开状态,等你输入命令。小乌龟 fetch 会卡住。
有篇文章给了我启发——有时候可能是官方的 bug: git 版本大坑之ssh协议clone 时进度卡死在fetch阶段原创
总之偶尔要看下官方的更新和 bug 记录。
Should you encounter other problems, please first search the bug tracker (also look at the closed issues) and the mailing list, chances are that the problem was reported already. Also make sure that you use an up to date Git for Windows version (or a current snapshot build). If it has not been reported yet, please follow our bug reporting guidelines and report the bug.
(最后我还是没有成功使用小乌龟 fetch 过……之后再试试)
知识补充
常见 SSH 密钥类型
以小乌龟自带的 PuTTYgen 为例:
- RSA
- DSA
- ECDSA
- EdDSA
- SSH-1 (RSA)
关于小乌龟的PuTTY密钥
——总之就是一个 SSH 密钥管理工具。
官方文档说明如下:
小乌龟的 PuTTY 密钥管理工具会随着小乌龟客户端打包安装。包括:
- TortoiseGitPlink:SSH 客户端,可于“设置 - 网络”中设置。
- PuTTYgen:SSH 密钥生成器。
小乌龟GUI补充说明
- 远端:远程仓库的本地代称,可通过
git remote -v
在 git bash 中检查。 - URL/推送URL:远程仓库的 SSH 链接。