一、版本控制

1、什么是版本控制

一种在开发的过程中用于管理我们读文件,目录或者工程等内容的修改历史,方便查看更改历史记录,备份以便恢复一千的版本的软件工程技术

  1. 1、实现跨区域多人协同开发
  2. 2、追踪和记载一个或者多个文件的历史记录
  3. 3、组织和保护你的源代码和文档
  4. 4、统计工作量
  5. 5、并行开发,提升开发效率
  6. 6、跟踪记录整个软件的开发过程
  7. 7、减轻开发人员的负担,节省时间,同时降低人为错误

2、为什么要有版本控制

  1. 在软件开发过程中,每天都会产生新的代码,代码合并的过程中可能出现如下问题:
  2. 1、代码被覆盖或者丢失
  3. 2、代码写的不理想,希望还原之前的版本
  4. 3、希望知道与之前版本的差别
  5. 4、是谁修改了代码以及为什么修改
  6. 5、发版时希望分成不同的版本(测试版,发行版等)
  7. 我们希望有一种机制,能够帮助我们:
  8. 1、可以随时回滚之前的版本
  9. 2、协同开发是不会覆盖别人的代码
  10. 3、留下修改记录,以便随时查看
  11. 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的下载与安装

https://git-scm.com/downloads

三、初始化本地仓库

1、Git本地结构

Git! - 图1

2、代码托管中心

在Git中有了本地库,本地库就可以帮我们进行版本控制,为什么还要代码托管中心呢?
代码托管中心的任务是帮我们维护远程库
本地库和远程库的交互方式:
团队内部协作
跨团队协作
托管中心种类:
局域网环境,可以搭建GitHab服务器作为代码的托管中心,GitHab可以自己去搭建
外网环境下,可以由GitHub或者Gitee作为代码托管中心,现成的托管中心,不用自己搭建

3、初始化本地库

本地库其实是代码的仓库,英文名repository你可以简单理解成一个目录,在这个目录里边的所有文件都可以Git管理起来,每个文件的修改,删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以‘还原’,由于Git是分布式版本管理工具,所以git在不需要联网的情况下的情况下也具有完整的版本管理能力
1、创建目录
2、打开Git终端

  1. 查看Git版本:
  2. git --version
  3. 创建用户名:
  4. git config --global user.name "git的用户名"
  5. 定义邮箱:
  6. git config --global user.email "qq邮箱即可"

3、初始化本地仓库

  1. 进入本地仓库文件夹:
  2. git init :初始化本地仓库
  3. 初始化成功之后,在当前目录下有一个隐藏的目录.git
  4. 这个文件不可随意删除,否则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为退出查看日志记录
其他日志查看方式:

  1. 方式一:
  2. git log --pretty=oneline
  3. 方式二:
  4. git log --oneline
  5. 方式三:
  6. git reflog

4、reset

前进或者回退某一个历史版本

  1. git reset --hard (由方式三查出来的HEAD的地址)
  2. 回到HEAD地址表示的那个版本

head的参数特点:
在操作本地库的据指针的同时,会重置缓存区,工作区

5、删除命令

rm 文件名.类型

6、diff

将工作区中的文件和暂存区中以及本地本地库中的文件进行比对,内容是否一样
工作区和暂存区:
1、创建一个文件,添加到暂存区,再提交到本地库
2、修改文件的内容
3、使用 git diff [文件名]
多个文件进行比较:
比较工作区中和暂存区中所有文件的差异
git diff
暂存区和本地仓库的比较:
第一种:
将工作区的文件提交到缓存区,比较缓存区中的文件和本地区中的文件的内容
git diff HEAD 文件名
最后将缓存区中的文件提交到本地区
第二种:
此时修改工作区中的文件,提交到缓存区中
这时,跟本地工作区中的文件中的内容比较,利用索引进行比较
git diff [索引值][文件名]

五、分支

1、查看分支

  1. git branch -v

2、创建分支

  1. git branch 分支名称

3、切换分支

  1. git checkout 分支名称

4、合并分支

  1. git merge 分支名称

六、Git远程仓库

1、github账号注册

https://github.com/

2、初始化本地仓库

  1. $ git init

3、创建GitHub远程仓库

1、New repository
2、起仓库名称
3、填写仓库描述
4、点击新建仓库按钮

4、给本地仓库起别名

  1. 查看当前仓库的别名:
  2. git remote -v
  3. 起别名:
  4. git remote add 别名名称 远程仓库地址
  5. * feth: 代表可以从该地址获取文件
  6. * push: 代表可以从该地址推送文件

5、git推送操作

本地仓库文件上传到远程仓库

  1. $ git push 远程仓库别名 分支
  2. 1、输入github的用户名和密码
  3. 2OpenSSH,输入github的用户名密码

6、git克隆操作

从远程仓库拉取文件到本地仓库

  1. git clone 远程仓库地址
  2. - 初始化本地仓库
  3. - 将远程库内容完整的克隆到本地
  4. - 替我们创建远程库的别名

7、拉取远程仓库

fetch(拉取)和merge(合并)

  1. 将远程仓库中的内容拉取到本:
  2. $ git fetch 远程仓库名称 远程仓库对应的分支
  3. 切换到远程仓库查看内容:
  4. $ git checkout origin/master
  5. ll --查看文件列表
  6. cat 文件名 --查看文件的内容
  7. 合并操作:
  8. git merge origin/master

如果代码简单,不考虑内容的情况下,可以使用pull

  1. $ git pull origin master
  2. 出现Already up to date 表示已经完成更新,就是拉取成功

8、协同开发冲突问题

1、拉取文件到本地
2、修改内容,然后推送
3、冲突解决

七、SSH免密登录

1、进入用户的主目录,就是c盘下的主机名目录下
2、执行一条命令

  1. $ 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连接起别名

  1. git remote add originssh SSH连接地址

目的:消除了使用Https连接推送文件时每次都需要输入用户名密码的问题!

八、Git在IDEA中的操作