ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Gitee仓库创建与本地项目推送:从SSH配置到git push完整指南

Gitee仓库创建与本地项目推送:从SSH配置到git push完整指南 代码只在你自己电脑里的时候一切看起来都挺正常文件在硬盘上躺着Git也时不时提交几个版本。可一旦换电脑、加同事、部署服务器这种单机工作流立刻让你寸步难行。这篇东西想把一个最基础的场景完整走通在Gitee上创建仓库然后把本地项目推送上去。从注册账号、安装Git到生成密钥、关联远程、推送代码每一步按实际操作顺序拆开讲连同我踩过的坑一起给你。这篇文章适合刚接触版本托管的新手也适合用过Git但没在Gitee上完整操作过的人。花十分钟跟着走一遍你可以得到一套能重复使用的标准流程。以后不管你是推送自己的开源项目还是把公司的内网仓库搬到Gitee私有仓库都能直接照抄这套路径。1. 开工前的准备账号、工具与基础配置1.1 注册Gitee账号的细节Gitee码云是国内最大的Git代码托管平台之一访问速度和中文文档都比国外平台友好得多。注册过程本身没什么难度但我还是建议你用真实信息完成实名认证——不是强制所有功能都要实名但创建私有仓库、开启Gitee Pages、给仓库加成员等功能实名之后会顺畅很多。亲测用昵称注册不实名的账号有些仓库权限相关的操作会弹验证提醒反而浪费时间。注册时尽量绑定常用手机号和邮箱后面配置Git提交信息时邮箱最好和Gitee邮箱保持一致。这不算硬性要求但如果邮箱不一致你的提交记录在Gitee上会显示成未关联账号的灰色头像看起来就像路人提交的维护开源项目时不雅观自己查贡献图也查不到。1.2 Git安装不要在这步省时间Windows用户直接去Git官网下载安装时一路Next问题也不大但有三个选项值得留意默认编辑器建议选Nano别选Vim。Vim对不熟悉的人简直是灾难推送时如果需要修改合并信息卡在Vim界面里进退两难的滋味不好受。PATH环境变量选默认的Git from the command line and also from 3rd-party software就好既保证了git命令在CMD和PowerShell里可用又不干扰其他软件。换行符转换建议选Checkout as-is, commit as-is。不少教程推荐选第一个自动转换CRLF但我在实际项目中经常遇到转换后配置文件被改动、无端出现大量diff的情况。选最后一个最省心。macOS用户最简单的是先装Homebrew然后brew install gitLinux用户用发行版自带的包管理器装就行比如Ubuntu下sudo apt install git。安装完成后在终端敲git --version能看到版本号就说明装好了。1.3 全局配置提交者的身份卡片Git每次提交都会记录提交者姓名和邮箱这是无法跳过的。装了Git之后第一件事就是配置这两个全局参数git config --global user.name 你的名字 git config --global user.email 你注册Gitee的邮箱用git config --list可以查看所有配置。注意--global表示对当前电脑所有仓库生效如果你某个特定项目想用不同的身份比如公司项目用公司邮箱在项目目录里去掉--global再配置一遍即可。这里有个小坑如果你直接用IDE里的Git功能提交有些IDE会弹窗让你填用户名和邮箱填完后IDE会把它写到当前仓库级别的config里。这个仓库配置会覆盖全局配置所以你可能会遇到我在全局配好了名字怎么这个仓库显示的还是别人的情况。排查方法就是看git config --list里user.name在仓库级别和全局级别是否一致。2. 让本地与Gitee互相信任SSH密钥配置2.1 为什么我强烈推荐SSH而不是HTTPSGitee支持HTTPS和SSH两种协议访问仓库。HTTPS方式每次推送都要输用户名和密码虽然可以借助凭据管理器记住但对需要频繁推送的开发流程来说既啰嗦又容易中断。更麻烦的是HTTPS密码输错太多次Gitee会临时封锁IP或账号全办公室跟着受害。SSH方式在配置好密钥之后一劳永逸推送拉取都不需要输入任何东西只需要确认公钥被Gitee信任。这里的原理可以打个比方SSH密钥像一把钥匙和一把锁。你把公钥锁的备份交给Gitee服务器私钥自己保存在本地。推送代码时Gitee拿着你的公钥来验证你私钥的签名验证通过就放行。2.2 生成SSH密钥的全过程在终端里执行ssh-keygen -t rsa -b 4096 -C 你的邮箱敲完回车后它会问你要把密钥文件保存在哪里。默认位置是~/.ssh/id_rsa直接回车使用默认位置即可。接着让你输密码短语passphrase这个可以留空也可以输一个简单的密码。留空的含义是只要别人拿到你电脑上的私钥文件就能完全控制你的代码仓库。如果输密码短语每次操作都要输入一次密码安全性和便利性自行权衡我自己的项目是留空的。命令执行完之后~/.ssh目录下会出现两个关键文件id_rsa私钥文件绝对不能泄露给任何人不要上传到任何网盘或代码仓库。id_rsa.pub公钥文件这是要交给Gitee的内容。公钥内容可以用以下命令查看并复制cat ~/.ssh/id_rsa.pubWindows用户如果用的是Git Bash同样支持以上命令。2.3 把公钥添加到Gitee登录Gitee网页端点击头像进入设置左侧菜单找到安全设置 → SSH公钥。把id_rsa.pub文件里的内容完整复制粘贴到公钥文本框标题随便填一个方便识别的名字比如我的办公电脑然后提交。Gitee网页上保存的其实是公钥的文本内容。复制时注意不要漏掉最后的邮箱后缀也不要多复制换行。粘贴完成后在本地终端验证连接ssh -T gitgitee.com如果配置正确会返回类似Hi 你的用户名! Youve successfully authenticated, but GITEE.COM does not provide shell access.的提示。看到这行字说明SSH通道已经打通。2.4 SSH验证失败怎么排查ssh -T gitgitee.com如果报Permission denied (publickey)按顺序检查三件事公钥是否已粘贴到Gitee打开网页设置确认一下很多人粘贴时复制成了私钥id_rsa的内容这完全不行本地私钥是否存在且路径正确ls ~/.ssh看有没有id_rsaSSH agent是否加载了私钥。Windows下偶尔需要执行ssh-add ~/.ssh/id_rsa让agent重新加载。一个冷知识如果你电脑上之前配置过GitHub的SSH密钥并且把同一个公钥同时添加到GitHub和Gitee这是完全合法的。公钥本身就是公开信息在哪个平台添加都无所谓只要私钥安全就行。3. 在Gitee上创建仓库参数选择有讲究3.1 点击新建仓库之前的决策Gitee左上角号下拉菜单里有新建仓库点击进入创建页面。这个页面上需要填的东西不多但每一项都影响后面的流程。仓库名称只能用字母、数字、下划线、中划线和中文字符不能带空格。建议用小写字母加中划线比如my-blog、erp-system这是Git生态约定俗成的风格。路径仓库名称填写后路径会自动生成路径是最终克隆地址的一部分确定之后不建议修改。是否私有私有仓库只有你自己和被你添加的成员能看到适合公司项目、尚未完成的个人项目。公开仓库所有访客都能看适合开源项目。Gitee创建私有仓库不设数量限制这一点对个人开发者很友好。初始化仓库Gitee会问你初始化时是否自动创建README文件、.gitignore文件、开源许可证等。3.2 千万不要勾选初始化仓库里的选项这部分是新手最容易踩的坑。如果你在Gitee创建仓库时勾选了初始化仓库那么远端仓库就自动产生了一个包含README.md的提交。当你本地项目准备就绪第一次执行git push时Git会发现本地和远端的提交记录互相独立直接拒绝合并推送报错信息通常是! [rejected] master - master (fetch first)。要解决也不难但会额外增加一个合并步骤。官方推荐的做法是git pull origin master --allow-unrelated-histories这个参数的意思是允许两个没有共同祖先历史的仓库合并。合并之后可能产生冲突文件需要手动处理再重新提交。操作不复杂但纯属浪费时间——明明可以避免的。所以我的建议非常明确创建仓库时所有初始化选项一律不勾选。.gitignore文件完全可以在本地自己写README文件也可以本地创建后推送没必要让远端先产生一次提交。干干净净的空仓库反而让后续操作路径最清晰。3.3 开源许可证怎么选创建公开仓库时Gitee会让你选开源许可证。如果你不打算开源选无就行。如果要开源选哪个许可证取决于你对衍生作品的态度。MIT最宽松代码原作者放弃责任允许别人随意使用甚至闭源商用Apache 2.0比MIT多一点专利保护条款GPL要求衍生作品也必须开源。个人项目我建议选MIT商业公司项目建议咨询法务别拍脑袋选。4. 本地项目与远程仓库对接从0到推上去4.1 本地初始化为Git仓库假设你本地有个项目文件夹里面是你的代码。在项目根目录打开终端执行git init这一步会在当前目录生成一个隐藏的.git文件夹里面存放Git的全部版本历史信息。可以用git status查看当前仓库状态此时所有文件都会显示为未跟踪untracked状态。如果你的项目里有一些不需要进入版本控制的文件比如日志、缓存、编译产物、本地配置、IDE配置文件等先把 .gitignore 文件创建好再执行 add。这里分享一个实用的最小化 .gitignore# 依赖目录 node_modules/ target/ vendor/ # 编译与缓存 *.pyc *.class .DS_Store *.log # IDE配置 .idea/ .vscode/ *.iml # 本地环境配置 .env.local config.local.php我见过不止一次同事把node_modules整个提交到仓库结果仓库体积爆炸、克隆奇慢无比。提前写好 .gitignore从第一步就避免这种悲剧。4.2 添加和提交代码git add . git commit -m 项目初始化完成基础框架搭建git add .会把当前目录下所有未被 .gitignore 排除的文件加入暂存区。git commit会把这些文件以快照形式保存到本地版本库。提交信息规范上我推荐用 gitmoji 风格或者 conventional commits 风格比如feat: 新增用户登录功能、fix: 修复订单金额计算错误。这种方式不仅人看着清楚一些自动化的代码审查工具也能识别。实在想不出怎么写至少别写update这种毫无信息量的提交信息。这里有个新手最容易困惑的点commit只发生在本地不会影响远程仓库。你以为提交了代码别人就能看到其实还差得远。4.3 关联远程仓库回到Gitee刚才创建好的空仓库页面页面上会显示仓库地址。在Gitee上克隆地址有两种格式HTTPS格式https://gitee.com/用户名/仓库名.gitSSH格式gitgitee.com:用户名/仓库名.git因为我们前面配置了SSH密钥所以选择SSH格式。在本地终端执行git remote add origin gitgitee.com:用户名/仓库名.git这里的origin是远程仓库的默认名称相当于给这个地址起了一个别名。如果你想添加多个远程仓库比如同时推到Gitee和GitLab可以用不同的名字比如git remote add gitee gitgitee.com:用户名/仓库名.git git remote add gitlab gitgitlab.com:用户名/仓库名.git查看当前仓库关联了哪些远程仓库git remote -v如果发现关联错了可以删除重新关联git remote remove origin4.4 推送代码到Gitee关联好远程仓库后终于到了推送这一步git push -u origin master拆解一下这条命令git push把本地提交推送到远程。origin推送的目标远程仓库也就是刚才添加的那个别名。master本地分支名。如果本地当前分支不是master这条命令会报错后面讲。-u这个参数是--set-upstream的简写意思是把本地master分支和远程master分支建立追踪关系。执行过一次之后以后直接git push就能推送到对应分支不用再带参数。执行过程中如果遇到SSH密钥验证提示第一次连接可能会出现输入yes确认。看到类似Counting objects、Writing objects的输出最后返回To gitgitee.com:用户名/仓库名.git和分支信息就说明推送成功了。去Gitee页面刷新代码已经出现在仓库里。5. 日常使用中的完整工作流与进阶操作5.1 一套顺手的日常提交推送流程推送成功一次只是开始后面日常开发中你会反复用到这套流程git status # 查看工作区状态 git add . # 暂存改动 git commit -m feat: 新增接口文档 # 提交到本地 git pull origin master # 拉取远程最新代码并合并如果多人协作 git push origin master # 推送本地提交到远程很多人在小团队里会跳过pull直接push这个习惯很危险。如果同事在你拉取代码之后提交了新版本你的push会被拒绝报错! [rejected] master - master (non-fast-forward)。正确处理方式是先pull合并解决冲突后再push。当然如果你是自己一个人开发通常是本地提交满意了再推不用每次push前都pull。5.2 从Gitee拉取已有项目换个场景项目已经在Gitee仓库里了你换了台电脑要把项目拿到本地。这时候不需要init直接克隆git clone gitgitee.com:用户名/仓库名.git克隆会自动完成初始化仓库、关联远程、拉取所有提交记录和文件。如果仓库比较大可以加上--depth1只拉取最近一次提交可以大幅加速但这种浅克隆在后续push操作时会有一些限制只在临时查看代码时用。如果已经在本地开发但没有关联远程而代码内容正好和已有仓库内容一致更推荐的做法是把已有仓库克隆到新目录把自己改动的文件复制进去而不是强行合并两个独立的Git历史。强合容易把提交历史搞乱提交图变得没法看。5.3 分支管理一个简单但重要的习惯现在Gitee和GitHub在新仓库上的默认分支名都在向main转变不少人在本地执行git init后默认分支是master推送时就会出现两边分支名对不上的情况。我在之前的项目中踩过一次本地仓库初始化的默认分支是masterGitee新仓库的默认分支却是main推送时直接报错error: src refspec master does not match any.。解决方案有两种git branch -M main # 把本地master分支重命名为main git push -u origin main或者强行指定推送目标分支名git push origin HEAD:master我倾向第一种重命名后保持本地和远端分支名一致避免后面每次push都要带参数。团队协作时约定统一的分支名比什么都重要。5.4 用 .gitignore 挡住不该上传的文件.gitignore 的实际效果是被它忽略的文件在git status里不会出现也不会被git add .暂存。所以如果你之前已经误提交了某些文件光改 .gitignore 是没有用的必须把文件从Git追踪中移除git rm -r --cached node_modules/ git commit -m chore: 移除误提交的依赖目录--cached参数只会从Git索引中移除文件不会删除磁盘上的实际文件放心操作。6. 常见问题与排查方法6.1 换个地方继续干Q推送时提示fatal: not a git repositoryA当前目录不是Git仓库。在项目根目录执行git init或者如果你本来应该克隆/clone却直接复制了文件先git init再git remote add origin 地址。QPermission denied (publickey)ASSH密钥验证失败。检查顺序公钥是否上传到Gitee→私钥文件是否存在→ssh-agent是否加载了私钥→Gitee页面上粘贴的是不是id_rsa.pub的内容不是id_rsa。Qpush时报! [rejected] master - master (fetch first)A远程仓库有本地没有的提交。先执行git pull origin master --allow-unrelated-histories如果是第一次关联或直接执行git pull origin master已有共同历史处理冲突后再push。Qpush时报error: src refspec master does not match anyA本地没有master分支。可能本地分支叫main先git branch -M main或者用git push origin HEAD:master。Q每次都要求输入用户名和密码A你使用的是HTTPS地址而不是SSH地址。执行git remote set-url origin gitgitee.com:用户名/仓库名.git切换。6.2 改错提交信息怎么办如果你刚提交完发现提交信息写错了还没推送远程直接改git commit --amend -m feat: 修正后的提交信息--amend的原理是重建最后一次提交把新信息替换旧信息。注意它只会修改最近一次提交如果想改之前的提交那就得用git rebase -i复杂度上升一个档次新手不建议轻易尝试。如果错误提交已经推送到远程且别人已经拉取了千万别用amend重写历史会让协作者进入噩梦状态。宁可老老实实再补一个提交也不要在已公开的历史上做文章。6.3 换行符导致的diff混乱项目中不同操作系统协同工作时Windows的CRLF和Linux的macOS的LF换行符差异会产生大量无用diff。如果你选择的换行符策略不正确可能push之后所有人拉下来代码都会提示整个文件被改动。我的解决方案是三种仓库根目录添加.gitattributes文件声明部分文件的换行符策略团队成员在各自Git配置里统一设置git config core.autocrlf trueWindows或falseLinux/macOS最重要的不要把不同编辑器保存的不同换行符混在一起提交。提交前用编辑器的统一换行符功能处理一遍。6.4 大型文件推送失败如果项目里有超过100MB的二进制文件比如打包好的安装包、数据集Gitee会直接拒收。解决方案如果是构建产物加入.gitignore让使用者自己构建如果是必须共享的大文件用Git LFSLarge File Storage管理Gitee对LFS有限额支持个人项目够用如果已经误推了用git filter-repo或BFG工具清理历史不过这类重写历史的操作务必谨慎。7. 个人使用中的一些建议与体会我在这个流程上折腾过多次之后总结出一条实践心得推送代码之前先想清楚仓库定位。如果是个人备份项目私有仓库加合理的提交信息就够了如果是开源项目README写清楚项目简介、安装方式、运行截图这些在开源初期比代码本身更能吸引人。项目管理层面我还建议你定期push不要积攒一堆commit才推一次。一方面降低本地硬盘损坏丢失代码的风险另一方面提交记录保持连贯万一某个节点出问题定位起来容易得多。Gitee Pages是个免费又好用的静态网站托管服务如果你仓库里是一个前端项目或纯静态页面推上去之后可以在仓库设置里直接开启Pages一个线上地址就有了连服务器都不用买。我第一次尝试时配置完等一两分钟再访问还是挺顺畅的。如果你手头有闲置的静态资源去设置里瞄一眼没坏处。
返回列表