一、版本控制
1、什么是版本控制
一种在开发的过程中用于管理我们读文件,目录或者工程等内容的修改历史,方便查看更改历史记录,备份以便恢复一千的版本的软件工程技术
1、实现跨区域多人协同开发
2、追踪和记载一个或者多个文件的历史记录
3、组织和保护你的源代码和文档
4、统计工作量
5、并行开发,提升开发效率
6、跟踪记录整个软件的开发过程
7、减轻开发人员的负担,节省时间,同时降低人为错误
2、为什么要有版本控制
在软件开发过程中,每天都会产生新的代码,代码合并的过程中可能出现如下问题:
1、代码被覆盖或者丢失
2、代码写的不理想,希望还原之前的版本
3、希望知道与之前版本的差别
4、是谁修改了代码以及为什么修改
5、发版时希望分成不同的版本(测试版,发行版等)
我们希望有一种机制,能够帮助我们:
1、可以随时回滚之前的版本
2、协同开发是不会覆盖别人的代码
3、留下修改记录,以便随时查看
4、发版时可以方便的管理不同的版本
3、常见的版本控制工具
Git,SVN,CVS,VSS,TFS,Visual Studio Online
4、版本控制分类
1、本地版本控制
记录文件每次的更新,可以对每个版本做一个快照,或是记录补丁文件,适合个人用,如RCS
2、集中版本控制
版本库是集中放在中央服务器,干活的时候用自己的电脑取得最新版本,然后干活,干完,再把自己的活推送到中央服务器,缺点是,必须联网,要是碰到服务器崩溃,这样就会丢失数据和用户,也无法切换版本验证问题:SVN,CVS,VSS
3、分布式版本控制
分布式版本控制没有中央处理器,每个人的电脑上都是一个完整的版本库,工作的时候无需联网
二、Git
1、Git的发展历史
Git是免费的,开源的,最初Git是为辅助LInux内核开发的,来替代BItKeeper
Git是目前世界上最先进的分布式版本控制系统
2、Git与SVN的区别
SVN:
SVN是集中版本控制系统,版本库是集中放在中央服务器的,而工作的时候,用的都是自己的电脑,工作前需要到中央服务器获取最新的版本,然后才能工作,工作完成后,需要把自己做完的活推送到中央服务器,集中式版本控制系统必须联网才能工作,对网络宽带要求较高
Git:
Git是分布式版本控制系统,没有中央处理器,每个人的电脑就是一个完整的版本库,工作的时候不需要联网了,因为版本都在自己电脑上,协同的方法是这样的:
比如说自己在电脑上改了文件A,其他人也在电脑上修改了文件A,这时,你们俩之间只需要把各自修改的推送给对方,就可以互相看到对方的修改了
==Git是目前世界上最先进的分布式版本控制系统==
3、Git的下载与安装
三、初始化本地仓库
1、Git本地结构
2、代码托管中心
在Git中有了本地库,本地库就可以帮我们进行版本控制,为什么还要代码托管中心呢?
代码托管中心的任务是帮我们维护远程库
本地库和远程库的交互方式:
团队内部协作
跨团队协作
托管中心种类:
局域网环境,可以搭建GitHab服务器作为代码的托管中心,GitHab可以自己去搭建
外网环境下,可以由GitHub或者Gitee作为代码托管中心,现成的托管中心,不用自己搭建
3、初始化本地库
本地库其实是代码的仓库,英文名repository你可以简单理解成一个目录,在这个目录里边的所有文件都可以Git管理起来,每个文件的修改,删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以‘还原’,由于Git是分布式版本管理工具,所以git在不需要联网的情况下的情况下也具有完整的版本管理能力
1、创建目录
2、打开Git终端
查看Git版本:
git --version
创建用户名:
git config --global user.name "git的用户名"
定义邮箱:
git config --global user.email "qq邮箱即可"
3、初始化本地仓库
进入本地仓库文件夹:
git init :初始化本地仓库
初始化成功之后,在当前目录下有一个隐藏的目录.git
这个文件不可随意删除,否则git将不可用
四、Git相关命令
1、add&commit
add命令:
是将本地文件提交到暂存区
例: git add hello.java
commit命令:
将暂存区的文件,真正提交到仓库中
例:git commit -m “这是提交的第一个文件Hello.java”
注意:
不放在本地仓库中的文件,git是无法进行添加暂存区的,就是不在那个初始化的目录下的文件无法使用add&commit命令
即使放在本地仓库中的文件,git也不会管理,必须通过”add,commit”命令才能将内容提交到本地库中
2、status
该命令用于查看工作区和暂存区的状态,简单来说就是,看一下仓库中是否有未被管理的文件
如果使用commit命令,对一个已经提交的文件进行提交,会提示没有需要提交的文件,在仓库中
在提交之前,我们可以用status命令,查看一下,是否需要提交的文件,如果有我们再进行提交
3、log
查看提交的日志记录
展示的列表是由近到远的顺序进行展示提交记录信息,如果展示太多,空格为下一页,b为上一页,END的出现表示最后一页,q为退出查看日志记录
其他日志查看方式:
方式一:
git log --pretty=oneline
方式二:
git log --oneline
方式三:
git reflog
4、reset
前进或者回退某一个历史版本
git reset --hard (由方式三查出来的HEAD的地址)
回到HEAD地址表示的那个版本
head的参数特点:
在操作本地库的据指针的同时,会重置缓存区,工作区
5、删除命令
6、diff
将工作区中的文件和暂存区中以及本地本地库中的文件进行比对,内容是否一样
工作区和暂存区:
1、创建一个文件,添加到暂存区,再提交到本地库
2、修改文件的内容
3、使用 git diff [文件名]
多个文件进行比较:
比较工作区中和暂存区中所有文件的差异
git diff
暂存区和本地仓库的比较:
第一种:
将工作区的文件提交到缓存区,比较缓存区中的文件和本地区中的文件的内容
git diff HEAD 文件名
最后将缓存区中的文件提交到本地区
第二种:
此时修改工作区中的文件,提交到缓存区中
这时,跟本地工作区中的文件中的内容比较,利用索引进行比较
git diff [索引值][文件名]
五、分支
1、查看分支
git branch -v
2、创建分支
git branch 分支名称
3、切换分支
git checkout 分支名称
4、合并分支
git merge 分支名称
六、Git远程仓库
1、github账号注册
2、初始化本地仓库
$ git init
3、创建GitHub远程仓库
1、New repository
2、起仓库名称
3、填写仓库描述
4、点击新建仓库按钮
4、给本地仓库起别名
查看当前仓库的别名:
git remote -v
起别名:
git remote add 别名名称 远程仓库地址
* feth: 代表可以从该地址获取文件
* push: 代表可以从该地址推送文件
5、git推送操作
本地仓库文件上传到远程仓库
$ git push 远程仓库别名 分支
1、输入github的用户名和密码
2、OpenSSH,输入github的用户名密码
6、git克隆操作
从远程仓库拉取文件到本地仓库
git clone 远程仓库地址
- 初始化本地仓库
- 将远程库内容完整的克隆到本地
- 替我们创建远程库的别名
7、拉取远程仓库
fetch(拉取)和merge(合并)
将远程仓库中的内容拉取到本:
$ git fetch 远程仓库名称 远程仓库对应的分支
切换到远程仓库查看内容:
$ git checkout origin/master
ll --查看文件列表
cat 文件名 --查看文件的内容
合并操作:
git merge origin/master
如果代码简单,不考虑内容的情况下,可以使用pull
$ git pull origin master
出现Already up to date 表示已经完成更新,就是拉取成功
8、协同开发冲突问题
七、SSH免密登录
1、进入用户的主目录,就是c盘下的主机名目录下
2、执行一条命令
$ ssh-keygen -t rsa -C github注册账号邮箱
3、打开id_rsa.pub文件,复制内容
4、登录github,打开setting配置
5、配置SSH and GPG keys
6、new SSH key,输入复制内容
7、在git中给ssh连接起别名
git remote add originssh SSH连接地址
目的:消除了使用Https连接推送文件时每次都需要输入用户名密码的问题!