简介
Git是一款免费、开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理
git和svn的差异
git和svn最大的差异在于git是分布式的管理方式而svn是集中式的管理方式。
集中式管理
- 集中式管理的工作流程图:
集中式代码管理的核心是服务器,所有开发者在开始新一天的工作之前必须从服务器获取代码,然后开发,最后解决冲突,提交。所有的版本信息都放在服务器上。如果脱离了服务器,开发者基本上是不可以工作。下面举例说明:
开始新一天的工作:
- 从服务器下载项目组最新代码。
- 进入自己的分支,进行工作,每隔1个小时向服务器自己的分支提交一次代码(很多人都有这个习惯。因为有时候自己对代码改来改去,最后又想还原到前一个小时的版本,或者看看前一个小时自己修改了哪些代码,就需要这样做了)。
- 下班时间快到了,把自己的分支合并到服务器主分支上,一天的工作完成,并反映给服务器。
这就是经典的svn工作流程,从流程上看,有不少缺点,但也有优点。
- 缺点:
- 服务器压力太大,数据库容量暴增。
- 如果不能连接到服务器上,基本上不可以工作,看上面第二步,如果服务器不能连接上,就不能提交,还原,对比等等。
- 不适合开源开发(开发人数非常非常多,但是Google app engine就是用svn的)。但是一般集中式管理的有非常明确的权限管理机制(例如分支访问限制),可以实现分层管理,从而很好的解决开发人数众多的问题。
- 优点:
- 管理方便,逻辑明确,符合一般人思维习惯。
- 易于管理,集中式服务器更能保证安全性。
- 代码一致性非常高。
- 适合开发人数不多的项目开发。
- 大部分软件配置管理的大学教材都是使用svn 和vss。
分布式管理
- 分布式管理的工作流程图:
分布式和集中式的最大区别在于开发者可以在本地提交。每个开发者机器上都有一个服务器的数据库。
上图就是经典的git开发过程。步骤如下:
- 一般开发者的角度:
- 从服务器上克隆数据库(包括代码和版本信息)到单机上。
- 在自己的机器上创建分支,修改代码。
- 在单机上自己创建的分支上提交代码。
- 在单机上合并分支。
- 新建一个分支,把服务器上最新版的代码fetch下来,然后跟自己的主分支合并。
- 生成补丁(patch),把补丁发送给主开发者。
- 看主开发者的反馈,如果主开发者发现两个一般开发者之间有冲突(他们之间可以合作解决的冲突),就会要求他们先解决冲突,然后再由其中一个人提交。如果主开发者可以自己解决,或者没有冲突,就通过。
- 一般开发者之间解决冲突的方法,开发者之间可以使用pull命令解决冲突,解决完冲突之后再向主开发者提交补丁。
- 主开发者的角度(假设主开发者不用开发代码):
- 查看邮件或者通过其它方式查看一般开发者的提交状态。
- 打上补丁,解决冲突(可以自己解决,也可以要求开发者之间解决以后再重新提交,如果是开源项目,还要决定哪些补丁可用,哪些不用)。
- 向公共服务器提交结果,然后通知所有开发人员。
- 优点:
- 适合分布式开发,强调个体。
- 公共服务器压力和数据量都不会太大。
- 速度快、灵活。
- 任意两个开发者之间可以很容易的解决冲突。
- 缺点:
- 资料少(起码中文资料很少)。
- 学习周期相对而言比较长。
- 不符合常规思维。
- 代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息。
git常用命令介绍
命令 | 功能介绍 |
---|---|
git init | 创建一个数据库 |
git clone | 复制一个数据到制定文件夹 |
git add 和git commit | 把想提交的文件add上,然后commit这些文件到本地数据库。 |
git pull | 从服务器下载数据库,并跟自己的数据库合并。 |
git fetch | 从服务器下载数据库,并放到新分支,不跟自己的数据库合并。 |
git whatchanged | 查看两个分支的变化 |
git branch | 创建分支,查看分支,删除分支 |
git checkout | 切换分支 |
git merge | 合并分支,把目标分支合并到当前分支 |
git config | 配置相关信息,例如email和name |
git log | 查看版本历史 |
git show | 查看版本号对于版本的历史,如果参数是HEAD查看最新版本。 |
git tag | 标定版本号 |
git reset | 恢复到之前的版本 –mixed是git-reset的默认选项,它的作用是重置索引内容,将其定位到指定的项目版本,而不改变你的工作树中的所有内容,只是提示你有哪些文件还未更新。 –soft选项既不触动索引的位置,也不改变工作树中的任何内容。该选项会保留你在工作树中的所有更新并使之处于待提交状态。相当于在 –mixed基础上加上git add。 –hard 把整个目录还原到一个版本,包括所有文件。 |
git push | 向其他数据库推送自己的数据库 |
git status | 显示当前的状态 |
git mv | 重命名文件或者文件夹 |
git rm | 删除文件或者文件夹 |
git help | 查看帮助,还有几个无关紧要的命令,请自己查看帮助。 |