第一次听到“小乌龟”的时候,我以为是讲宠物养殖,直到对方发来一个绿色的小图标,我才反应过来,说的是TortoiseGit。做Windows开发的,应该没人不认识这只龟——它是Windows上最老牌、最常用的Git图形客户端,右键菜单里点几下就能完成代码的提交、推送、拉取和分支操作。再配上码云(Gitee),国内访问速度快、私有仓库免费、对新手和中小团队都很友好,于是“小乌龟+码云”就成了很多人的第一套代码托管组合。
这篇东西适合刚接触Git、想在Windows上把代码传到码云的入门者,也适合已经装了TortoiseGit但总在SSH和分支上出问题的人。我会从安装开始,把配置、克隆、提交、推送、分支、避坑一次讲完。如果你已经玩得很溜,可以直接跳到后半段的报错排查,看看有没有还没踩过的坑。
1. 小乌龟TortoiseGit是什么,为什么配码云这么火
1.1 图形化Git客户端到底解决了什么问题
Git本身是一个命令行工具,敲指令管理代码版本:git add、git commit、git push、git pull。对天天写命令行的人来说这没什么,但大部分Windows用户并不是每天都在终端里过日子,尤其是刚接触版本控制的同学,面对“暂存区”“工作区”“远程仓库”这一堆概念,很容易在第一步就懵。
TortoiseGit做的事情,就是把这堆命令全部变成鼠标操作。它能把自身集成到Windows资源管理器的右键菜单里,你看着谁的图标变了,就知道哪个文件被改过、哪个文件是新加的。绿勾代表已提交,红色感叹号代表有冲突,蓝色加号代表新增文件。这种“用眼睛管理代码状态”的方式,对入门者极其友好,日常用也足够高效。
我见过不少用命令行很溜的老手,偶尔切回TortoiseGit反而觉得麻烦,这不奇怪。但如果你在Windows下做项目、要跟同事协作、又不想天天背命令,小乌龟就是那个“装上就能干活”的工具。
1.2 为什么偏偏是TortoiseGit,而不是SourceTree或者GitHub Desktop
很多人也问过我:SourceTree不也挺好吗?GitHub Desktop不也很简单吗?为什么不直接用VS Code里的Git面板?
我的看法是这样:
| 客户端 | 优点 | 缺点 |
|---|---|---|
| TortoiseGit | 集成右键菜单、文件状态直观、老牌稳定、轻量 | 界面风格偏传统,不如现代客户端美观 |
| SourceTree | 图形化友好、支持多个平台 | 启动慢,有时中文版翻译奇怪,大仓库会卡 |
| GitHub Desktop | 界面干净、操作极简 | 主要面向GitHub,对码云/GitLab支持有限 |
| IDE内置Git(VS Code等) | 顺手,边写边提交 | 处理冲突、SSH配置时细节不够透明 |
TortoiseGit最大的优势在于“不脱离文件管理器”。你不用打开一个专门的应用,在文件夹里右击就能完成所有操作。这个设计初看朴素,用久了会发现特别顺。尤其是在处理多仓库、多分支的时候,文件资源管理器本身就是你浏览代码的地方,右键一下就能看状态、看日志、做对比,效率非常高。
而码云这边,服务器在国内,克隆和推送的速度比连GitHub稳定不少。对小团队和个人开发者来说,私有仓库免费这个点也非常实用。于是“TortoiseGit+码云”就成了国内Windows环境下一套非常自然、非常常见的基建组合。
2. 安装前的准备:环境检查和版本选择
2.1 必须先装Git for Windows,这步不能省
很多人会犯一个错误:只装TortoiseGit,不装Git本身。TortoiseGit本质上只是Git的一个图形外壳,真正干活的是后台的git.exe。没有Git环境,小乌龟相当于一个没有引擎的车壳,右键菜单照样能弹出来,但一执行操作就会报错。
所以正确顺序是:
- 先去Git官网下载Git for Windows,64位系统选64-bit版本,安装时一路Next即可,但有几个关键选项要留意:
- “Adjusting your PATH environment”建议选“Git from the command line and also from 3rd-party software”,这样以后在cmd、PowerShell里也能直接用git命令。
- “Checkout as-is, commit as-is”按默认来就行。Windows换行符和Linux不同,Git会帮你做转换,新手不用在这里纠结。
- 安装完成后,打开cmd输入
git --version,能看到版本号就说明Git装好了。
2.2 TortoiseGit本体和中文语言包
Git装好之后,再去TortoiseGit官网下载安装包。注意选64位系统对应的msi文件,别下成32位。
安装过程没什么特别,一直Next就行。装完后建议再下载一个简体中文语言包(Language Pack),装完在任意文件夹右键 → TortoiseGit → Settings → General里,把Language改成“中文(简体)”。顺便提一句,如果你们的仓库用到了大文件存储LFS,Git for Windows安装时默认会带Git LFS,码云平台也支持LFS,后面使用的时候在TortoiseGit里右键就能直接管理。
这里有一个安装后马上要做的事:确认SSH客户端设置。打开Settings → Network,找到SSH Client那一栏。TortoiseGit默认可能选的是内置的TortoiseGitPlink,也可能是系统OpenSSH。我的建议是直接用OpenSSH,路径一般是C:\Windows\System32\OpenSSH\ssh.exe。原因后面讲SSH密钥时会说明,简单说就是少一次密钥格式转换的麻烦,跟Git、跟码云的兼容性也最好。
3. 首次配置与码云仓库的关联
3.1 先填用户名和邮箱,提交记录才认得出你是谁
装好东西之后,不要急着克隆仓库,先把身份信息配好。既然是图形客户端,这个操作比命令行简单:任意目录右键 → TortoiseGit → Settings → Git,窗口右边就是“全局”配置区域。
填入你的名字和邮箱。注意邮箱最好填码云账号绑定的那个邮箱。Git每次提交都会记录author信息,码云会拿这个邮箱跟你平台上的账号做匹配。如果邮箱对不上,你在码云上就会显示成“未知用户”,头像和主页都挂接不上,同事看提交记录时也会觉得很奇怪。
这个配置写进的是~/.gitconfig文件,属于全局配置,对所有仓库生效,改一次基本上就再也不用动了。
3.2 生成SSH密钥并添加到码云,这是免密推送的关键
配置完身份,下一个重头戏是SSH密钥。码云支持两种克隆协议:HTTPS和SSH。
HTTPS的痛点是每次push都要输用户名密码。虽然Windows凭据管理器会自动缓存,但一旦码云密码改过、或者凭据过期,push就会突然报Authentication failed,不少人被搞到心态崩溃。SSH用的是密钥对认证,配好之后长期免密,稳定性好很多。所以我的建议很明确:能用SSH就SSH。
生成密钥的步骤:
- 在任意目录右键,选择“Git Bash Here”(Git安装后自带这个右键菜单)。如果没看到,也可以直接打开cmd。
- 输入命令:
ssh-keygen -t rsa -b 4096 -C "你的邮箱@example.com"一路回车,不要额外设置密码(设置了密码又会在每次使用时多一步输入,新手阶段先跳过)。默认情况下密钥会生成在C:\Users\你的用户名\.ssh\目录下,一个是私钥id_rsa,一个是公钥id_rsa.pub。
- 用记事本打开
id_rsa.pub,复制里面全部内容。 - 登录码云网页端,进入“设置” → “安全设置” → “SSH公钥”,把内容粘贴进去,标题随便起个能认出来的名字,保存。
这样就绑定了。可以在终端里验证一下:
ssh -T git@gitee.com如果看到类似“Hi 你的用户名! You've successfully authenticated”的信息,就说明公钥添加成功。
然后回到TortoiseGit的Settings → Git → Remote,选中远端名称,下方有“OpenSSH密钥”的输入框,把私钥路径C:\Users\你的用户名\.ssh\id_rsa填进去。如果你SSH客户端选的是OpenSSH,并且Windows的ssh-agent服务已经在运行,其实这一步不填也能通过。但手动指定一次更保险,能避免后面莫名报错。
注意:私钥
id_rsa千万不要发给别人,也不要传上代码仓库,它相当于你账号的钥匙,泄露了别人就能直接以你的身份拉取私有仓库代码。
3.3 克隆码云仓库到本地
这些配置做完,就可以正式跟码云仓库打交道了。
在码云仓库页面点击“克隆/下载”,方式选SSH,复制形如git@gitee.com:你的用户名/仓库名.git的地址。然后在本地建一个空目录,右键 → TortoiseGit → Clone,把地址粘贴进URL栏,Directory选择本地目录,点确定。
第一次连接SSH时,TortoiseGit会弹出一个确认主机指纹的提示,让你确认是否信任这个服务器,选择“是”即可。之后就能看到进度条走动,仓库代码哗啦啦下来,完事了目录里的文件上就会带上小乌龟的小图标。
如果克隆下来发现本地是空的、但是网页上明明有文件,很大概率是码云仓库创建时勾选了“初始化README”等选项,而本地拉的又是一个新分支。别紧张,先在仓库里右击 → TortoiseGit → Pull,把远端内容拉下来看看。
4. 日常使用:提交、推送、拉取与分支管理
4.1 Commit和Push:先提交到本地,再推送到码云
很多刚上手的同学分不清提交和推送的区别。简单说,Commit是把你改动的代码记录到本地Git仓库,Push是把这些本地记录上传到码云服务器。两者是两个动作,别混在一起。
操作很直观:改完代码后,在文件所在的目录里右键 → Git Commit。弹出的窗口里,改动文件会列在列表里,每条下面的小复选框代表是否要包含到本次提交中。先右键刚改过的文件选“Diff with HEAD”,确认改动是自己想要的,再填一个清晰的提交信息。
提交信息这一块,团队协作时尤其重要。别写“修改”、“更新”这种一眼看不懂的话,推荐这样的格式:
fix(商品列表): 修复搜索框无法回车提交的问题feat(购物车): 新增批量删除功能docs(README): 补充部署说明
类型概括为fix(修复)、feat(新功能)、docs(文档)、refactor(重构),后面跟模块和简述。这样将来翻历史记录时,一眼就能知道每次提交做了什么。
提交完后,再右键 → TortoiseGit → Push。首次推送时对话框里会让你确认推送到的远程分支,大多数情况用默认的master或main,对应的远程分支会自动创建。
4.2 Pull和冲突处理:顺手的小习惯能救大命
推送之前,大部分人会忘了一个重要动作:拉取远程最新代码,也就是Pull。
右键 → TortoiseGit → Pull时,对话框里会有“Merge”和“Rebase”两个选项。Merge的意思是把你本地的提交和远程提交合并在一起,历史记录会形成一个汇合点,保留双方痕迹;Rebase则是把你的本地提交“挪”到远程最新提交后面,历史看起来是一条直线,更干净,但会改写本地提交记录,多人协作时需要统一约定。
我的个人习惯是:自己管的小项目用Rebase,历史清楚;团队协作的项目跟同事约定统一用Merge,因为Rebase改写了提交hash,如果别人已经基于你的提交拉过代码,你rebase后再推上去,容易把别人的历史搞乱。
Pull之后如果看到文件上出现红色感叹号,说明产生了冲突。打开冲突文件,里面会有类似这样的标记:
<<<<<<< HEAD 这段是你本地刚写的代码 ======= 这段是远程拉下来的代码 >>>>>>> origin/main手动把两段代码整理成最终想要的样子,删掉那些<<<<<<<、=======、>>>>>>>标记,然后保存。关掉编辑器后回到TortoiseGit,右键冲突文件 → “Resolved”标记为已解决,再Commit提交一次冲突解决记录,最后Push推送。
这里有个实用小建议:每次push之前,不管觉得自己代码多独立,都先pull一下。我踩过最多的坑就是“改了一天,没拉远程,推送时冲突遍地”。定期Pull、小型提交、频繁Push,是Git协作里最不容易出乱子的节奏。
4.3 分支切换与实战流程,这是最常用的高频操作
分支是Git的核心玩法,TortoiseGit把这一套做成了几个非常直观的右键操作。
切换分支:右键 → TortoiseGit → Switch/Checkout,弹出的窗口里会列出本地已有分支。选中目标分支,工作区文件会自动更新成那个分支的状态。注意:如果当前工作区有未提交的修改,切换分支时TortoiseGit会尝试保留这些修改;但如果这些改动跟目标分支冲突,就会切换失败,提示你先提交或先暂存(Stash)。
创建分支:右键 → TortoiseGit → Create Branch,输入新分支名,比如feature/search-product,勾选“Switch to new branch”可以直接切过去。这一步的意义很大,开发新功能、修bug时都可以在独立分支上进行,主分支始终保持在可发布状态。
合并分支:先在“Switch/Checkout”里切回主分支,比如main,然后右键 → TortoiseGit → Merge,在“Merge from”里选择要合进来的分支,比如feature/search-product,点确定。合并完后Push即可。
举个具体场景:产品说要给列表加搜索框。你在main分支上右键 → Create Branch,名字叫feature/search-box,勾选一键切换。然后在分支上改代码、Commit、Push。等代码review通过后,切回main,Pull更新,Merge把这个功能合进来,再Push。这一套流程走顺了,才算是真正会协作开发。
切换分支这个热词之所以搜索量这么大,是因为很多人在这一步栽过跟头。记住一条原则:切换分支之前,先Commit或Stash,保证工作区干净。工作区有未提交的修改时,TortoiseGit虽然会尽量保留,但冲突发生时你连回到原来分支都费劲,得不偿失。
5. 常见问题与排查技巧实录
5.1 Pull/Push报错:no supported authentication methods available
这个报错在TortoiseGit用户中提问率极高,我自己也遇见过不止一次。表面意思很直接:Git发起连接时,客户端没有提供任何一种服务器认可的认证方法。
常见原因有这么几类:
- 仓库remote地址是HTTPS,但Windows凭据管理器里没有可用的码云凭据,或者凭据过期了。
- SSH客户端选的是TortoiseGitPlink,但私钥没有加载到Pageant,仓库的里也没有指定PPK私钥。
- OpenSSH密钥没有被ssh-agent加载,或者Settings里压根没指定私钥路径。
排查修复步骤,按顺序来:
- 右键仓库 → TortoiseGit → Settings → Git → Remote,看一眼URL是
git@gitee.com:...还是https://gitee.com/...。 - 如果URL是HTTPS,建议直接改成SSH格式,省得以后反复输入密码。
- 进入Settings → Network,确认SSH客户端指向的是
C:\Windows\System32\OpenSSH\ssh.exe(OpenSSH模式),或者TortoiseGit安装目录里的TortoiseGitPlink.exe(Plink模式)。两种模式对应不同的密钥配置方式。 - 在终端里执行
ssh -T git@gitee.com,看看密钥认证本身通不通。如果不认识你的用户,说明公钥没正确添加到码云。 - 确认私钥路径填写正确:OpenSSH模式下填
C:\Users\你的用户名\.ssh\id_rsa;Plink模式下需要把私钥转换成.ppk格式,再在Remote配置里指定。
我把这套整理成一张速查表,贴在自己笔记里,也推荐你们存一份:
| 报错/现象 | 可能原因 | 处理方式 |
|---|---|---|
| no supported authentication methods available | SSH或HTTPS认证没有可用凭据 | 按上面前5步逐项检查,重点看remote地址、SSH客户端、私钥 |
| fatal: Authentication failed | HTPS账号密码错误或凭据过期 | 在码云改密码后,打开控制面板 → 凭据管理器 → Windows凭据,删除gitee.com相关旧凭据再重试 |
| Permission denied (publickey) | 公钥没添加或私钥路径不对 | 重新添加码云公钥,检查TortoiseGit私钥路径 |
| 每次Push都要求输密码 | 仓库是HTTPS地址 | 将remote地址改成SSH,并按3.2小节配置密钥 |
5.2 私钥到底怎么添加,OpenSSH和PuTTY别搞混
“TortoiseGit怎么添加私钥”也是高频搜索。这里面最大的混淆点是:OpenSSH格式的密钥(你执行ssh-keygen生成的那个id_rsa)和PuTTY格式的.ppk密钥不是同一个东西。
如果你的SSH客户端是TortoiseGitPlink,那它只认识.ppk私钥,直接填id_rsa路径是无效的。需要先用PuTTYgen工具导入id_rsa,然后“Save private key”导出成.ppk,再回TortoiseGit的Remote配置里加载。
如果是OpenSSH客户端,就用原始的id_rsa直接指定路径,不用转换。
我的建议还是那句话:默认用OpenSSH。Windows 10以上系统自带OpenSSH,Git for Windows也内置一套,码云默认生成的就是OpenSSH公钥格式,各方面都省事。用Plink模式除了多一步转换,遇到问题网上答案还特别乱,新手很容易卡住。
5.3 那些不常搜但一定会遇到的坑:中文乱码、图标不显示、误提交
中文乱码:TortoiseGit的日志窗口里中文提交信息变成乱码,是很多人遇到过的“玄学”。解决方法是改一下全局配置:Settings → Git → 编辑全局.gitconfig,在里面加几行:
[gui] encoding = utf-8 [i18n] commitEncoding = utf-8 [core] quotepath = false保存后重开日志窗口,基本就能正常显示中文了。
图标不显示:有时候明明在Git仓库目录里,但文件上就是没有绿色小勾、红色感叹号。常见原因包括图标缓存异常、Windows资源管理器没有刷新。最简单的处理方式是重启任务管理器里的explorer.exe进程,或者重启电脑。偶尔还会遇到注册表IconOverlay个数限制导致部分图标丢失,这种情况用系统自带的修复工具清理一下图标缓存就好。
误提交依赖目录:新手最容易犯的一个错误是把node_modules、target、.idea这种目录也提交进仓库。正确姿势是在仓库根目录创建.gitignore文件,把不需要版本控制的文件排除掉。示例:
node_modules/ target/ .idea/ *.log .DS_Store如果这些目录已经被提交进去了,光加.gitignore没用,需要在Git Bash里执行git rm -r --cached node_modules这类命令把它们从跟踪里移除,然后再Commit和Push。
合并冲突无法继续:有时候代码改着改着,合并后发现文件还是红色,不知道下一步干嘛。记住流程:手动标记Resolved→ Commit → 继续Merge或Push。别以为改完文件就算结束,Git不知道你改完了,你必须明确告诉它“这个冲突我处理好了”。
最后说点个人体会。我给团队新人配环境的固定顺序是:装Git → 装TortoiseGit → 填用户名邮箱 → 生成SSH密钥并添加码云 → 克隆仓库 → 提交一次小改动。只要这套流程走完,后面基本不会有大问题。小乌龟最大的优点不只是图形化,而是所有操作都长在右键菜单里,你看着文件状态心里就有底,比对着命令行猜来猜去踏实太多。如果你刚开始用码云,建议第一周所有操作都用小乌龟做一遍,等节奏熟悉了,再回头去补命令行也不迟。踩坑中学习最快,希望这篇能帮你少走一段弯路。