读者大大们好呀!!!☀️☀️☀️
👀期待大大的关注哦❗️❗️❗️🚀欢迎收看我的主页文章➡️木道寻的主页
文章目录
🔥前言
Git哲学三问
什么是git?
Git 是一个分布式版本控制系统,由 Linus Torvalds 在 2005 年为 Linux 内核开发项目而设计和实现。它为软件开发提供了先进的功能,以支持代码的高效管理、分支操作、合并、代码审查和多人协作。以下是从软件工程师的角度对 Git 的一些专业介绍:
分布式架构(Distributed Architecture)
:
Git 给予每个开发者一个本地仓库的完整副本,包括所有分支和标签。这与集中式版本控制系统(如 SVN)形成对比,后者依赖于单一的中央服务器。
数据完整性(Data Integrity)
:
Git 通过 SHA-1 哈希算法保护代码和历史记录的完整性,确保代码不会在传输过程中损坏。
网络效率(Network Efficiency)
:
Git 在网络操作中表现出高效率,如克隆(clone)、拉取(fetch)、推送(push)等操作,只传输差异数据,而不是整个仓库。
分支管理(Branching and Merging)
:
Git 的分支操作非常快速且简单。它鼓励开发者频繁使用分支来隔离不同的开发工作,并通过合并操作整合变更。
变更追踪(Change Tracking)
:
Git 跟踪文件的变更历史,包括每次提交(commit)的元数据,如作者、提交信息和变更的文件列表。
暂存区(Staging Area)
:
Git 使用暂存区来准备下一次提交,这允许开发者有选择性地提交更改,而不是一次性提交所有更改。
原子操作(Atomic Operations)
:
Git 的操作如提交、合并和回滚是原子性的,这意味着它们要么完全应用,要么完全不应用,不会出现部分更新的情况。
子模块(Submodules)
:
Git 支持将一个 Git 仓库作为另一个仓库的子模块,这对于管理依赖于多个项目的复杂项目非常有用。
工作流(Workflows)
:
Git 支持多种工作流程,如 Gitflow、Forking 工作流等,以适应不同的开发需求和团队协作模式。
钩子(Hooks)
:
Git 提供了客户端和服务器端钩子,允许开发者在特定事件发生时自动执行脚本,如 pre-commit、post-receive 等。
分布式代码审查(Distributed Code Review)
:
Git 支持通过补丁(patch)和 pull request 进行代码审查,促进代码质量和团队协作。
多平台支持(Cross-Platform Support)
:
Git 可在多种操作系统上运行,包括 Linux、macOS 和 Windows,具有广泛的适用性。
性能(Performance)
:
Git 在合并、分支和其他操作上的性能非常出色,即使是在包含大量文件和复杂历史的大型项目中。
可扩展性(Extensibility)
:
Git 的设计允许通过第三方工具和插件来扩展其功能,以满足特定的开发需求。
总的来说git就是开源的分布式版本控制系统
Git:将文档的各种版本保存下来,甚至可以任意切换版本
分布式:每一个用户都拥有自己的本地仓库
为什么用git?
Git 是一个强大的版本控制系统,适用于多种软件开发场景。以下是一些常见的使用 Git 的场景以及为什么选择 Git 的原因:
个人项目管理:
开发者可以使用 Git 来追踪和管理个人项目的进度,通过提交历史记录来回顾和比较代码变更。
团队协作开发:
在团队项目中,Git 支持多开发者同时工作在不同功能或修复上,通过分支和合并来集成各自的工作。
开源项目贡献:
开源项目通常使用 Git 来管理源代码,贡献者可以通过 fork 仓库、创建分支、提交更改并通过 pull request 来贡献代码。
持续集成/持续部署(CI/CD):
Git 与 CI/CD 系统集成,可以自动化测试和部署流程,每次提交或合并可以触发构建和部署任务。
历史记录和代码审查:
Git 提供详尽的提交历史记录,便于代码审查和理解历史变更。
回滚和代码恢复:
在出现问题时,Git 可以快速回滚到之前的稳定版本,或恢复意外删除的文件和代码。
分布式工作:
分布式架构允许开发者在没有中央服务器的情况下工作,适合分布式团队或远程工作。
跨平台开发:
支持多种操作系统,便于跨平台项目的代码管理和同步。
大型项目支持:
即使在包含大量文件和复杂历史的大型项目中,Git 也能保持高性能。
子模块和依赖管理:
对于包含多个子项目或依赖库的大型应用程序,Git 子模块提供了一种有效管理依赖的方式。
工作流灵活性:
Git 支持多种工作流程(如 Gitflow、Forking 工作流等),团队可以根据需要选择或定制工作流程。
社区和工具支持:
Git 拥有庞大的社区支持,提供了大量的工具和资源来扩展其功能,如 GitHub、GitLab 和 Bitbucket。
安全性:
Git 保证了代码的安全性和完整性,使用 SHA-1 哈希算法来确保代码变更的不可篡改性。
免费和开源:
Git 是免费和开源的,可以不受限制地使用,适用于各种规模的项目和团队。
实际例子:
需求:
毕业论文初稿.txt -->毕业论文修改一稿.txt -->毕业论文修改二稿.txt -->毕业论文打死不改稿.txt -->毕业论文不死还改稿.txt
测试计划文档|测试代码py java==>v1—>v2—>v3
传统工作场景下缺点:
1、占用空间大
2、无法多人协作
3、不能自动备份
Git工具登场了,节省空间保留版本+多人协作
怎么掌握git?
git版本控制工具,使用架构图----工作场景:多人协作开发
🚀准备git软件
1️⃣git官网地址
2️⃣按需求下载:本文是在Windows系统下演示(Linux可直接使用这个命令
yum install git
)
3️⃣点击运行,狂点下一步
🚀本地仓库功能(交互场景)
保存版本
首先准备一个工作区(文件夹)用于编写文档。
然后在工作区(文件位置空白处)右击:
点击bash here:
注意:git在首次使用需要声明一下自己身份 用户名+邮箱
git config --global user.name "yourname"
git config --global user.email "youremail"
查看配置的用户名和邮箱
创建一个本地仓库
git init
.git文件夹不要动,隐藏了一切信息,包含了本地仓库。
在工作区进行作业,修改文档后,
git add
命令(纳入暂存区)工作区的文件支持被git管理,高速git工作区有改动了~)
git add 命令集
git add .#操作当前目录所有文件 进入暂存区
git add *.txt #操作当前目录部分文件 进入暂存区--目录下txt结尾文件 *0~多个字符
git add mdx111.txt #操作当前目录单个文件 进入暂存区
暂存区–提交整个暂存区–> 本地仓库(只要提交一次产生一个新的版本)
git commit
命令
git commit 命令集
git commit 要求输入提交信息,告知当前版本含义~ 默认方式 以vi保存提交日志
vi的操作命令在笔者的前篇Linux命令介绍,可去主页查找,提交信息为第一个版本日志提示信息,而后
:wq
保存
返回的git界面
如果嫌vi界面有的麻烦
直接
git commit -m
提交一个简单的日志
因为没有改变版本,前面已经提交过,所以显示没有文件被提交。恭喜你,看到这里,就基本对git有大概的了解,和基础的操作了。可以开始干活了。
切换版本
需求:最新版本的版本出问题,回溯到之前版本,重新开发文档?
v1版本----》v2版本-----》v3(问题版本)----修改–》回到v2,v4版本
实验
1、准备3个版本
1️⃣进入工作区,修改文件,修改一次提交一次
(v1提交的是空白文档)。
以下命令集重复两次直至到v3版本:
git status 查看是否修改
git add .
git commit -m “v2”
上图红色字体表示修改未纳入暂存区,经过了
git add
,操作后,文件名变绿,说明修改提交成功。
重复操作提交:
2、回溯到第二个任意版本
1️⃣快速回到上一版本
命令:
git reset --hard HEAD^
2️⃣HEAD 当前版本
^
上一个版本
^^
上上个版本
HEAD ~100
回到前100个版本
3️⃣根据日志任意切换版本~
需求版本一多,遗忘版本含义
版本号唯一
命令:
git reflog
查看版本含义+查看版本号
根据版本号,回到第三个版本v3
命令:
git reset --hard 06ade80
3、修改产生其他版本
注:如果返回的是v2版本,操作修改后产生的不是v3版本而是v4版本。因此日志不能写v3版本
恢复文件
文件恢复,有几种场景。
1️⃣在工作区误操作,并没有加入暂存区
切换之前的版本上去
命令:git checkout – mdx111.txt
命令的含义是从本地仓库取出
2️⃣在工作区误操作,加入暂存区,没有提交新版本
命令:
git add . 加入暂存区
git reset HEAD mdx111.txt 撤销暂存区修改
git status 验证回到场景1
git checkout – mdx111.txt
3️⃣在工作区误操作,加入暂存区,提交了新版本
版本回溯到正确版本,前面已经演示,本节不再赘诉。
4️⃣在工作区误操作,提交到本地仓库—>远程仓库
无解 建议推送远程仓库内容 经过 自测|审核 不要随意推送 ,造成团队困扰
!!!
5️⃣工作区中误删了文件|扩展如何彻底删除文件~
命令:
git checkout -- mdx111.txt
彻底删除文件:
命令:
git rm mdx111.txt
checkout命令不能恢复。
可以使用版本回溯
git reset --hard 06ade80
删除一切:linux 命令rm 删除.git文件夹与工作区文件。
🚀实现共享仓库
分支冲突
什么是分支?branch
一个本地仓库不太够用,架构图如下:
把仓库分成一个又一个小仓库。
1、创建分支
主分支:(commit 就有主分支master)
其他分支:
git branch 分支名字 创建分支
2、切换分支
git checkout 分支名字
git checkout -b 分支名字 #创建并切换~
3、合并分支
切换到master分支
git merge 分支名字
4、删除分支:切换到master分支
git branch -d 推荐 删除无用分支 已经合并的分支
git branch -D 强制删除
5、查看所有分支
命令:
git branch -a
实验
1、 第一个master分支
2、创建test分支
3、创建并切换dev分支
4、dev分支为自定义的开发功能仓库,在dev中开发了其他的功能版本,并提交。
5、开发的新功能稳定,切换到master分支,合并master与dev ====》产生新的版本号~~mater —>v2
6、删除已经合并的dev分支
7、分支特有现象:分支冲突
1️⃣切换至test分支
该分支仍为v1版本,分支版本情况如下:
dev v1—> v2—>整个分支删除消失
master v1–合并–》v2
test v1
2️⃣修改test分支,产生test的v2版本
3️⃣切换至master分支,合并test分支。
出现了冲突的情况:
解释:HEAD表示当前分支,合并进来的分支test分支产生了冲突,git进行询问:master是要dev还是要test?
解决:不能自动化解决,也不能当做bug,是日常工作中遇到了现象,最终只能靠人为决定~
产生新的版本,保障需求:
修改后,使用
git add
和
git commit
命令
实际工作中可能会有成百个版本遇到冲突,不要纠结原因,打开冲突文件进行人为取舍,产生新的版本。
远程仓库 共享仓库使用
技术实现手段
1、互联网github全球最大的开源仓库网站|支持私有仓库
私有仓库,公司自己研发+保密版权
开源仓库,全世界开发,丰富
2、本文演示为官网地址gitee 码云仓库,国内最大
3、内网 gitlab共享仓库 —运维搭建
github gitee gitlab ===》操作完全一致
实验
1、新建一个私有仓库(运维)
为了后续的操作,我设置了模板,开始创建可以初始化仓库。
SSH协议的访问地址:
2、本地机器要和私有仓库完成SSH授权
目的:让本地的机器有资格 通过SSH地址访问远程仓库
命令:
ssh -keygen -t rsa 加密方式 -C 主题
查看公钥:
命令:
cat 地址
公钥安装到码云:
进行授权,复制公钥安装到码云上,自己的电脑留下私钥
安装成功:
使用原理:
产生文件
id_rsa 私钥 (钥匙)和 id_rsa.pub 公钥(锁)(锁|安装在码云上)
有钥匙的机器就可以开锁!!!
3、本地仓库绑定远程仓库
在本地仓库位置敲命令,即按照原来的步骤,创建本地仓库
绑定命令:
git remote add origin 远程仓库的SSH地址
remote add 添加远程
origin 远程仓库 在本地使用别名 —习惯
4、从本地仓库下载远程仓库内容--推荐,保存和远程仓库同步
命令:
git pull origin master --allow-unrelated-histories
下载合并本地仓库分支日志
文件显示:
5、从本地推送内容到远程仓库
工作区修改了,必须先add + commit 过后再推送
命令:git push origin master
码云上查看推送的内容:
远程仓库实验完毕!!!
⭐️⭐️⭐️总结
git版本控制,命令速查思维导图
✈️✈️✈️如果喜欢这篇文章的话
🙏大大们可以动动发财的小手:
👉👉👉
点赞:👍收藏:⭐️评论:✍️👈👈👈
版权归原作者 一川烟柳清风 所有, 如有侵权,请联系我们删除。