Git与Github的简要分享
Git与Github的简要分享
- 之前的一次组会上,给组内小伙伴分享了
Git
和Github
有关的基础概念与原理,介绍了使用Github
进行协作开发的流程。- 本篇博客会总结材料的主要内容,并提供材料的
PPT
和- 现在
Github
网站改版了,PPT
是基于改版前的排版而制作的。- 本次分享的是基础使用教程,不涉及复杂的
git
命令讲解。- 文档只提供了大纲,很多细节没有体现在文档中,欢迎与我探讨。
本次分享不会详细介绍如何使用 Git
。如果你需要学习 Git
的使用,可以访问互联网上的 Git
使用教程进行学习。本次分享中,我侧重于描述 Git
的设计原理、设计哲学等,并会详细介绍使用 Github
协作开发的流程。
版本控制系统#
基本概念#
版本控制系统(Version Control System)是一种记录文件内容变化的系统,可以在文件被修改时,将这些修改记录下来,以便将来可以查阅特定版本的文件内容。总结为一句话就是:随着时间的推移,使用版本控制系统记录项目的迭代过程。
版本控制系统的主要作用归纳如下:
- 追踪文件修改
- 比较版本差异
- 回滚历史版本
- 支持协同开发
- 提高开发效率
- 增强代码质量
发展历史#
根据 Version Control by Example 的有关介绍,归纳出版本控制系统的发展历程经历了三个阶段:
- 本地式版本控制系统:典型代表
RCS
- 集中式版本控制系统:典型代表
SVN
- 分布式版本控制系统:典型代表
GIT
其中,本地式版本控制系统只能在本地存储版本,不支持协作共享;集中式版本控制系统集中存储版本,但容易受到单点故障的影响;分布式版本控制系统分布式存储版本,支持本地离线开发,非常灵活与强大。
Git 介绍#
Git 的诞生#
Git
诞生的背后有一些有趣的故事。故事来源于 这里,读完这个故事我的感受是大佬解决问题的方式简单而又直接。
Git 设计哲学#
要谈论 Git
的设计哲学,必然绕不开 Linux
的设计哲学,毕竟他俩都出自同一人之手。我在这里简单总结了 Linux
的设计哲学和 Git
的设计哲学。
Linux
设计哲学- 一切皆文件(抽象的力量)
- 简洁至上(小而美)
- 每个程序只做一件事(但做到极致)
- 提供机制而非策略
Git
的设计哲学- 一切皆对象
- 设计多个子命令
- 每个命令只做一件事
- 提供丰富的扩展
总的来说,以上的设计哲学可以归纳为:
- 抽象
- 组合
- 接口
抽象就是把现实世界中的实体与计算机世界中的对象互相映射,可以说抽象是计算机设计的灵魂;组合是为了降低系统各个组件之间的耦合程度;接口则可以提升系统的扩展能力。
而从https://grahamlopez.org/git/git_philosophy.html的文章,其总结了 git
的五大哲学:
- snapshot, not deltas
- History is only for humans
- Branching is free
- Ignore the index
- There are no server repositories
关于这五条,我也在旁边做了注解。
基本概念#
Git
的存储区域有工作去、暂存区、版本库和远程库四个概念,使用 Git
进行版本管理就是使用不同的命令在这四个存储区域中切换。这里仅仅只是列举出了几个简单的命令,详细的命令需要去官网查询。
事实上,Git
还设计了其他的存储区,例如使用 git stash
命令的临时区域,这个区域是独立于分支外的。
分支管理#
Git
的分支设计非常有趣,在不同的分支之间切换几乎不会耗费太多时间,这得益于 Git
优秀的存储与索引机制设计。我使用了一个小例子来展示 Git
是如何做版本管理的。
只要经过了 git commit
保存,你可以在不同的时间节点上任意穿梭。
因此,在进行远程操作的时候,一定要用 git status
命令检查一下自己的工作区和暂存区。如果只把文件存储到了暂存区,仍然会存在文件丢失的风险。
Git
切换分支之所以很快,是因为只是修改了指针的指向。
除了分支管理之外,Git
还支持标签管理。在项目的重要节点,如发布、重要更新等,可以使用 git tag
打上标签。标签是不可变的,且在所有的分支均可见。
文件忽略#
有些敏感文件、隐藏文件、临时文件、非文本文件等不应该被 git
管理,此时可以使用 .gitignore
文件,告诉 Git
要忽略哪些文件。可以设置黑名单,也可以设置白名单。
提交规范#
为了方面与他人协作,快速回溯之前的某次修改,建议提交 commit
的时候遵循统一的格式规范,主流的格式规范如下所示。
Git 工作流#
使用 Git
开发需要遵循规范的工作流,需要引入分支管理、标签管理等策略,合理地推动开发进度。当代码越来越大的时候,仍保证 git tree
清晰可读。
Github 介绍#
主要介绍网站的主界面和仓库的主界面内容。Github
主界面经历了一次改版,但是主体内容与之前相差不大。
网站主界面#
网站主界面如下,主界面非常丰富。
仓库主界面#
这里只列举了部分的仓库主界面。
远程仓库#
Git
支持关联多个远程仓库,只要仓库实现了 git
协议。一般来说,有两种方式:
- 完全从无到有克隆远程仓库
- 将本地的仓库和远程仓库关联起来
Git
会在本地维护一个远程仓库的文件夹,存储远程仓库各个分支的指针信息。
协作方式#
基于 Github
协作开发有两种方式,一种是基于团队,一种是基于 fork+pr
的方式。
如果是基于团队的话,直接给开发人员设置权限,然后开发人员可以使用 git push
提交代码;而 fork+pr
的方式相对麻烦一点。事实上,开发人员较多的时候,不同的开发人员角色不同,需要将这两种方式结合起来,给代码仓设置团队的权限,然后在团队中有 committer
、coder
等角色,负责审阅代码和提交代码。
Github 工作流#
下面的图和右边的示例代码给出了 github
的工作流,这也是开源社区广泛采用的一种流程。
划重点:push
之前一定要同步上游仓库。同步命令我喜欢用 git fetech + git rebase
。
可视化工具#
工欲善其事,必先利其器。
分享总结#
最后一页是总结。
下载链接#
提供了由我制作的PPT
和由此PPT
导出的PDF
,按需下载即可。个人的PPT
制作水平一般,还请见谅~
📃 PDF下载链接
📃 PPT下载链接
☕ 如果本文帮助到你,可以点击下方的赞赏按钮请我喝杯咖啡~
参考引用#
[1] https://ericsink.com/vcbe/html/bk01-toc.html
作者:roderick
出处:https://www.cnblogs.com/LynneHuan/p/17822219.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」