Git & GitHub & Gitee & GitLab 技术(1)--之Git
Git & GitHub & Gitee & GitLab 技术(1)
一、Git 的概述及其入门操作
1.1 Git 的概述
Git 是一个免费且开源的分布式版本控制系统,设计用于处理从小型到非常大型的各种项目,以快速高效的方式。
Git 速度极快,拥有庞大的图形界面、托管服务和命令行工具生态系统。
(有兴趣的可以去了解一下 git 的发展历史廖雪峰讲 Git 的诞生引用资料https://liaoxuefeng.com/books/git/what-is-git/birth-of-git/index.html)
那么问题来了:Git 作为一款分布式版本控制工具,你肯定会有这样的疑惑: 1.版本控制是怎么回事?2.分布式又是什么意思?
1.1.1 版本控制
下图是一个即将大四毕业的“本科牲”正在赶工她的毕业设计,以下就是她的历代修改的毕设版本
在企业开发过程中,若仅依靠单一文件夹来管理多个版本文件,不仅操作效率低下,还会严重影响团队协作。这种简单的个人开发模式显然无法满足团队协同工作的需求。
为此,版本控制系统应运而生
定义:用于记录文件和代码修改历史的版本控制系统,便于回溯变更、对比差异和恢复数据。
核心功能:
完整保存每次修改记录
支持回溯至任意历史版本
实现多人协作时的版本同步
是否必须进行版本管理
最直观例子(不使用版本控制的灾难现场)
你和同学一起写项目:
你改了登录功能
同学改了注册功能
两人互相传文件: 项目最终版 、 项目真最终版 、 项目绝对最终版2
某天你改错代码,项目跑不起来
找不到之前好的版本 → 项目直接报废
用 Git 版本控制后
每次改完都提交,历史全保存
写错了直接回退到上一个正常版本
多人同时写,自动合并,不会互相覆盖
文件永远只有一份,不会乱
所以为什么要做版本控制就显而易见了:
- 防止代码改崩、无法恢复
- 多人同时写代码不混乱、不覆盖
- 随时查看谁在什么时候改了什么
- 能回到任何一个历史版本
1.1.2 分布式 VS 集中式
集中式版本控制系统(eg : SVN、CVS等):所谓的集中式版本控制就是将历代的版本文件都存放在同一个中央服务器中统一管理,而个人电脑是没有版本修改记录的。在多人协同开发一个项目时改写代码时需要先从中央服务器获取最新版本的代码,然后开始编写,编写完成后再推送上中央服务器让其进行迭代,版本更新且记录日志。
缺点:
- 单点故障风险:服务器宕机,所有人无法提交、更新、回溯代码。
- 必须联网:断网时几乎无法进行版本操作,只能本地改代码。
- 分支管理弱:创建、合并分支慢且复杂,不适合敏捷开发。
- 性能差:代码库变大后,拉取、提交速度明显变慢。
- 历史依赖服务器:本地没有完整版本历史,丢失服务器数据就全丢。
分布式版本控制系统(代表:Git):就是每个开发者本地都有完整的版本库(代码+全部的提交历史),不依赖中央服务器即可完成所有版本控制操作。提交、分支、回滚等操作本地完成,速度极快。(核心思想:每台电脑都是一个独立的服务器,节点之间平等,通过网络同步代码)
优点:
- 无单点故障
服务器挂了不影响本地开发,随时可恢复
- 断网可用
离线可提交、查看历史、创建分支,联网后再推送
- 分支极强
创建/合并分支极快,适合多人并行、敏捷开发
- 速度快
本地操作无网络延迟,大项目也流畅
- 数据安全
每人都有完整备份,服务器数据丢失可恢复
- 协作灵活
支持多种协作模式(Github/Gitlab流程、多仓库同步)
1.2 Git 的工作机制和代码托管中心
Git 的工作机制:
Git 是分布式版本控制系统,整体分为四个核心区域,数据在区域之间单向或双向流动:
- 工作区
本地存放代码、编辑代码的目录,是用户直接操作的区域。
- 暂存区
临时存放工作区的修改,用于标记哪些文件即将进入版本记录。
通过 git add 将工作区修改加入暂存区。
- 本地仓库
保存项目所有历史版本和提交记录,由 Git 自动管理。
通过 git commit 将暂存区内容永久保存到本地仓库。
通过 git checkout 可切换版本,将本地仓库内容覆盖到工作区。
- 远程仓库
托管在网络上的仓库(如 GitHub、Gitee),用于团队协作和代码备份。
通过 git push 将本地仓库推送到远程仓库。
通过 git pull 将远程仓库最新代码拉取到本地仓库与工作区。
在编写项目时,(情景1:如果刚加入团队但已经编写了一个已经差不多完工的项目)那就要求在远程库先****clone下最新版项目到本地库和工作区,先检查分支(git branch -a),切换到团队指定的开发分支,再开始开发;(情景2:已经在团队内部)那在每次将要编写代码时先拉取(pull)远程库最新的版本后,先检查分支(git branch -a),切换到团队指定的开发分支,工作区编写完成,add到暂存区,随即commit到本地库,再到push本地库代码之前还要pull远程库的最新版本(以免push本地库到远程库时,两库版本不一致导致remote rejected)。简单一句话:先pull,再改写代码;写完代码后先pull再push.后面工作也是按这个流程循环。
关键注意事项
- 频繁执行
git pull能减少大规模冲突概率,但需注意合并策略1(--rebase或默认合并)。 - 提交信息应清晰描述变更内容,便于团队追溯。
- 使用
git status检查工作区状态,确保无遗漏文件或冲突未解决。
总而言之:Git 通过工作区编写、暂存区临时存档、本地仓库记录版本、远程仓库协同共享,实现代码的版本管理与团队协作。
代码托管中心
是基于网络服务器的远程代码仓库,一般我们简单称为远程库。
->局域网 [GitLab]
->互联网 [GitHub (外网)、Gitee码云(国内网站)]
1.3 Git 的安装
官网 (git-scm.com)
引用教程:Git 详细安装教程(详解 Git 安装过程的每一个步骤)https://blog.ZEEKLOG.net/mukes/article/details/115693833
GIt 安装到哪都没问题,最主要的是你项目的代码放在哪(那才是最占内存的)
1.4 Git 的常用命令
1.4.1 设置用户签名
设置用户名:git config --global user.name 用户名 设置邮箱:git config --global user.email 邮箱 (建议和GitHub用同一个好记)
如何判断已经设置好了?
在C:\Users\现在所用的用户名.gitconfig 即可看到设置的内容
如果不设置后续推送时会出错
1.4.2 git 初始化本地库
输入 git init 初始化本地库
初始化过后就会出现一个隐藏的.git文件,证明初始化成功!
1.4.3 查看本地库状态
git status 1.4.4 将文件添加/移除至缓存区
添加
gitadd 文件名.后缀 移除
gitrm--cached 文件名.后缀 示例:
1.4.5 提交本地库
git commit -m"日志提交信息" 文件名.后缀 1.4.6 查看版本信息
git reflog ---简略 git log ---详细 1.4.7 版本穿梭
git reset --hard 版本号(前7位)
穿梭的原理图
切换版本底层原理还是移动HEAD指针
1.5 Git 的分支
1.5.1 分支及其好处
在版本控制过程中,同时推进多个任务,为每个任务,我们就可以创建每个任务的单独分支。使用分支意味着程序员可以把自己的工作从开发主线上分离开来,开发自己分支的时候,不会影响主线分支的运行。
下图引用ZEEKLOG- Git笔记(三)---- Git分支操作https://blog.ZEEKLOG.net/weixin_51202460/article/details/124643483
好处:
Git 分支最核心的好处是隔离开发、保护核心代码,避免个人 / 团队的代码互相干扰、污染稳定版本;
其次能灵活管控开发节奏,支持并行开发、紧急修复,大幅提升团队效率;
还能简化冲突解决、便于代码评审,让之前总结的 “先 pull 再开发、先 pull 再 push” 流程落地更顺畅。
简单来说:用分支开发,不用再担心 “改坏代码”“和同事冲突”,团队也能做到 “多人并行开发、版本稳定可控”。
1.5.2 分支具体操作命令
基础:
1.查看本地所有分支(*标注当前所在分支) git branch -v2.创建新分支(基于当前分支创建,不切换) # 格式:git branch 新分支名git branch feature/user-login 3. 切换到已存在的本地分支 git checkout develop # 或git switch develop 4.合并指定分支到当前分支 # 格式:git merge 要合并的分支名git merge feature/user-login 其中合并分支分两种情况
1:正常合并(主线没改;分支改完后合并到主线上)
2:冲突合并(主线和要合并到主线的分支都修改)
那就要vim 文件名.后缀手动修改后再git add 文件名.后缀,后再git commit -m "XXX"(这句不带文件名)–>成功
示例:
现在master 和 test1 两分支的test1.txt文件都做了修改并commit
在branch testl change<<<<<<< HEAD和>>>>>>> test1 这两行之间改写完后:wq保存并退出编辑
成功合并
1.6 团队协作
团队协作大概流程图
拓展
一些命令:
vim 中 Esc+yy是 复制 ; p是黏贴
进入文本时:点击i开始编辑文本;Esc+输入:wq退出并保存
查看文件夹下的文件ll;查看文件夹下的所有文件包括隐藏的ll -a
查看 cat 文件名.后缀
有兴趣可以去了解些Linux命令(Linux和Git是"一家")小杰的网工专栏
下图(豆包)