- 版本控制系统
- 什么是vcs
- Version control system的简称,是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统
- Vcs的发展
- 本地vcs
- 手工即可
- 集中式VCS
- Cvs,svn
- 分布式VCS
- Git,bitkeeper,Mercurial
- 本地vcs
- 什么是vcs
- Git工作原理
- Git是什么
- 开源的分布式版本控制系统 ,去中心化.
- 大小项目均可以灵活管理,参与开发人员比较灵活.
- Linux的代码管理工具bitkeeper不适合开源社区,故Torvalds推出了GIT
- 工作原理
- 工作构架:
- Git是什么
远程仓库(中心服务器)←→本地仓库(本地)←→暂存区(本地)←→工作目录(本地)
-
- 工作流程图
-
- Git与其他VCS(version control system)对比
- 架构设计不同
- 老VCS主要是cvs,svn,都是集中式的
- 分支管理
- 先有项目,后又分支,后有版本,分支的范围比版本要高一级
- Git的分支只要不提交合并,对别人没任何影响
- Svn的分支是完整的目录,你改了svn的分支,所有人的分支都随你而变
- 分支命名:git的分支在本地和远程是自由匹配,而svn全局统一的
- 内部数据存储方式
- 老vcs是以按文件为单位来存储元数据,git同意存储管理元数据,存放在称为.git的目录内
- Git与github关系
- Git是一个分布式的版本控制系统,最初应该用在Linux源码协同开发中
- GitHub是一个基于git的项目托管平台,提供web界面,可以在上面创建资源仓库来存放的项目
- GitHub的同类产品
- GitLab:相当于私人版的github,多用于企业内部开发人员的代码版本管理
- Gitee(Git@OSC):相当于国内的github
- CSDNgit:相当于国内的github
- Bitbucket
- 架构设计不同
- Git与其他VCS(version control system)对比
- Git shell应用
- Linux git shell安装
- Git安装
- Linux git shell安装
Yum install git
-
-
- Git配置
-
Git config --global user.name “YourName”
Git config –-global user.email “YourEmail”
-
- Git命令
- 创建本地版本库
- Git命令
Cd ~ //进入到家目录
Mkdir local_repo//创建文件夹,作为版本仓库的目标目录
Cd local_repo//进入新创建的文件夹
Mkdir FirstGit//在根目录下,创建第一个要进行git版本管理的文件夹
Cd FirstGit//进入项目所在的文件夹
Git init//创建本地git
-
-
- 创建待git管理的文件
-
Touch input.txt
Echo “I am a new file, I will be added to git vcs”>input.txt
-
-
- 将文件添加到代码库
-
git add input.txt//提交文件到缓存区
git commit -m “first commit”//提交文件到本地库
-
-
- 查看版本仓库状态
-
Git status
-
-
- 查看具体的差异点
-
比较-工作区和缓存区差异
Git diff working_file_path
比较-缓存区和本地仓库差异
Git diff –-cached input.txt
比较-工作区和本地仓库差异
Git diff HEAD input.txt
提交之前的变化文档input.txt
Git add input.txt
Git commit -m “Second commit”
再次git status 查看状态
git 日志查看
git log
查看分支的所有操作记录
Git reflog
-
- 版本回退
- 回退到当前版本的上一个版本
- 版本回退
Git reset –-hard HEAD^//回到当前版本的上一个版本
Git reset --hard HEAD@{1}//回到指定版本
-
- 撤销修改
- 场景一:工作空间文件已修改(但此文件已加入到版本库管理),但没有add到缓存区
- 手动还原已修改的文件.---最原始的方法
- 用版本库中复原工作区的文件
- 场景一:工作空间文件已修改(但此文件已加入到版本库管理),但没有add到缓存区
- 撤销修改
Git checkout –-filelpath//将版本库中的指定文件覆盖掉工作区中的指定文件
-
-
- 场景二:工作空间已修改(曾经被添加到版本库中),已添加到缓存区,但没有添加到版本库
-
Git reset HEAD filepath//将改filepath对应的缓存区的内容删除掉,对工作区没有任何改动相当于回到了场景一,再进行get checkout---filepath
-
-
- 场景三:工作空间已修改,已经添加到缓存区,且已添加到版本库,但没有推到远程库
-
直接按版本回退来处理即可
Git reset ---hard HEAD^
Git reset ---hard HEAD@{1}
-
-
- 场景四:rm -rf误删某文件的还原
-
Rm -rf filepath //在工作目录中误删某个文件
Git checkout ---filepath //将版本库中的文件还原到误删的文件中
-
-
- 场景五:git rm 误删git文件的还原,并没有commit提交
-
Git reset HEAD filepath//将该文件在缓存区的删除操作移除掉
Git checkout ---filepath//从缓存区移除对该文件操作后,即可按应用场景4的操作还原
-
- 远程仓库操作
- 关联远程仓库
- 在gitlab web界面中,先创建组
- 在组内,创建自己的项目
- 在本地仓库远程仓库添加别名
- 关联远程仓库
- 远程仓库操作
git remot add远程仓库名[url]
-
-
-
- 查看远程仓库信息
-
-
git remot //显示远程仓库的关联分支
git remot -v //查看远程仓库的详细信息,显示远程的操作权限,fetch和push权限
-
-
-
- 推送本地仓库到远程库
- Git push[remote-name][local-branch-name]:[remote-branch-name]
-
- 从远程库同步数据到本地库(协作开发)
-
Git clone[url]
Git fetch:从远程把数据拉取到本机
Git merge:将拉去过来的数据合并到本地仓库分支中
Git merge FRTCH_HEAD
-
- 分支管理
- 什么是分支
- 针对不同用途或重大更新,给项目起的不同用途的名字,用以显示区分各个项目版本之间的不同
- 什么是分支
- 分支管理
Git branch//查看分支
Git branch -r//查看远程分支
Git branch -a//查看所有分支
创建分支与切换分支:
Git branch branchName//创建分支
Git checkout branchName//切换分支
-
-
- 分支的作用
-
Git checkout -b dev//创建并切换分支
-
-
-
- 为了更好、更清晰、更简洁、更专业的版本迭代、开发效率提升而应用
- 分支设计
- Master分支:存放的均是项目最稳定的代码,用于直接发布、构建、部署运行
- Developer分支—开发团队
- Test分支—测试团队
- 临时分支—一些新增、临时的特性或功能开发
- 分支操作
- 查看本地分支
- 查看远程分支
- 查看所有分支
- 创建分支与切换分支
- 创建并切换分支
- 删掉分支
- 推送新的分支到远程
- 分支合并
- 正常合并
-
- 冲突合并
- 冲突原因
- 当多个分支或者多个开发者,同时修改相同的文件时,经常会出现合并冲突问题
- 构造冲突
- 解决冲突
- 冲突原因
-