在企业开发中Git和SVN这两类版本控制工具必不可少,SVN属于集中式版本控制工具,Git属于分布式版本控制工具,本文主要对Git的使用和相关原理进行记录 |
---|
参考视频(尚硅谷Git&GitHub)
https://www.bilibili.com/video/BV1pW411A7a5
1 版本控制工具简介
版本控制工具应具备如下功能:
1)协同修改 :多人并行不悖的修改服务器端的同一个文件。
2)数据备份 :不仅保存目录和文件的当前状态,还能够保存每一个提交过的历史状态。
3)版本管理 :在保存每一个版本的文件信息的时候要做到不保存重复数据,以节约存储空间,提高运行效率。这方面 SVN 采用的是增量式管理的方式,而 Git 采取了文 件系统快照的方式。
4)权限控制 :对团队中参与开发的人员进行权限控制。 对团队外开发者贡献的代码进行审核——Git 独有。
5)历史记录 :查看修改人、修改时间、修改内容、日志信息。 将本地文件恢复到某一个历史状态。
6)分支管理 :允许开发团队在工作过程中多条生产线同时推进任务,进一步提高效率。
关于Git的安装较为简单,可参考如下博客:
https://www.cnblogs.com/xueweisuoyong/p/11914045.html
2 Git结构
3 Git与其托管中心
4 本地库与远程库
4.1 团队协作
4.2 跨团队协作
5 Git的命令行
#先列出常用的命令
git status //查看工作区或者暂存区状态
git add //将工作区的内容添加到暂存区
git commit // 将暂存区中的内容提交到本地库
git log //查看提交日志
git reflog //获取日志并显示移动到某一版本需要对head移动几步
git reset --hard [局部索引值] 重新定位版本
git reset --hard HEAD^ //只能后退版本 后面加几个^就会后退几步
git reset --hard HEAD~[n]//只能后退版本,后退n步
git diff [文件名] //工作区和暂存区内的文件进行比较,比较文件之间的差异
git diff [本地库中的历史版本][文件名] //工作区和本地库某一历史版本文件进行比较
git branch -v //查看有多少个分支
git branch [分支名称] //创建新的分支
git checkout [分支名] //切换分支
//如果想合并分支,应先切换到接受修改的分支,然后再执行合并操作
git merge [被合并的分支的名字]
git remote add [别名] [github远程地址] //给远程地址起一个别名
git push [远程地址/远程地址的别名] [分支名] //把本地仓库内容推送到远程仓库
git clone [远程地址] //把远程仓库的内容克隆下来到本地,如想要对其操作要进入到克隆的目录
//pull=fetch+merge
git fetch [远程库地址别名/远程库地址] [远程分支]
git merge [远程地址别名//远程分支名]
5.1 本地库初始化
在本地创建以工作空间来充当自己的项目,比如d:/workspace/gitspace,然后执行如下命令,
git init
命令执行后会在当前目录下自动创建出.git/ 其目录结构如下:
注意:.git/ 里面存放的是本地库相关的子目录和文件,不能删除
5.2 设置签名
作用:区分不同开发人员的身份;
形式: 用户名:tom Email地址:fhdash@123.com
注意:这里设置的签名和远程库的账号密码完全不是一回事。
命令:该命令可以分为项目级别(仓库级别)和系统级别两种,项目级别签名在项目内有效,而系统级别的签名可以在整个系统用户登录中有效,系统级别的作用范围大。
#仓库级别
git config user.name tom #设置用户名
git config user.emil fhdash@123.com #设置邮箱地址
#系统级别
git config --global user.name tom1
git config --global user.email kdjfkdjfkdf@fd.com
5.3 向暂存区添加内容
5.4 把某一内容从暂存区删除
执行删除操作后可以看出,对暂存区执行删除操作后,暂存区中的该内容被删除,但是工作区中依旧保存着该内容。
5.5 将暂存区中的内容commit到本地库
执行 git commit good.txt 命令后会进入到如下界面
这其实是进入了vim,此时要对vim文件insert一些注释信息,表明这次提交的改动。
如果不想进入vim编辑器,也可以采用如下操作进行:
5.5 实现版本的前进和后退
git log 可以查log文件,其中head是一个指针,指向着当前的版本
也可以以一种简单的方式对版本链进行显示,如下:
版本前进后退的操作:
5.6 永久删除文件后如何找回
其实就是一个版本后退的操作 退回到删除以前的版本
5.7 比较文件差异
6 git的分支管理
什么是分支:在版本控制过程中,使用多条线同时推进多个任务。
创建项目时(一般是服务型项目,工具型或辅助型项目可以简单一些),会针对不同环境创建三个常设分支:
develop:开发环境的稳定分支,公共开发环境基于该分支构建。
pre-release:测试环境的稳定分支,测试环境基于该分支构建。
master:生产环境的稳定分支,生产环境基于该分支构建。仅用来发布新版本,除了从pre-release或生产环境Bug修复分支进行merge,不接受任何其它修改
平时开发工作中,会根据需要由开发人员创建两类临时分支:
功能(feature)分支:为了开发某个特定功能,从develop分支上面分出来的。开发完成后,要merge到develop分支。功能分支的命名,可以采用feature-*的形式命名(*为任务单号)
Bug修复(fixbug)分支:为了修复某个bug,从常设分支上面分出来的。修复完成后,再merge到对应的分支。Bug修复分支的命名,可以采用fixbug-*的形式命名(*为bug单
远程库中遇到的问题
跨团队协作