1.集中型的版本控制工具和分布式版本控制攻击的区别
1.1 集中型的版本控制工具
- SVN,CVS,VSS
优点:
1)实现大部分开发中对版本管理的需求
2)结构简单,上手容易
缺点
1)对中央仓库依赖严重,一旦损坏了,历史数据怎么回复?
2)程序员上传的都是完整版的,如何追溯查询》
3)系统正在上线运行,需要改bug或增加新功能的时候,这时候如果管理这些不同操作版本?
4)如何管理第三方开发
1.2 分布式版本控制工具
git的诞生便可以解决集中式版本控制工具带来的问题
git的作用:
- 协同开发
- 版本记录
- 冲突解决
- 历史追溯
- 代码备份
- 权限管理
- 分支管理
- 代码审查
- …
2.使用git,首先要安装–再windows中安装git
2.1 git的安装
3.初始化本地参考以及基本命令的使用
3.1 配置签名以及初始化本地仓库
-
选中你要作为git工程存放的目录,然后单击鼠标右键选择git bush即可,如下图:
-
便进入如下页面
注意:git是分布式版本控制工具,所以我们需要填写用户名和邮箱作为一个标志。
可以在你电脑的C:\Users\用户名路径下的.gitconfig文件,这个文件里面可以看到–global属性,所有的git项目都会公用这个属性
我的如下:
然后在git下输入以下命令完成签名(这是你只要要将项目代码push到远程的github上的准备,也是你的身份的一个标识) -
git config --global user.name "xxxx1"
-
git config --global user.email "xxxx2"
tips: 这里的xxx1和xxx2分别是你在.gitconfig文件下看到的用户名和邮箱账号
上面命令执行完成之后,执行以下命令初始化本地仓库 -
git init
3.2 基本命令的操作
1)查看文件状态
- git status
2)将文件/目录添加到git的临时暂存区
- git add 文件名/目录名
比如:git add src/HelloWord.java
注意:通过git add 命令的文件提交到暂存区中,但是这里的文件并没有真正的提交,使用git commit 命令才是把他提交到一个统一的版本文件
3)提交文件
- git commit
注意:当有文件被修改的时候/添加/删除的时候,都要重新git add,然后再git commit
4)查看日志
- git log
- git log --pretty=oneline
如下:
上面命令的举例使用如下:
5)回退历史
**说明:**当你对同一个文件进行了多次修改之后,你想回退到之前修改得到历史记录,那么可以使用
- git reset --hard HEAD^1
说明:HEAD是一个指针,永远指向最新版本,^1表示让HEAD指针指向上一个版本
6)回退到多个版本
- git reset --hard HEAD^2 (回退到2个版本之前的版本)
7)当你向回退到指定的版本号时
- 先使用 git reflog 查看历史记录的版本号
- 再使用git reset --hard id(便可以回退到指定id的版本号,这个id可以通过上个命令查看到)
- 具体举例如下
4.工作区、缓存区、本地库
4.1 概念
- 工作区:电脑本地的磁盘目录
- 暂存区:一般时.git目录下的index文件,所以有时候我们把暂存也叫做索引
- 本地库:工作区中有一个你最初使用git init初始化的 .git 目录,这个就是git的本地版本库
下面我简单描述以下三者之间的关系(工作原理)
1)首先我们创建一个名为code的目录,我们想将其作为git工程存放的目录,然后对其进行签名和初始化等操作之后,你便可以在该目录下进行你的项目开发;
2)这是当你产生了心得文件之后,你要将其上传到git本地仓库中,那么就是需要进行两个步骤
- git add (将工作区的文件上传到git暂存区)
- git commit (再上传到本地仓库,即git的版本库
5.分支介绍
说明:
当项目已经上线了,但是产品经理又提供了心得需求,评估实现这个新功能需要一定的时间,但是项目还是需要在线上运行,同时又不能避免bug的修改,因此,分支就应运而生了;分支就是用来协助管理不同版本的独立开发的;最后所有分支才会合并为主分支上master
5.1分支的相关命令
1)新建分支
- git branch common
2)查看分支
- git branch -v
3)切换到指定分支
- git checkout common
如下:
4)合并分支
合并分支的步骤:
1)首先要先切换带到主分支下
- git checkout master
2)再使用git merge 分支名 合并分支
- git merge 分支名
比如:git merge common
6.冲突
说明:
冲突一般是值同一个文件同一个位置的代码,两种版本的仓库合并时,版本的管理软件无法判断到底应该保留哪一个版本,因此会提示该文件发生冲突,冲突一般都需要程序员手动解决
7.GitHub的介绍以及使用
(这里主要介绍多人开发的情况)
1.开发者A的操作
1.1 建立本地仓库
1.2 使用你的github站好创建一个远程仓库,便可到远程仓库的url地址
1.3 推送代码到远程仓库
1)首先是增加远程地址
- git remote add 远程代号 远程地址
例如:git remote add origin https://github.com/rock…/kongfu.git(这里地址只是举例说明)
说明:
远程代号:指远程连接的代号,一般直接使用origin做代号,也可以自定义
远程地址:即是你再github上新建项目的仓库地址url
2)然后再推送到远程库
- git push 远程代码 分支名
如:git push origin master
以上便是开发者A的操作
2.开发者B的操作
2.1 从GitHub上下载远程代码
- git clone url 项目目录名
例如:git clone https://github.com/rock…/kongfu.git kongfu
说明:
-url:是开发者A上传到github的远程仓库地址
-项目目录名:指为克隆项目在本地新建一个目录名,可以不填,那么会默认使用github的仓库名
2.2 开发者B进行修改文件
主要命令:
- git add 文件内目录
- git commit -m ”log“
- git push origin master (这里是开发者B将其代码推到分支master下,这个master分支也就是开发者A的分支)
总:
开发者B将修改的文件成功上传到远程github之后,那么开发者A也需要同步跟新代码
- git pull 远程代号 远程分支
总结:
即是开发者A在其本地完成了自己的项目代码之后,其上传到了远程仓库GitHub上了;
那么由于是多人开发,可能对应不同的功能模块,那么开发者B要将开发者A的代码克隆到本地,或进行一些代码修改,修改完成之后,也需要提交上传到远程仓库github;于此同时,开发者A要同步B修改的代码,也要重新下载同步代码到本地…如此进行下去
8.协作冲突
如:B后来提交的文件与A先前提交的文件发生了冲突,那么此时开发者B是哟了那个命令:git push origin master想将代码推到master分支(A)上是不可以的,同时,想通过将代码下载到本地再修改也是不行的,如下:
那么就需要人工进行冲突处理
1)首先使用命令查看文件
- ll
2)然后使用命令手动修改冲突文件(这里举例冲突文件为打狗棒法.txt)
- vi 打狗棒法.txt
进入打狗棒法.txt文件如下
3)经修改之后,需要使用命令git add、git commit提交再使用push将其推倒特定分支下(这里举例的分支是master也就是开发者A这个分支)
9.第三方团队参与的场景