版本控制的工具我早以前用的svn,后来换成了git。一样是版本控制,为何要换呢?确定是有缘由的啦~git
1、Git和SVN的比较数据库
svn的优缺点安全
优势:服务器
1.管理方便,逻辑明确,符合通常人思惟习惯。app
2.易于管理,集中式服务器更能保证安全性。分布式
3.代码一致性很是高,适合开发人数很少的项目开发。svn
缺点:工具
1.服务器压力太大,数据库容量暴增。学习
2.若是服务器连接不上,基本上是不能够工做的(限制性很是强)测试
3.不适合开源开发(开发人数很是很是多,可是Google app engine就是用svn的)。可是通常集中式管理的有很是明确的权限管理机制
(例如分支访问限制),能够实现分层管理,从而很好的解决开发人数众多的问题。
git的优缺点
优势:
1.适合分布式开发,强调个体。
2.公共服务器压力和数据量都不会太大。
3.速度快、灵活,任意两个开发者之间能够很容易的解决冲突。
4.有本地仓库,可离线工做。
缺点:
1.不符合常规思惟,学习周期相对而言比较长。
2.代码保密性差,一旦开发者把整个库克隆下来就能够彻底公开全部代码和版本信息。
各有各的优缺点,仍是须要根据项目来选择适合的工具~
今天具体来讲Git~
首先须要安装Git 不过我就省略安装过程啦(百度一大堆)。。。。
2、Git的工做流程
1.在工做目录中修改文件【进入已修改(modified)状态】。
2.暂存文件,将文件的快照放入暂存区域【保存到本地仓库,进入已暂存(staged)状态】。
3.提交更新,找到暂存区域的文件,将快照永久性存储到 Git 仓库目录【提交到git仓库,进入已提交(committed)状态】。
Git 项目的三个工做区域的概念:工做目录、暂存区域以及 Git 仓库(如图)
注:
工做目录:是对项目的某个版本独立提取出来的内容。这些从 Git 仓库的压缩数据库中提取出来的文件,放在磁盘上供你使用或修改
暂存区域:是一个文件,保存了下次将提交的文件列表信息,通常在 Git 仓库目录中。有时候也被称做`‘索引’',不过通常说法仍是叫暂存区域。
Git 仓库目录:是 Git 用来保存项目的元数据和对象数据库的地方。这是 Git 中最重要的部分,从其它计算机克隆仓库时,拷贝的就是这里的数据。
我感受git比svn方便就方便在有一个暂存区域(能够理解成一个本地仓库),能够离线工做~比较方便开发~
3、Git的基本运用
1.假设你已经安装啦git,先查看下本身的git版本~
$ git --version
2.咱们能够先从远程git仓库clone出须要的项目(我项目放在阿里云,大家也能够复制GitHub上的项目哈)
$ git clone url
3.咱们能够查看下这个项目有多少个分支
$ git branch -a
4.建立一个本身的本地分支(工做中确定是本身写本身的分支哈,因此这里直接新建分支来测试啦)
$ git checkout -b name #本身起一个好听的名字(最终仍是须要听老大的规范再起哈 谨慎!)
5.把本地分支上传到Git仓库
$ git push origin name #这个名字呢最好和本身本地库里的一致(不过。。。仍是须要听老大的正确指导)
6.进入项目目录而后建立一个空的文本文件以备接下来的测试(比较简单 就不给复制的命令啦)
7.如今我们是在新建的分支下,目录是这样的,修改一下刚才那个小文件
8.能够试着提交到本地仓库了哈
$ git add .
$ git commit -a -m “写个备注 写备注但是个好习惯呀“
9.如今咱们的目录是这样的了,这个文件有了绿色的小对勾~说明提交到本地成功!
10.咱们想要把这些改动放到Git的远程仓库里,须要这样作
$ git push origin name #这里的name表明的是Git远程上的分支名称
11.如今咱们的分支上已经有这个文件,而且我们的修改也一并提交到远程仓库啦,恭喜你~说明你成功啦~
到这里醉醉基本的操做就完成啦,可是还会出现一些问题,我们这里只有本身的分支代码,若是须要用到别人的代码呢?这时候就须要在本地导入别人的分支进行合并来达到本身也能够用别人的代码的目的。
4、Git经常使用命令
$ git pull #把服务器中最新的代码更新到本地
$ git checkout name #切换到某个分支上 name表明本地分支名称
$ git fetch origin name #获取某个分支代码 name表明远程分支名称
$ git merge name #合并分支 name表明的是要合并的分支名称
$ git branch -d name #删除本地分支 name。。。表明本地分支名称
$ git branch -r -d #删除远程分支 name。。。表明远程分支名称
到这里应该就差很少啦,由于在我们工做中是可使用插件来代替命令行模式的,因此,,,欢迎你们指正补充~~~