一、概述
1、什么是版本控制
不管是个人开发项目中的迭代需求,还是团队对同一项目的开发修改,都需要一个工具记录每个人的处理记录,处理详情。
2、版本控制工具
集中式的版本控制工具cvs svn vss
分布式的版本控制工具git darcs bazaar
3、版本控制工具应该具有的功能
协同修改->多人并行不勃的修改服务器端的同意文件
数据备份->保存目录和文件的当前状态,还记录每一个提交过的状态
版本管理->保存每一个版本不会保存重复的文件,节约空间,提高效率,svn采用的是增量式管理,但是git采用的是文件系统快照的方式
权限控制->对团队开发人员进行权限控制,对团队外的开发者贡献人员进行代码审核,git独有的
历史记录->查看修改人修改时间修改目录 修改信息 日志信息
将本地文件回复到某一个历史状态
分支管理->允许多个开发者同时推进生产线,提高开发效率
4、git优势
大部分操作都在本地完成不需要联网
完整性保证
二、安装
git是一个版本共控制工具,但是代码托管中心是用来维护远程的仓库的,比如局域网使用Gitlab,外网使用Githu(国外)+码云(国内)都是
地址:Git
版本控制工具Git的本地结构
三、使用
1、初始化本地仓库命令
git init (项目根目录下出现一个.git文件 .git文件存放的是本地库相关的子目录和文件,不要胡乱修改,也不要删除)
2、设置签名
干什么的
用于区分不同开发人员的身份,注意与代码托管中心的密码账号没有任何关系
格式
用户名: lph
Email地址:lph@qq.com
命令
用户级别(仓库级别) :(当前项目下创建,签名信息保存的位置当前目录git中的config中,仅当前项目范围内起作用)命令如下
git config user.name lph_pro
git config user.email lphluck_pro@139.com
系统级别:登陆当前系统的用户范围,签名及信息保存的位置
注意:
*用户级别和系统级别中两必须有一个,就近原则,项目级别优先于系统用户级别
*一般项目中有一个就行,系统的就可以
3、查看工作区、暂存区状态
4、将工作区中添加或者修改过的文件添加到暂存区
git add 文件名
所有的文件添加到暂存区 gti add .
从暂存区中删除 git rm --cached test.txt
5、把暂存区文件提交到本地仓库形成历史记录
git commit -m "first commit"
查看历史提交记录
git log
另外几种查看记录的命令
6、添加远端仓库地址到本地仓库
登录仓库平台(coding、github、gitee)创建一个项目仓库不建议生成readme以及gitagnore,复制https地址,地址太长了 起个别名,通常默认的远程仓库地址叫origin
git remote add origin https://github.com/xxx/xxx.git
- 推送到远程仓库 origin代表上面的地址
git push -u origin master
- 代码有改变之后
git add
git commit
# 推送到远程仓库 推送的时候如果不改变远程仓库和分支的话就直接
git push
# 如果推送的远程仓库或是分支改变了
$ git push -u 远程仓库 分支名称
备注
1、关于git push -u origin master
其实完整写法如下 将本地master推到远程master
git push --set-upstream https://github.com/xxx/xx.git master:master
因为给地址https://github.com/xxx/xx.git起了别名origin可以用别名
--set-upstream表示记住这次提交路径 是到master 下次就直接git push 不再git push --set-upstream https://github.com/xxx/xx.git master:master
而--set-upstream可简写为-u
本地master推到远程master:master可以简写master
所以最终是
git push -u origin master
2、管理远程仓库地址信息
# 查看使用帮助
git remote --help
# 查看所有的远程仓库信息
git remote -v
# 添加远程仓库地址信息
git remote add 名称 远程仓库地址
# 删除指定的远程仓库信息
git remote remove 名称
# 修改远程仓库地址信息
git remote set-url 远程仓库地址名称 新地址
7、模拟新入职人员开发流程
git clone 项目地址 将项目克隆到本地,并且同时初始化当前目录为git 目录
git add .
git commit
git push 将修改的代码推到远程
说明:如果没有弹出窗口,是因为windos系统有个web凭证管理,
原因是当前这个用户没有加入到团队中,所有push推动出错
所以在GitHub中要邀请当前这个用户加入团队
然后当前这个团队成员就可以重新提交了
Pull拉去操作
第一种先fetch然后merge
看好之后如果文件没有啥问题再进行合并
第二种直接使用pull
为了保险,使用第一种,简单的使用第二种就行
解决协同开发冲突
如果不是基于github远程库最新版所做修改该 ,不能推送 必须先拉去,拉去下来如果有冲突先解决冲突,然后操作推送即可
8、跨团队开发
当收到发送的连接,然后进行一下操作
然后东方不被可以克隆文件到本地 做了修改并且推到东方不被远程仓库,接下来
至此团队外的一个帮手任务已经做完了,下面就是团队中的岳不群的操作了
9、SSH免密登陆
进入项目目录删除.ssh目录
rm –rvf .ssh
运行生成.ssh密钥目录
$ ssh-keygen -t rsa -C lph@163.com
注意:C大写
进入ssh目录
cd .ssh
查看内容
ll
cat id_rsa.pub
复制内容 登陆github
服务器上的工作完成了
注意:上面的ssh地址如下图获取
10、分支开发
一般开发前都是先创建一个分支,基于这个分支开发开发当前功能,开发完成之后合并到master
创建一个分支,并且换到创建的分支
//创建一个user分支 并且切换到user
git checkout -b user
查看当前分支 带星号就是当前所处分支
$ git branch
master
* user
切换到指定分支,比如主分支
git checkout master
合并分支
把user分支合并到当前所处分支
git merge user
11.本地文件删除和找回
Git前进或者后退到指定版本的本质是对指针head的操作
基于索引值操作(推荐)
基于^操作:只能后退
一个^表示后退一步
基于~操作:
Reset后面的三个参数的对比
-soft仅仅是移动HEAD指针
-mixed移动指针并且重置暂存区
-hard移动HEAD指针,重置缓存区,重置工作区
12、找回本地库中被删除的文件
已经对demo.txt文件执行了git commit 操作,然后rm demo.txt文件 从工作区删除了
虽然上面的文件被删除了,但是git对应的每个版本的文件是不会删除的,所以可以找回删除之前的一个版本的文件
同样如果进入删除时候的版本,当前文件也就不存在
13、添加到暂存区的删除文件找回
14、比较文件差异
第一种比较命令:Git diff 文件名
比较的是工作区和暂存区中的文件区别
第二种比较命令:git diff 历史版本文件名
将工作区中的文件和历史记录中的文件进行比较
第三种比较命令:不写文件名比较多个文件