git入门 | 青训营笔记

104 阅读4分钟

Git简介

git是什么?

git是一个分布式版本控制系统,可以高效地管理软件的版本信息。

版本控制系统的演变

最简单的控制方法:通过复制文件、修改文件名来控制版本

本地版本控制系统:可以保存本地文件的所有变更增量Diff,快速切换版本,但缺点是无法进行团队协作

集中式版本控制系统:将完整的代码和版本信息中存储在中央服务器,团队的每个参与者只拥有自己负责的部分代码,但缺点是可能会发生单点故障

分布式版本控制系统:团队中每个参与者的机器上都拥有完整的代码和版本信息,没有单点故障的风险

git能做什么

  • 记录代码的修改记录,可以方便地对比新老版本的改动,防止多余的、错误的修改发生
  • 快速切换版本,当修改后的版本出现问题时,可以快速回滚到以前可以正常运行的版本
  • 高效代码合并,当团队合作开发一个项目时,可能有多个人对同一各部分进行修改,这时候要对这些冲突进行合并

git优缺点

优点:

  • 分布式开发,每个本地仓库都有完整的版本记录,支持本地提交
  • 有强大的分支管理功能,方便团队协作
  • 有校验和机制,可以保证文件完整性

缺点:

  • 相对SVN等集中式版本控制更加复杂
  • 每次提交的是完整文件快照,而不是增量,所以对大文件的支持不够友好(但可以用git-lfs来解决)

git命令

基本概念

Git 工作区、暂存区和版本库概念:

  • 工作区: 本地用来存储代码文件的文件夹
  • 本地仓库: 工作区有一个隐藏目录 .git,这个就是 Git 的版本库。
  • 远程仓库:用于托管代码的仓库,比如github/gitee下的个人仓库
  • index暂存区: 一般存放在工作区的 .git 目录下的index文件夹中

工作区、版本库中的暂存区和版本库之间的关系: img

初始化

通过如下命令来将当前目录初始化为一个工作区,标志是生成一个.git的文件夹。想要使用git来管理某个文件夹的版本信息,第一步就是要在这个文件夹下进行初始化。

git init #将当前目录初始化为一个工作区

.git存储是当前工作区的版本控制信息的地方,之后用【命令】实现的操作都会导致.git内的文件产生相应的变动。

基本命令

git init #将当前目录初始化为一个工作区
git add xxx
git commit -m "提交实践备注"
git push 仓库url或仓库名 分支名
git clone 仓库url或仓库名

远程仓库相关

配置连接github远程仓库,参考www.runoob.com/git/git-rem…

远程仓库相关指令

通过url将本地仓库代码推送到远程仓库

git push 远程仓库url 要push进的分支名

为远程的url创建一个仓库名称

git remote add 远程仓库名 仓库url #添加远程仓库,其实就为url取一个别名,以后推送代码时就可以使用这个别名了

与原创仓库的交互

git remote show 远程仓库名 #详细显示该仓库信息
git remote rm 远程仓库名 #删除某远程仓库
git remote -v  #显示所有远程仓库

通过仓库名远程推送代码大致流程

# 第一步: 创建本地库并完成初始提交,也就是让本地库有提交记录
git init
git add .
git commit -m "first commit"
# 第二步: 添加一个远程仓库配置
git remote add origin https://gitee.com/holyking/test-1.git
# 第三步: 设置上游分支,并且使用远程名称推送到远程库
git push -u origin master

拓展:.git目录详解

git init命令会在本地生成一个.git文件夹,里面存放的就是当前目录的版本信息,所以.git文件夹也叫作版本库文件夹。

objects

obejects文件夹用来存储提交文件的信息,它里面主要包含三种文件,分别是blob文件、commit文件、tree文件

  • blob文件:用于保存提交文件的内容
  • commit文件:用于保存提交文件的版本信息
  • tree文件:用于保存提交文件的目录信息,记录包含几个文件,以及各文件对应的blob文件叫什么

三者如何串联到一起?

image-20230523173148619.png

通过commit文件找到Tree文件,再通过Tree文件找到对应的各个blob文件,最后通过blob文件获取文件内容