目录
1、集中式(SVN) 与 分布式(GIT)管理的区别
集中式的版本控制系统都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。
在分布式版本控制系统中,客户端并不只提取最新版本的文件快照,而是把原始的代码仓库完整地镜像下来。这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。这类系统都可以指定和若干不同的远端代码仓库进行交互。籍此,你就可以在同一个项目中,分别和不同工作小组的人相互协作。你可以根据需要设定不同的协作流程。
SVN与GIT优缺点对比
- SVN优点: 1、 管理方便,逻辑明确,符合一般人思维习惯。 2、 易于管理,集中式服务器更能保证安全性。 3、 代码一致性非常高。 4、 适合开发人数不多的项目开发。
- SVN缺点: 1、 服务器压力太大,数据库容量暴增。2、 如果不能连接到服务器上,基本上不可以工作,看上面第二步,如果服务器不能连接上,就不能提交,还原,对比等等。 3、 不适合开源开发。
- GIT优点: 1、适合分布式开发,强调个体。 2、公共服务器压力和数据量都不会太大。 3、速度快、灵活。 4、任意两个开发者之间可以很容易的解决冲突。 5、离线工作
- GIT缺点: 1、学习周期相对而言比较长。 2、不符合常规思维。 3、代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息。
2、GIT的安装
Windows安装
- 访问地址:https://git-scm.com/
- 点击下载:https://git-scm.com/download/gui/win
- 开始安装,下一步,下一步。。。。。
Linux安装
- Yum install git
- 下载源码:https://github.com/git/git.git 编译安装。
3、GIT基本原理与工作流程
Git工作区
- Remote:远程仓库,托管代码的服务器,如项目组中的一台电脑用于远程数据交换(github)。
- Repository:仓库区(版本库),就是本地仓库,安全存放数据的位置,这里面所有提交版本的数据,其中HEAD指向最新放入的仓库版本。
- Index/Stage:暂存区,用于临时存放的改动,事实上,它只是一个文件,保存即将提交到文件列表的信息。
- Workspace:工作区,就是平时查看文件和编辑文件的区域。
Git文件状态(版本控制就是对文件的版本控制)
- Untracked:未跟踪,在此文件夹中,但没有加入到git库,不参与版本控制,通过git add 状态变为staged。
- Unmodified:文件已经入库,未修改,即版本库中的文件快照内容与文件夹一致,这种类型的文件有两种去处,如果被修改,变为modified,如果被移除版本库git rm,则变为Untracked
- Modified:文件已修改,仅仅是修改,并没有进行其他操作,这个文件有两个去处,第一个是staged,第二个是unmodified。
- Staged:执行git commit 则将修改同步到库中,这时库中的文件和本地文件虽为一致,文件为Unmodified。执行git reset HEAD filename取消暂存,文件状态为modified。
4、GIT基本操作
5、本地仓库提交远程仓库
Github账号配置
1、注册github账号
2、设置SSH Keys,ssh-keygen -t rsa -C "xxxx@xxx.com"
这句话打好以后把id_rsa.pub里面的东西复制到github配置里面
3、在github settings页面设置SSH Keys
设置远程仓库
1、在github中 Create a new repository
2、根据github的提示(第一次创建repository有提示),在本地仓库运行命令:git remote add origin https://github.com/github的账户名/xxxrepository名称.git
3、关联后,使用命令git push -u origin master第一次推送master分支的所有内容
4、此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改
6、分支策略
(1)master分支是稳定版本的,也就是仅用来发布新版本,平时不能在上面干活;
(2)干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;
(3)你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。
(4)合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。
下图以bob和michael的合作开发为例