Git 学习

版本控制系统

1. 本地版本控制

2. 集中版本控制

版本库是集中放在中央服务器的,工作时用自己电脑从中央服务器得到最新的版本,工作完成后推送到中央服务器,必须联网,对网络带宽要求较高。一个服务器,容易出现单点故障,代表解决方案:SVN

3. 分布式版本控制

所有版本信息仓库全部同步到本地的每个用户,可以在本地查看所有历史版本,可以离线在本地提交,只需在连网时push到相应的服务器或其他用户那里。只要有一个用户的设备没问题,就可以恢复所有的数据,不会因为服务器损坏或者网络问题,造成不能工作的情况,但增加了本地存储空间的占用。

Git概述

1. 为什么需要Git

Git是分布式版本控制系统,没有中央服务器,每个人的电脑就是一个完整的版本库。
Git可以:

  • 追踪和记载一个或多个文件的历史记录,帮助你管理不同的版本,随时回退到任意时刻;
  • 并行协同开发,自动合并分支代码,代替人工解决机械重复的动作,提高工作效率

2. Git文件管理机制

Git的工作方式可以称之为快照流。Git把数据看作是小型文件系统的一组快照,每次提交更新时Git都会对当前的全部文件制作一个快照并保存这个快照的索引。为了高效,如果文件没有修改,Git不再重新存储该文件,而是保留一个链接(指针)指向之前存储的文件。
文件版本管理就相当于一个链条,在链条基础上,创建分支,即创建指针,切换分支,即切换指针指向的位置,这就是Git如此高效顺滑的奥秘了吧。

那么,Git是如何识别文件版本的差异?
Git使用哈希函数(SHA-1算法)来识别文件版本差异以及验证文件的完整性。
每个文件都会哈希得到一个哈希值,全部目录文件与其对应的哈希值构成树对象,树对象包含每一个文件,以及文件的哈希值,同时自己也生成一个哈希值,提交对象里面包含树对象,提交对象也生成自己的哈希值(类似比特币内部管理交易的工作机制)

每一个快照,都往前指向父节点,各个版本之间形成历史记录,就是通过各个版本间的父子关系建立的联系。

3. Git工作流程

Git有四个工作区域:
Workspace 工作区,平时存放代码的地方
Index(Stage) 暂存区,临时存放改动,事实上是一个文件,保存即将提交到文件列表的信息
Repository 本地仓库,安全存放数据的位置,存放所有提交的版本的数据。其中HEAD指向最新放入仓库的版本
Remote 远程仓库,托管代码的服务器,可以简单的认为是项目组中的一台电脑用于远程数据交换
在这里插入图片描述
本地搭建项目:
常用命令:

// 项目初始化,本地搭建项目
git init
//查看所有文件状态(Tracked /Untracked)
git status
//查看指定文件状态
git status [filename]
// 添加所有文件到暂存区
git add.
// 添加指定文件到暂存区
git add [filename]
//提交暂存区的内容到本地仓库
git commit -m"日志信息"
//查看修改日志
git log
// 克隆远程仓库到本地
git clone [url]
SSH公钥

设置本机绑定SSH公钥,实现免密码登录,安全连接

//生成SSH公钥
ssh-keygen -t rsa

生成SSH密钥在.pub文件中
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Git 分支

Git 分支管理机制

各个分支在开发过程中,彼此独立,不会对其他分支有任何影响;
同时并行推进多个功能开发以及bug修复,提高开发效率

相关命令:

// 列出所有本地分支
git branch   
// 列出所有远程分支
git branch -r  
// 新建一个分支,但依然停留在当前分支
git branch [branch-name]   
// 新建一个分支,并切换到该分支
git checkout -b [branch]    
// 切换到该分支
git checkout [分支名]    
// 合并指定分支到当前分支
git merge [branch]  
//  删除分支
git branch -d [branch-name]   
// 删除远程分支
	git push origin --delete [branch-name] 
	git branch -dr [remote/branch]     

大致流程:

  • 初始化本地库后会有master分支,HEAD指针指向master,新建一个testing分支时,相当于新建一个指针指向同一个文件版本
  • 切换分支,将HEAD指针指向testing分支支
  • 提交只会影响testing分支,不会影响master分支
  • 切换回master,将HEAD指针重新指向回master,效率高,只是移动一个指针,不涉及文件复制,master提交,分别指向不同的版本,形成分叉
  • 分别进行不同分支的迭代

分支冲突问题

当修改了同一文件中的同一位置,Git 自动合并分支时无法选择版本,发生冲突
在这里插入图片描述
文件内部显示冲突:(HEAD指向当前分支状态)

解决:
分辨分支内容,删掉特殊符号,商讨修改文件
编辑文件,删除特殊符号
把文件修改到满意的程度,保存退出
git add [filename]
git commit “日志信息”(不带具体文件名)

Git 工作流----Gitflow

master分支 :主干,上线的代码是以master分支为准的
hotfix分支 : 生命周期短,及时线上解决master的bug,尽快合并回主干
release :预发布分支
develop分支 :作为开发过程中的基准
feature_goldstyle 和 feature_game分支:需要开发的新功能 ,不直接在master进行开发,创建新的分支进行代码迭代,之后将多个分支开发过程中做的修改合并回develop。

在这里插入图片描述
实际开发过程中可以选择性减少分支

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值