尧图精选

本地Git仓库推到Gitee:从环境配置到排错全流程

🕒 发布时间:2026/10/1 20:34:15 📁 来源:尧图网络
把本地Git仓库推到Gitee听起来只是一条git push的事但很多人在这个环节翻车——有的卡在认证有的被分支名劝退有的上传大文件直接把仓库搞崩。我见过太多同事和群友对着报错手足无措其实这些问题背后都有一套固定的逻辑。这篇文章我会从环境准备讲到常见坑的排查把整个流程的每一个关键节点都拆开讲透你照着一步步做基本能一次成功。这篇教程面向所有需要把本地代码托管到Gitee的开发者不管你是刚接触Git的新手还是已经用过一段时间的半熟手都能从中找到自己能用的细节。全程基于实际命令行操作没有花哨的图形界面依赖适合想在底层理解“推送”这件事的人。1. 环境准备装好Git注册Gitee建好远程仓库想推送先把地基打好。很多人心急跳过了环境检查最后报错都不知道是哪个环节出的问题。这一节我把Git安装、Gitee账号、远程仓库创建这些前置步骤逐个过一遍并解释每个步骤的含义。1.1 Git安装的细节与版本选择Git的安装本身不难但有几个地方值得注意。Windows用户建议直接从Git官网下载安装包下载时会让你选“Git for Windows”的独立安装版。安装过程中有三处容易搞错默认编辑器建议选Vim以外的编辑器比如Visual Studio Code否则以后在终端里写提交信息时会被Vim卡住退出都不知道怎么退。“Adjusting your PATH environment”这一步要选“Git from the command line and also from 3rd-party software”否则有些终端工具认不出git命令。换行符转换建议保持默认Checkout Windows-style, commit Unix-style line endings如果你只有单平台项目选第二个“按原样检出”也没问题但团队协作时还是统一默认值更省心。macOS用户可以用brew install git如果没装Homebrew直接装Xcode Command Line Tools也行系统会自动带上Git。Linux用户各自发行版的包管理器都有git比如apt install git或dnf install git。装完后打开终端输入git --version看到版本号就说明环境正常了。版本方面只要不是太老就行。Git 2.30以上的版本对分支命名、安全策略都更友好旧版本可能出现一些兼容性警告。你如果装了很老的Git建议升级后再操作否则后面的git branch -M main这类命令可能会不识别。1.2 注册Gitee并创建第一个远程仓库Gitee码云是国内常用的代码托管平台。注册流程很常规手机号或邮箱验证一下即可这里不啰嗦。注册完成后在右上角头像旁找到“”号选择“新建仓库”会进入仓库信息填写页。需要注意的字段有仓库名称这个会出现在远程URL里建议用英文小写加短横线比如my-blog。不要混入中文和空格虽然Gitee部分支持但后续命令行操作时转义麻烦。路径如果你开了路径设置它会和仓库名一起构成访问路径。一般保持默认和仓库名一致就行。初始化仓库这里有个关键选择。如果你本地已经有了仓库远程仓库就不要勾选“生成README文件”、“添加.gitignore模板”和“选择开源许可证”否则远程会多出一个初始提交你本地推送时会出现“远程包含本地不存在的提交”这种冲突。反过来如果你打算直接在网页上维护代码那可以勾选初始化选项。模板选择建议暂时不选。.gitignore等拉取后再手动添加更灵活因为你最清楚自己的项目需要忽略什么。开源许可证建议在正式对外公开时再选比较懒的可以先不管。仓库建好后远程页面会显示两种推送地址HTTPS和SSH这个后面会用到。1.3 配置本地身份信息推送提交时Git会把用户名和邮箱写进历史记录里。如果第一次用Git就急着提交会看到Please tell me who you are的报错。提前配置可以省去麻烦。在终端执行git config --global user.name 你的姓名 git config --global user.email 你的邮箱这里有两层含义要讲清楚--global表示这台机器上所有仓库都用这个身份适合个人电脑如果你在某些项目里想用不同身份可以去掉--global在该仓库目录下单独配置仓库级配置会覆盖全局配置。检查当前配置用git config --list只看某个值用git config user.name。邮箱地址不要求和Gitee注册邮箱完全一致但建议保持一致因为Gitee的提交贡献图会通过邮箱关联到你的账号。还有个小细节Windows用户配置完身份后如果之前安装Git时选了其他PATH选项需要重开一个终端窗口使环境变量生效否则git还是识别不了这时候不要怀疑配置有问题先重启终端。2. 从零开始把本地文件夹变成可推送的Git仓库准备工作完成后接下来是核心流程。这一节我会带你走一遍从git init到第一次git push的完整链路并解释每一步为什么要这么操作。理解了原理你就不会再被各种命令吓得缩手缩脚。2.1 初始化仓库与首次提交假设本地有个项目文件夹叫my-project里面放着代码。你想让它变成Git仓库先进入该目录cd my-project git init执行git init后目录下会出现一个隐藏的.git文件夹这就是仓库的“大脑”所有提交历史、分支指针、配置信息都存在里面。这时候项目文件还没被Git“跟踪”你需要用git add把文件放进暂存区再用git commit提交。git add . git commit -m feat: 初始化项目git add .会把当前目录下所有未被忽略的文件加入暂存区注意有个点。如果你项目里有不该提交的东西比如node_modules、编译产物、配置文件里的密钥一定要先创建.gitignore文件再add。.gitignore的语法很简单写一行忽略一个模式例如node_modules/ dist/ *.log .env首次提交前检查一下要提交的文件列表用git status看状态用git diff --cached查看暂存区改动。提交信息建议遵循“类型: 描述”的规范比如feat: 新增登录接口、fix: 修复首页白屏这样后面翻历史非常清爽。第一次提交随意点也可以但养成好习惯不亏。提交成功后会显示一行类似[master (root-commit) 8df4a2c] feat: 初始化项目的内容注意括号里的master是当前分支名。Git 2.28以后git init默认创建的分支名可能是main也可能是master具体看配置。这个分支名后面会影响推送命令要留意。2.2 关联远程仓库的两种方式HTTPS与SSH对比本地仓库提交完成后需要和Gitee上的远程仓库建立关联。Gitee仓库页面提供了两个地址一个HTTPS、一个SSH。这两者的区别直接影响你以后每次推送是否需要输密码。使用HTTPS方式关联git remote add origin https://gitee.com/你的用户名/my-project.gitHTTPS的优点是配置简单首次推送时会弹出窗口让你输Gitee的账号密码或私人令牌之后Windows凭据管理器会记住缺点是每次在新机器上克隆大仓库时都要重新认证且某些环境会间歇性提示密码错误实际是凭据过期了。如果你只用一台电脑HTTPS完全够用。使用SSH方式关联git remote add origin gitgitee.com:你的用户名/my-project.gitSSH的优点是免密、安全配置好之后长期不用再管登录问题。缺点是首次需要生成并配置密钥下一节详细讲。我个人的建议是如果这是你长期维护的项目直接用SSH一劳永逸如果是临时的、一次性拉取试用的仓库HTTPS更快。不管你用哪种方式关联后可以用下面命令验证git remote -v你应该看到origin对应的fetch和push地址。这个origin只是一个远程仓库的名字你可以改成别的但约定俗成就是origin别乱改否则后面别人的教程你都对不上号。2.3 第一次push实操与“origin”参数解读远程关联好了接下来就是激动的推送环节。命令行执行git push -u origin master如果本地分支是main就写git push -u origin main。这里很多新手栽跟头因为本地分支名和远程默认分支名不一致导致推送被拒。后面第4节会细说这里先记住一条推送命令的基本格式是git push 远程名 本地分支名-u表示设置上游分支把当前本地分支和远程分支绑定之后下次直接敲git push就能推送不用再写远程名和分支名。推送时如果是HTTPS会提示输入Gitee账号密码如果是SSH且没配好密钥会提示Permission denied的权限错误。推送成功的标志是输出一行类似To https://gitee.com/你的用户名/my-project.git * [new branch] master - master branch master set up to track origin/master.这时候去Gitee页面刷新就能看到代码已经躺在仓库里了。到这一步最基础的“本地仓库推送到Gitee”已经完成。3. 免密推送的核心SSH密钥配置全流程很多人问为什么每次推送都要输密码或者说换了一台电脑就推不上了。答案基本都指向SSH密钥没配好。这一节我把SSH密钥的生成、添加、验证和常见问题全部讲明白让你以后推送永不输密码。3.1 生成SSH密钥时要注意的细节生成密钥不是随便敲一条命令就完事里面有很多细节影响后续使用。终端执行ssh-keygen -t ed25519 -C 你的邮箱这里我推荐使用ed25519而非传统的rsa。ed25519的密钥更短、生成更快、安全性也足够Gitee和GitHub都支持。如果你使用的是特别老的系统/工具链才需要退回rsassh-keygen -t rsa -b 4096 -C 你的邮箱执行后终端会提示Enter file in which to save the key默认路径是~/.ssh/id_ed25519直接回车就行。接下来要求输入passphrase口令这里我建议如果你只是日常个人使用直接留空回车跳过如果是公司电脑或共用机器设置一个口令更安全代价是每次使用密钥时需要输入口令。你也可以把密钥加到ssh-agent里避免反复输入但配置略繁琐新手期不用折腾。生成完成后~/.ssh目录下会出现两个文件id_ed25519是私钥绝对不能泄露id_ed25519.pub是公钥需要上传到Gitee。用cat ~/.ssh/id_ed25519.pub查看公钥内容形如ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHdZ... 你的邮箱注意公钥是单行的复制时不要换行、不要多复制空格。有些终端会自动换行显示复制前最好确认。3.2 把公钥添加到Gitee并验证连接公钥拿到后登录Gitee进入“设置”-“安全设置”-“SSH公钥”把公钥粘贴到输入框标题随便填比如“工作电脑”然后确定。添加成功后回到终端验证连接ssh -T gitgitee.com首次连接会提示是否确认主机指纹输入yes回车即可。如果密钥配置成功会看到类似Hi 你的用户名! Youve successfully authenticated, but GITEE.COM does not provide shell access.看到这句话就说明SSH认证成功了。如果这一步报错比如Permission denied (publickey)先检查三件事公钥是否完整复制、是否添加到正确账号、本地是否用了正确的私钥路径。终端执行ssh-add -l可以查看当前会话加载了哪些密钥如果显示The agent has no identities执行ssh-add ~/.ssh/id_ed25519加载一下。还有一个很容易被忽略的问题如果你之前已经用HTTPS方式关联了远程即使配好了SSH推送时依然不会走SSH。需要修改远程地址。执行git remote set-url origin gitgitee.com:你的用户名/my-project.git再git remote -v确认地址变成了gitgitee.com开头那之后的推送就全走SSH免密通道了。3.3 管理多个账号的SSH config不少人有多个Gitee账号或者同时用Gitee和GitHub这时候你会发现一个问题SSH默认会用同一个密钥去连所有服务器但不同的平台/账号需要不同的公钥。解决办法是创建~/.ssh/config文件来指定匹配规则。举个例子假设你有两个Gitee账号分别是user-a和user-b想让它们各自使用不同的私钥。先生成两组密钥ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_user_a -C user-a邮箱 ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_user_b -C user-b邮箱然后在~/.ssh/config里写Host gitee.com HostName gitee.com User git IdentityFile ~/.ssh/id_ed25519_user_a Host gitee-user-b HostName gitee.com User git IdentityFile ~/.ssh/id_ed25519_user_b注意这里的Host gitee-user-b是别名。推送时地址要写成gitgitee-user-b:user-b/my-project.git而不能再用gitgitee.com。为什么因为SSH会按Host匹配config里的规则如果直接用同一个gitee.com它会一直用第一个密钥。这种多账号配置看着麻烦但能彻底解决“换身份推送到错误仓库”的问题。我线上见过有人把公司代码推到个人Gitee上就是因为公钥配错了账号。4. 高频踩坑实录这些报错我几乎天天见推送这件事报错种类不多但每种报错都对应一个具体的坑。这一节我把最常见的情况整理成表格再挑几个典型案例详细讲你遇到问题时可以直接对照排查。4.1 认证失败或提示输入密码却始终失败先看这条经典报错remote: Gitee: Authentication failed. Authentication failed. fatal: Authentication failed for https://gitee.com/...这个报错只出现在HTTPS方式下。常见原因有账号密码输错了。更准确地说Gitee的HTTPS推送不支持直接用登录密码必须使用私人令牌。你需要到Gitee“设置”-“私人令牌”里生成一个然后推送时用户名填你的账号名密码填令牌而不是登录密码。缓存了旧密码。Windows凭据管理器里存了错误的密码即使你在终端重新输入也可能被旧凭据接管。解决办法是打开控制面板里的“凭据管理器”找到git:https://gitee.com的凭据删除后再重新推送。邮箱用户名输错。有时提示用户名不对属于输入习惯问题确认无误再来一次。如果是SSH方式的认证失败报错一般是Permission denied (publickey)排查路径在前面3.2已经说过这里不再重复。给一张速查表报错场景大概率原因解决办法HTTPS提示Authentication failed使用登录密码而非令牌在Gitee生成私人令牌并用于推送HTTPS反复弹出密码框凭据管理器缓存了旧密码删除凭据后重新推送SSH提示Permission denied公钥未添加或私钥路径不对ssh -T gitgitee.com排查SSH提示Host key verification failed主机指纹变更或未信任清除~/.ssh/known_hosts对应项重新连接4.2 推不上去远程仓库有文件、分支名不一致、历史无关这类报错通常出现在创建仓库时勾选了初始化或者本地和远程各有不同的初始提交。典型的报错! [rejected] master - master (fetch first) error: failed to push some refs to ... hint: Updates were rejected because the remote contains work that you do not have locally.这意味着远程仓库有你本地没有的提交Git不敢覆盖。如果你确定远程那些初始文件比如README不想要可以用强制推送git push -u origin master -f-f就是强制覆盖。但注意此操作会覆盖远程对应分支的历史如果有别人也在用这个仓库千万不要随手-f。更好的做法是先把远程的变更拉下来合并git pull --rebase origin master--rebase的意思是把本地提交“叠加”到远程提交之上历史是一条直线。拉取后再推送就不会被拒绝。如果你本地和远程各有各的提交且互不相干可能导致合并时认为是无关历史此时需要允许无关联历史git pull origin master --allow-unrelated-histories拉取后解决冲突再提交推送。分支名不一致也常见。Gitee默认新建仓库的主分支名可能是master也可能你本地是master而远程是main推送时会出现远程没有这个分支或找不到对应分支的错误。这时候可以重命名本地分支git branch -M main-M是强制重命名然后再推送到origin main。这条命令没有破坏性只是把当前分支指针改名执行完再看git branch就能确认。4.3 大文件推送失败与Git LFS的简单处理很多项目里会塞数据库备份、模型文件、安装包动不动几十上百MB。Git对这种大文件很不友好推送时会报error: RPC failed; HTTP 413 curl 22 The requested URL returned error: 413或者remote: error: GH001: Large files detected.Gitee单文件限制一般是100MB具体以官方为准但即使没超过推送几个大文件也会让Git内存膨胀。最理想的做法是不要用Git管理大文件或者使用Git LFS。如果项目已经包含了大文件且还没推到远程可以这样处理先安装Git LFS插件然后标记要跟踪的文件类型git lfs install git lfs track *.psd git add .gitattributes如果大文件已经在历史提交里光track新提交是不够的已经进历史的大文件依然会跟着推送。你需要重写历史把大文件移除或迁移到LFS。处理这种问题最粗暴但有效的方式是如果远程还没有这些大文件且本地历史也不重要可以直接把.git目录删了重新git init然后重新提交一次这样历史干净。如果历史重要就用git filter-branch或git filter-repo这类高级工具改写但操作前务必备份仓库。我这里给普通用户的建议大文件别硬塞Git用对象存储、NAS或网盘来放。Git擅长管理代码文本不擅长管理二进制大块头硬来只会让仓库越来越臃肿最后卡得拉不下来。4.4 推送后想反悔回滚与强制推送的正确姿势推送成功后发现自己提交错了或者想撤回上一次推送这是特别常见的需求。这时候记住一个原则在公共分支上不要轻易强推在你自己单独的分支上则无所谓。如果你只是想撤销最近一次提交但保留文件改动在本地执行git reset --soft HEAD~1HEAD~1表示回到上一次提交--soft保留改动在暂存区。如果你想让改动回到工作区不暂存用git reset --mixed HEAD~1如果完全丢弃改动用git reset --hard HEAD~1。注意--hard会彻底删除改动且无法恢复慎用。如果你已经推送了错误提交需要远程也回滚可以在本地回滚后再强制推送git push -f origin master但这里有个隐患如果有人基于旧的远程提交做了新提交强推会把他们提交后的历史搞乱。稳妥的“反悔”方式是用新提交“覆盖”错误即先git revert HEADGit会生成一个反向提交推送到远程后远程历史是保留的只是业务内容被还原了。这种方式更体面团队协作时不会误伤别人。关于强制推送还有一个场景本地master分支落后于远程你想把远程弄成和本地一模一样这时git push -f可以做到。但请务必确认这是你一个人的分支否则后果很严重。5. 推上去之后分支管理、团队协作与Gitee Pages代码成功推送到远程只是开始真正的工作流是围绕分支和协作展开的。这一节补充几个高频场景分支怎么推、别人怎么拉、怎么用Gitee发布静态页面。这些也是“推送”主题的自然延伸。5.1 分支管理创建、切换、合并与推送分支日常开发中主分支一般保持稳定新功能在独立分支上开发。创建分支并切换git checkout -b feature/login这条命令等价于两步git branch feature/login创建git checkout feature/login切换。在分支上提交几次后想推送到远程git push -u origin feature/login推送成功后Gitee仓库页面会多出一个feature/login分支。之后你想在主分支上合并这个功能先切回主分支git checkout master git merge feature/login合并完成后推送到远程。如果合并时出现冲突Git会提示哪些文件冲突打开文件解决后git add .再用git commit完成合并。删除本地和远程分支分别用git branch -d feature/login git push origin --delete feature/login这里有个经验之谈本地分支和远程分支不同名也可以推送比如git push origin feature/login:release会把feature/login推到远程的release分支。但这样做容易混乱我建议保持同名。分支管理里最怕的是“分叉久了不合并”拖着拖着就成大冲突尽量小步提交、频繁合并。5.2 团队协作从克隆到PR的工作流如果是多人协作通常不是直接往主分支推而是走“拉分支、提PR/合并请求”的流程。新人加入项目时只需一条命令获取远程仓库git clone gitgitee.com:用户名/项目名.git克隆后默认在远程的主分支上。建议立刻创建一个自己的开发分支避免直接在master/main上改。Gitee的“Pull Request”功能叫合并请求就是让你把开发分支合入主分支的一个审核通道。在Gitee网页上选择“Pull Requests”-“新建Pull Request”把源分支比如feature/login合入目标分支比如master填好说明提交等管理员审核合并。如果你想实时获取远程其他人的新提交把远程更新拉下来git pull但因为当前分支有上游追踪git pull会拉取并合并。如果你想保持本地分支干净建议用git pull --rebase让本地提交在远程提交之上重放避免出现“merge commit”满天飞的情况。协作中还有一个容易忽略的点记得定期推送自己的分支别让本地改动只存在自己电脑里。我有一次在酒店电脑上改了三天代码没推送结果电脑丢了代码全完。从那次以后我就养成“每写完一个可运行的小功能就push一次”的习惯。5.3 用Gitee Pages发布静态页面推送代码除了托管备份还能直接变成网站。如果你有一个纯前端的项目比如博客或文档站可以借助Gitee Pages服务做一个静态站点。操作步骤很简单在Gitee仓库页面找到“服务”-“Gitee Pages”选择要发布的分支和目录点击启动。首次使用时需要实名认证按页面提示操作即可。Pages功能本身是免费的只是在国内访问速度快、审核要求相对严格最好不要发布有问题的内容。有几个容易踩的坑Gitee Pages默认以为你的项目根目录是站点根目录如果你的网页文件在dist或docs目录下记得在设置里指定。仓库名如果是username.gitee.io这种格式Pages站点地址会更好记类似https://username.gitee.io普通仓库名则会在链接后拼接仓库名。更新站点内容后推送代码到对应分支需要回到Pages页面手动“更新”一次Gitee不会自动触发重新构建这点和GitHub Pages不太一样。Pages虽然简单但它能帮你理解“静态托管”的概念把本地文件推送到远程远程再通过Web服务器展示出来。整个过程其实就是“推送”这个动作的延伸——你的仓库既是代码存储地也是内容发布源。最后再分享一个我个人坚持了多年的习惯每次推送前先跑一遍git status和git diff确认没有误提交密钥、临时调试文件、几百MB的黑盒数据。有一次我差点把一份包含数据库密码的.env文件推到公开仓库幸好git status里看到了这个文件名紧急把它加进了.gitignore。推送这个动作看似轻松但它会把本地状态几乎不可逆地复制到远端所以动手前多花十秒检查永远值得。
上一篇/下一篇内容由系统自动关联 返回资讯列表 →