Git简介
git是什么?
git是一个分布式版本控制系统,可以高效地管理软件的版本信息。
版本控制系统的演变
最简单的控制方法:通过复制文件、修改文件名来控制版本
本地版本控制系统:可以保存本地文件的所有变更增量Diff,快速切换版本,但缺点是无法进行团队协作
集中式版本控制系统:将完整的代码和版本信息中存储在中央服务器,团队的每个参与者只拥有自己负责的部分代码,但缺点是可能会发生单点故障
分布式版本控制系统:团队中每个参与者的机器上都拥有完整的代码和版本信息,没有单点故障的风险
git能做什么
- 记录代码的修改记录,可以方便地对比新老版本的改动,防止多余的、错误的修改发生
- 快速切换版本,当修改后的版本出现问题时,可以快速回滚到以前可以正常运行的版本
- 高效代码合并,当团队合作开发一个项目时,可能有多个人对同一各部分进行修改,这时候要对这些冲突进行合并
git优缺点
优点:
- 分布式开发,每个本地仓库都有完整的版本记录,支持本地提交
- 有强大的分支管理功能,方便团队协作
- 有校验和机制,可以保证文件完整性
缺点:
- 相对SVN等集中式版本控制更加复杂
- 每次提交的是完整文件快照,而不是增量,所以对大文件的支持不够友好(但可以用git-lfs来解决)
git命令
基本概念
Git 工作区、暂存区和版本库概念:
- 工作区: 本地用来存储代码文件的文件夹
- 本地仓库: 工作区有一个隐藏目录 .git,这个就是 Git 的版本库。
- 远程仓库:用于托管代码的仓库,比如github/gitee下的个人仓库
- index暂存区: 一般存放在工作区的 .git 目录下的index文件夹中
工作区、版本库中的暂存区和版本库之间的关系:
初始化
通过如下命令来将当前目录初始化为一个工作区,标志是生成一个.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文件叫什么
三者如何串联到一起?
通过commit文件找到Tree文件,再通过Tree文件找到对应的各个blob文件,最后通过blob文件获取文件内容