版本控制工具
什么是版本控制工具
工程设计领域中使用版本控制管理工程蓝图的设计过程。在 IT 开发过程中也可以 使用版本控制思想管理代码的版本迭代。
版本控制工具具有的功能
- 协同修改
多人并行不悖的修改服务器端的同一个文件。
- 数据备份
不仅保存目录和文件的当前状态,还能够保存每一个提交过的历史状态。
- 版本管理
在保存每一个版本的文件信息的时候要做到不保存重复数据,以节约存储空间,提高运行效率。这方面 SVN 采用的是增量式管理的方式,而 Git 采取了文件系统快照的方式。
- 权限控制
对团队中参与开发的人员进行权限控制。对团队外开发者贡献的代码进行审核—Git 独有。
- 历史记录
查看修改人、修改时间、修改内容、日志信息。将本地文件恢复到某一个历史状态。
- 分支管理
允许开发团队在工作过程中多条生产线同时推进任务,进一步提高效率。
Git介绍
是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
Git的优势
- 大部分操作在本地完成,不需要联网
- 完整性保证
- 尽可能添加数据而不是删除或修改数据
- 分支操作非常快捷流畅
- 与 Linux 命令全面兼容
Git结构
- Git的团队合作
- 常用的远程库:
- 外网 Github和码云
- 局域网 GitLab 服务器
Git基本命令
git init:初始化本地库,初始化完成后会有一个 .git文件夹存放的是本地库相关的子目录和文件
git status:查看工作区、暂存区状态
git add【filename】:提交文件到暂存区
git add . : 提交所有文件到暂存区
git commit -m "commitmessage" 【filename】:将暂存区的某个文件内容提交到本地库
git commit -m "commitmessage":将暂存区的所有文件提交到本地库
git log:查看历史版本
git reset --hard【局部索引值】回退到某一个版本
git reset --hard HEAD^ 回退一个版本
- reset命令的三个参数对比
- --soft 参数:只回退本地库的指针
- --mixed 参数:回退本地库和暂存区
- --head 参数:回退本地库、暂存区和工作区
如果你真的需要回退,你需要根据是否执行了add、commit命令来进行具体的回退过程
git checkout 【fileName】:将文件按照本地库的最新记录还原。
git diff 【fileName】:将工作区中的文件和暂存区进行比较。
分支管理
在版本控制过程中,使用多条线同时推进多个任务。
- 分支的好处
- 同时并行推进多个功能开发,提高开发效率
- 各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。失败的分支删除重新开始即可
- 分支操作
gitbranch【分支名】:创建分支
gitbranch-v:查看分支
gitcheckout【分支名】:切换分支
合并分支:
- 切换到接受修改的分支(被合并,增加新内容)上 git checkout【被合并分支名】
- 执行 merge 命令 git merge【有新内容分支名】
- 解决冲突
- 编辑文件,删除特殊符号
- 把文件修改到满意的程度,保存退出
- git add[文件名]
- git commit -m"日志信息"
注意:此时 commit 一定不能带具体文件名,如果出现冲突则需要程序员自己修改代码来解决冲突问题。
Git存储原理
Git 的文件管理机制 Git 把数据看作是小型文件系统的一组快照。每次提交更新时 Git 都会对当前的全部文件制作一个快照并保存这个快照的索引。为了高效,如果文件没有修改, Git 不再重新存储该文件,而是只保留一个链接指向之前存储的文件。所以 Git 的 工作方式可以称之为快照流。
GitHub
GitHub是最大的开源代码托管平台,旨在促进在一个共同项目上工作的个人之间的代码托管、版本控制和协作。通过该平台,无论何时何地,都可以对项目进行操作。
- 也是我们平常使用最多的场景。
- 首先再GitHub上创建自己的仓库
- git remote add【别名】【远程地址】:创建远程库地址别名
- git push 【别名】【分支名】:推送到 GitHub 仓库
- git clone 【GitHub地址】:把仓库中的所有代码拷贝到本地库
-
git pull 【远程库地址别名】【远程分支名】:将项目拉取下来,主要是为了共同开发项目,和clone的区别就是pull需要在本地初始化.git,并且只能pull当前分支的内容。
-
GitHub的分支冲突问题
- 如果不是基于 GitHub 远程库的最新版所做的修改,不能推送,必须先拉取。
- 拉取下来后如果进入冲突状态,则按照“分支冲突解决”操作解决即可。