尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Git入门必学:详解HTTPS、SSH、Git协议三种克隆方式与实战避坑指南

Git入门必学:详解HTTPS、SSH、Git协议三种克隆方式与实战避坑指南 1. 项目概述为什么“克隆”是Git入门的第一个关键动作刚接触Git很多人会被commit、push、branch这些概念绕晕。但在我看来无论你未来要用Git做什么第一个必须牢牢掌握的命令绝对是git clone。你可以把它理解为“下载”但它的内涵远不止于此。当你从GitHub、Gitee或者公司内网的GitLab上看到一个心仪的项目想要把它弄到自己的电脑上开始研究或开发时git clone就是你唯一需要的那把钥匙。这个过程我们行内就叫“克隆”。为什么它如此重要因为git clone做的不仅仅是一次性的文件拷贝。它会在你的本地创建一个完整的Git仓库副本包括整个项目的历史记录、所有分支的指针、以及远程仓库的地址信息。这意味着克隆完成后你立刻就能在本地查看历史、切换分支、进行开发并随时准备将你的改动同步回去。这和你从网盘下载一个ZIP压缩包有本质区别——ZIP包是静态的、死的而克隆出来的仓库是动态的、活的是一个功能完备的代码基地。网上教程很多但往往只告诉你git clone url这一种方式。实际上根据你的网络环境、认证方式和具体需求克隆一个项目至少有三种主流且实用的方法每一种背后都有其适用的场景和需要避开的“坑”。今天我就结合自己十多年里从开源贡献到团队协作踩过的各种雷把这三种方式的原理、操作和那些文档里不会写的细节给你一次讲透。2. 三种克隆方式的核心原理与选型指南在动手敲命令之前我们先得搞清楚这三种方式到底是什么以及你为什么需要关心它们。这能帮你避免“别人能用我怎么就报错”的尴尬。2.1 方式一HTTPS克隆——最通用的入门之选这是最常见、最直白的方式。你直接在Git托管平台的页面上点击那个绿色的“Code”按钮复制下来的以https://开头的链接就是HTTPS协议的仓库地址。它的工作原理是什么简单说它通过标准的HTTPS协议也就是你浏览网页用的那个安全协议与远程Git服务器通信。Git服务器如GitHub会提供一个类似于网站的服务端接口你的Git客户端通过这个接口获取数据。由于HTTPS协议非常普遍几乎不受公司防火墙或网络代理的限制因此通用性最强。为什么推荐新手从这里开始零配置你不需要事先在本地生成和配置SSH密钥省去了一个对新手来说可能有点麻烦的步骤。直观的认证当你第一次克隆时Git会弹出一个登录窗口或命令行提示让你输入用户名和密码。这个体验和你登录网站一模一样非常符合直觉。兼容性无敌无论在Windows、macOS还是Linux上无论Git是哪个版本HTTPS克隆几乎总能工作。但是它有一个在现代开发中越来越突出的痛点每次与远程仓库交互如push都可能需要重新输入密码。虽然可以通过配置凭据缓存来缓解但相比SSH方式在便利性上稍逊一筹。2.2 方式二SSH克隆——高效协作的标配如果你已经过了新手阶段或者需要在一天内频繁地push、pull那么SSH克隆是你的不二之选。它的地址长这样gitgithub.com:username/repo.git。它的工作原理是什么SSHSecure Shell是一种加密的网络传输协议。它采用非对称加密体系。你需要在本地生成一对密钥私钥private key保存在你电脑上绝不外传和公钥public key上传到Git托管平台。当你通过SSH克隆时客户端会用你的私钥向服务器发起认证挑战服务器用你事先上传的公钥进行验证。一旦匹配成功就建立了一条加密通道。为什么它是高效协作的标配一次配置永久免密配置好SSH密钥对并上传公钥后所有后续操作克隆、拉取、推送都无需再输入密码自动化脚本和CI/CD流程依赖这个特性。更高的安全性密钥认证比密码认证更安全避免了密码在传输中可能被拦截的风险尤其是在HTTPS密码认证未开启双因素时。某些场景下的唯一选择很多公司的内部Git服务器只开放SSH协议访问以增强安全管控。它的门槛在于初始配置。你需要打开终端生成密钥并小心地管理私钥文件。不过这个配置是一次性的绝对值得投入。2.3 方式三Git协议克隆——只读场景下的速度王者这种方式现在个人用得相对较少但在某些特定场景下仍有价值。它的地址格式是git://github.com/username/repo.git。它的工作原理是什么Git协议是一个为Git数据传输量身定制的、非常轻量级的网络协议。它运行在9418端口。最关键的一点是它是一个只读协议。这意味着你只能用git clone或git fetch从这样的地址拉取代码但无法向它推送push你的更改。为什么它还存在速度因为它没有加密和认证的开销所以传输速度在理想网络环境下是最快的。它常用于搭建内部的、公开的只读镜像仓库或者在一些自动化构建、打包系统中用于快速获取代码源。重要注意事项由于该协议没有加密且Git官方仓库git.kernel.org已基本弃用它主流托管平台如GitHub也早已禁用了git://协议的访问。你可能会在一些老教程里看到它但在实际操作中对于GitHub、GitLab、Gitee等平台请直接忽略这种方式。了解它主要是为了知识体系的完整以及避免被过时资料误导。选型速查表特性HTTPS克隆SSH克隆Git协议克隆地址示例https://github.com/user/repo.gitgitgithub.com:user/repo.gitgit://server.com/repo.git认证方式用户名密码 / 个人访问令牌SSH密钥对无匿名只读是否需要配置否首次需输密码是需生成并配置密钥否读写权限读/写读/写只读速度一般快理论上最快安全性高HTTPS加密高SSH加密无加密主要适用场景新手入门、临时操作、网络限制严格环境日常开发、频繁协作、自动化流程内部只读镜像现已很少用主流平台支持完全支持完全支持已普遍禁用实操心得对于99%的个人开发者和团队你的选择其实就是在HTTPS和SSH之间。我的建议是新手从HTTPS入手快速体验Git工作流一旦你决定要严肃地使用Git进行开发请立即花10分钟配置好SSH这是提升你开发效率的关键一步。3. 核心细节解析与实操要点了解了原理我们进入实战环节。我会详细拆解每种方式的具体操作步骤并附上那些容易踩坑的细节。3.1 HTTPS克隆从点击到落地的完整流程假设你在GitHub上找到了一个项目准备克隆到本地。步骤一获取仓库地址进入项目主页点击绿色的 “Code” 按钮。在弹出的面板中确保选项卡是 “HTTPS”。点击地址旁边的复制图标。你会得到一个类似https://github.com/username/repository-name.git的链接。步骤二执行克隆命令打开你的终端Windows用Git Bash或CMDmacOS/Linux用Terminal切换到你希望存放项目的目录然后执行git clone https://github.com/username/repository-name.git这时Git会开始下载仓库。如果是公开仓库下载会直接开始。如果是私有仓库Git会提示你输入用户名和密码。这里有一个巨大的“坑”需要避开关于密码的演变。过去你可以直接输入你的GitHub账户密码。但为了安全GitHub早在2021年就废除了对Git操作的账户密码认证。现在你需要使用“个人访问令牌”来代替密码。如何生成个人访问令牌登录GitHub点击右上角头像 - Settings。左侧边栏最底部找到 “Developer settings”。点击 “Personal access tokens”然后 “Tokens (classic)”。点击 “Generate new token”选择 “Generate new token (classic)”。为令牌起个名字如MyLaptop选择有效期repo权限是必须的然后点击生成。务必立即复制生成的令牌它只会显示一次关掉页面就再也看不到了。如何使用当Git命令行提示输入密码时不要输入你的账户密码而是粘贴刚才复制的个人访问令牌。用户名还是你的GitHub用户名。步骤三处理凭据缓存让电脑记住密码/令牌每次操作都输入令牌太麻烦。你可以让Git缓存你的凭据。Windows (Git Credential Manager)通常Git for Windows会自带这个工具。第一次认证后它会将凭据保存在Windows凭据管理器中以后自动使用。macOS可以将其存入钥匙串。git config --global credential.helper osxkeychainLinux可以缓存一段时间。# 缓存15分钟 git config --global credential.helper cache # 缓存1小时3600秒 git config --global credential.helper cache --timeout3600注意事项使用HTTPS克隆后你本地的仓库会默认记住这个远程地址名为origin。你可以通过git remote -v命令查看。如果你想后续改用SSH推送需要修改远程地址git remote set-url origin gitgithub.com:username/repo.git。3.2 SSH克隆配置一次畅通无阻SSH克隆的前提是配置好密钥对。我们一步步来。步骤一检查是否已有SSH密钥打开终端输入ls -al ~/.ssh查看是否有id_rsa和id_rsa.pubRSA算法或id_ed25519和id_ed25519.pub更推荐的Ed25519算法这样的文件对。有.pub扩展名的是公钥另一个是私钥。如果已有可跳过生成步骤。步骤二生成新的SSH密钥对如果还没有推荐使用更安全、更快的Ed25519算法ssh-keygen -t ed25519 -C your_emailexample.com-t ed25519指定密钥类型。-C添加注释通常用你的邮箱方便标识这个密钥是谁的。执行后它会询问你密钥的保存路径直接回车使用默认路径~/.ssh/id_ed25519。接着会询问你是否为私钥设置一个密码passphrase。我强烈建议设置一个。这相当于为你的私钥再加一把锁即使私钥文件不慎泄露没有密码也无法使用。当然如果图省事可以直接回车留空。步骤三将公钥添加到Git托管平台复制你的公钥内容。在终端执行cat ~/.ssh/id_ed25519.pub会显示一串以ssh-ed25519 AAAAC3...开头你的邮箱结尾的文本。全部选中复制。登录GitHub或其他平台进入 Settings - SSH and GPG keys - New SSH key。“Title”栏给你的密钥起个名字如“公司电脑”。“Key”栏粘贴你刚才复制的公钥内容。点击 “Add SSH key”。步骤四测试SSH连接在终端运行ssh -T gitgithub.com如果看到类似Hi username! Youve successfully authenticated...的欢迎信息说明配置成功。步骤五执行SSH克隆现在回到项目页面点击 “Code” 按钮切换到 “SSH” 选项卡复制地址。然后在终端执行git clone gitgithub.com:username/repository-name.git整个过程不会再要求你输入任何密码除非你生成密钥时设置了passphrase那只需要输入一次克隆会自动完成。实操心得关于私钥的管理私钥id_ed25519是你的数字身份必须妥善保管。不要把它发给任何人也不要上传到任何网盘、代码仓库。在多台电脑上开发时应在每台电脑上分别生成独立的密钥对并添加到你的GitHub账户。这样如果某台电脑丢失你可以单独吊销那台电脑的公钥而不影响其他设备。3.3 特殊场景与进阶克隆技巧掌握了基本方法我们来看看一些能满足特定需求的克隆“姿势”。克隆时指定目录名默认情况下克隆下来的文件夹名字就是仓库名。你可以自定义git clone https://github.com/username/repo.git my-cool-project这会把仓库克隆到当前目录下的my-cool-project文件夹里。克隆特定分支默认克隆的是远程仓库的默认分支通常是main或master。如果你只想克隆某个特定分支git clone -b branch-name https://github.com/username/repo.git-b参数后面跟分支名。这在你想快速测试一个功能分支或修复某个发布版本时非常有用。克隆仓库但不要文件只克隆.git目录有时你只需要仓库的历史和引用暂时不想要工作区的文件比如做镜像或备份git clone --bare https://github.com/username/repo.git这会创建一个以.git结尾的文件夹如repo.git里面只有Git数据库没有可编辑的工作区文件。它通常用作服务器上的纯仓库。深度克隆Shallow Clone对于历史非常庞大、提交数成千上万的开源项目完整克隆可能耗时耗流量。如果你只关心最新代码可以做浅克隆git clone --depth 1 https://github.com/username/huge-repo.git--depth 1表示只克隆最近一次提交的历史。这样克隆速度极快仓库体积也小得多。缺点是你看不到完整历史也无法切换到早期的提交。这常用于CI/CD流水线中仅仅为了获取代码进行构建。4. 实操过程与核心环节实现让我们通过一个完整的模拟工作流把三种方式串联起来看看在实际中如何选择和操作。场景设定你是一名开发者第一天加入新团队需要将公司的项目代码克隆到你的新笔记本电脑上。第一步环境侦察与准备询问团队首先你需要知道公司用哪个Git托管平台GitLab, GitHub Enterprise, Gitee等以及项目仓库的地址。检查网络公司网络是否有特殊代理或防火墙这决定了HTTPS和SSH哪个可能被阻挡。通常内网环境两者都开放。查看文档团队是否有内部Wiki说明了推荐的克隆方式和SSH配置指南遵循团队规范能减少很多麻烦。第二步决策与执行情况A团队推荐HTTPS或你图省事想先快速上手直接复制HTTPS链接在终端执行git clone https-url。首次认证时根据平台要求输入用户名和个人访问令牌。克隆完成。后续每次git push可能都需要令牌如果没配置缓存。你可以按前面说的方法配置凭据缓存。现场记录克隆一个中等大小的仓库约100MB在普通公司网络下HTTPS方式耗时约1分30秒。情况B团队推荐SSH或你希望一劳永逸打开终端生成Ed25519密钥对ssh-keygen -t ed25519 -C your_company_emailexample.com。为安全起见设置一个强密码短语。将公钥内容复制提交给公司Git平台管理员添加或按照公司自助流程添加到你的账户设置中。测试连接ssh -T gitinternal-gitlab.company.com地址替换为公司实际地址。看到成功提示后复制项目的SSH地址执行git clone ssh-url。现场记录首次克隆需要输入一次私钥的密码短语。之后的所有操作包括这次克隆都无需再认证。相同仓库的SSH克隆耗时约1分钟略快于HTTPS。第三步克隆后的验证无论用哪种方式克隆完成后请立刻做以下几件事确保仓库状态健康cd进入克隆下来的项目目录。运行git status检查工作区是否干净应显示nothing to commit, working tree clean。运行git log --oneline -5查看最近的5条提交历史确认历史记录已完整拉取。运行git branch -a查看所有分支。远程分支会以remotes/origin/开头。确认你看到了预期的分支列表。关键一步运行git remote -v。这会显示远程仓库的地址。请务必核对确认它指向正确的仓库。我曾见过有人不小心克隆错了仓库埋头开发半天才发现。5. 常见问题与排查技巧实录即使步骤清晰克隆过程中还是会遇到各种“妖魔鬼怪”。下面是我总结的常见错误及解决方法堪称避坑宝典。5.1 HTTPS克隆相关错误问题1fatal: unable to access ‘https://...‘: Failed to connect to github.com port 443: Connection timed out排查思路这是典型的网络连接问题。检查网络首先确认你的电脑能正常上网。尝试ping github.com看是否能通。代理问题如果你在公司或使用了网络代理Git默认不会使用系统代理。你需要为Git配置代理。设置HTTP代理git config --global http.proxy http://proxy-server:port设置HTTPS代理git config --global https.proxy https://proxy-server:port如果代理需要认证git config --global http.proxy http://username:passwordproxy-server:port注意密码会以明文保存在配置中不安全建议使用无需密码的代理或环境变量。关闭代理如果你不需要代理但配置了可以关闭它git config --global --unset http.proxy和git config --global --unset https.proxy。问题2remote: Support for password authentication was removed... Please use a personal access token instead.解决方案这就是前面强调的“大坑”。GitHub不再接受账户密码。严格按照前面“个人访问令牌”的生成步骤创建一个新的令牌并在Git提示输入密码时粘贴这个令牌。问题3fatal: Authentication failed for ‘https://...‘排查思路认证失败。令牌错误确认你输入的令牌是正确的并且拥有足够的权限至少要有repo权限。令牌过期个人访问令牌可以设置有效期。检查令牌是否已过期去设置页面重新生成一个。凭据管理器缓存了旧密码Windows的凭据管理器可能缓存了你错误的旧密码。去“控制面板 - 用户账户 - 凭据管理器 - Windows凭据”里找到git:https://github.com之类的条目编辑或删除它然后重试克隆。5.2 SSH克隆相关错误问题1gitgithub.com: Permission denied (publickey).排查思路这是SSH克隆最常遇到的问题说明服务器拒绝了你的密钥。密钥未添加确保你已经将公钥.pub文件内容完整无误地添加到了GitHub或其他平台的SSH Keys设置中。一个常见的错误是复制了私钥或复制不完整。SSH-Agent未运行或未加载密钥如果你设置了私钥密码需要确保SSH-Agent在运行并加载了你的私钥。启动agenteval “$(ssh-agent -s)”添加私钥ssh-add ~/.ssh/id_ed25519然后输入你的私钥密码测试连接使用ssh -Tv gitgithub.com命令添加-vverbose参数查看详细的连接和认证过程能精准定位在哪一步失败了。问题2Warning: Permanently added ‘github.com‘ (ED25519) to the list of known hosts.说明这不是错误而是正常提示。当你第一次通过SSH连接到一个新主机时Git会把该主机的公钥指纹记录在~/.ssh/known_hosts文件里以防止中间人攻击。看到这个提示直接回车继续即可。问题3Bad owner or permissions on ~/.ssh/config排查思路如果你自定义了SSH配置文件~/.ssh/config其文件权限必须非常严格。解决方案运行chmod 600 ~/.ssh/config将其权限设置为仅所有者可读写。5.3 通用及进阶问题问题1克隆速度极慢甚至中断尝试方案更换克隆协议如果HTTPS慢试试SSH反之亦然。不同网络环境下两种协议的线路质量可能不同。使用国内镜像对于GitHub上的项目如果速度实在不理想可以考虑使用Gitee等国内平台的“导入仓库”功能先从GitHub同步到Gitee再从Gitee克隆速度会快很多。深度克隆如果不需要完整历史使用git clone --depth 1。配置Git全局参数有一定效果# 启用压缩 git config --global core.compression 9 # 增大HTTP缓存和缓冲区 git config --global http.postBuffer 524288000问题2克隆失败提示fatal: early EOF或fatal: index-pack failed排查思路这通常发生在克隆大仓库时网络不稳定或服务器中断导致数据包不完整。增加Git缓冲区git config --global http.postBuffer 524288000500MB。关闭压缩有时压缩会导致问题git config --global core.compression 0克隆完成后再改回来。使用SSH协议重试。最根本的方法换个网络环境或者等网络状况好时再试。问题3克隆后执行git status显示大量修改排查思路这通常是因为操作系统或Git的换行符line ending配置问题。Windows使用CRLF而Unix/Linux/macOS使用LF。解决方案在克隆前或克隆后统一配置Git的换行符处理。# 提交时转换为LF检出时不转换推荐跨平台协作设置 git config --global core.autocrlf input # 对于Windows用户也可以设置为true检出转CRLF提交转LF # git config --global core.autocrlf true配置后你可能需要重新克隆或者执行git rm -rf --cached .和git reset --hard HEAD来重置索引注意这会丢弃所有未提交的更改。克隆一个项目看似只是Git工作的起点但其中包含的网络、认证、配置知识却是你后续顺畅使用Git的基石。从简单的HTTPS开始逐步过渡到高效的SSH再根据需求运用深度克隆等技巧这个过程本身就是对Git理解加深的体现。记住遇到报错别慌张根据错误信息按图索骥大部分问题都能在文档和社区中找到答案。毕竟每一个你踩过的坑都是你成为更熟练开发者的垫脚石。
返回列表