往期文章推荐:
java常见面试考点(六):深入理解String类型
java常见面试考点(七):递归与迭代
java常见面试考点(八):成员变量与局部变量
java常见面试考点(九):SSM面试题
java常见面试考点(十):Linux常用服务类命令
【版权申明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权);
本博客的内容来自于:java常见面试考点(十一):git与svn区别;
学习、合作与交流联系q384660495;
本博客的内容仅供学习与参考,并非营利;
可以协同代码管理,让多人开发代码得以实现。
回归到以前的任何一个时间点的代码处,以往各个版本进行保存、管理。
可以查看每个人具体的操作,便于出现问题后及时排查。
常用的版本控制器有git和svn
git和svn的区别:
1.git是分布式的,而svn是集中式的;(最核心)
git 更倾向于被使用于分布式模式,也就是每个开发人员从中心版本库/服务器上chect out代码后会在自己的机器上克隆一个跟中心版本库一模一样的本地版本库。可以这样说,如果你被困在一个不能连接网络的地方时,你仍然能够提交文件,查看log(历史版本记录),创建项目分支等。
2.git把内容按元数据方式存储,而svn是按文件;
因为.git目录是处于个人机器上的一个克隆版的版本库,它拥有中心版本库上所有的东西,例如标签,分支,版本记录等。git是每个历史版本都存储完整的文件,便于恢复,svn是存储差异文件,历史版本不可恢复。(核心)
3.git分支和svn的分支不同;
svn会发生分支遗漏的情况,而git可以同一个工作目录下快速的在几个分支间切换,很容易发现未被合并的分支,简单而快捷的合并这些文件。
4.git没有一个全局的版本号,而svn有;
SVN的版本号实际是任何一个相应时间的源代码快照。我认为它是从CVS进化到SVN的最大的一个突破。
5.git的内容完整性要优于svn;
git的内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。
svn的优点:
采用集中式,易于管理,保证安全性;
管理方便,逻辑明确,理念符合常规思维;
代码的一致性高;
适合人数不多的项目开发;
允许一个文件有任意多的可命名属性,会关注所有的文件类型;
支持二进制文件,更容易处理大文件;
支持空目录。
svn的缺点:
服务器压力太大,数据库容量暴增;
必须连接在服务器上(时刻都得联网操作),否则基本不能工作、提交、对比、还原等;
不适合开源开发。
git的优点:
适合分布式开发,强调个体;
公共的服务器压力和数量都不会太大;
速度快, 成熟的架构,开发灵活;
任意两个开发者之间可以很容易的解决冲突;
离线工作,管理代码成本低,不需要依赖服务器;
部署方便。基本上下个命令就可以用;
良好的分支机制,可以让主干代码保持干净。
git的缺点:
资料少,学习成本比较大,学习周期比较长,要求人员素质比较高;
不符合常规思维;
代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息。
其中最重要的区别是在于Git 上的分支远比SVN上的强大。下面具体介绍分支的概念。
分支是什么:
在 svn 这类的版本控制系统上,分支(branch)是一个完整的目录,且这个目录拥有完整的实际文件。如果工作成员想要开启新的分支,那将会影响“全世界”!每个人都会拥有和你一样的分支。如果你的分支是用来对系统模块进行安全检查测试的,那将会像传染病一样,你改一个分支,还得让其他人重新切分支重新下载,而且这些代码很可能对稳定版本还是具有破坏性的。
在 git上,每个工作成员可以任意在自己的本地版本库开启无限个分支。举例:当我想尝试破坏自己的程序(安检测试),并且想保留这些被修改的文件供日后使用, 我可以开一个分支,做我喜欢的事。完全不需担心妨碍其他工作成员。只要我不合并及提交到主要版本库,没有一个工作成员会被影响。等到我不需要这个分支时, 我只要把它从我的本地版本库删除即可,无痛无痒。
查看本地分支:git branch
查看远程分支:git branch -r
创建本地分支:git branch [name]
----注意新分支创建后不会自动切换为当前分支
切换分支: git checkout [name]
创建新分支并立即切换到新分支: git checkout -b [name]
删除分支:git branch -d [name]
---- -d选项只能删除已经参与了合并的分支,对于未有合并的分支是无法删除的。如果想强制删除一个分支,可以使用-D选项
合并分支: git merge [name]
----将名称为[name]的分支与当前分支合并
git 查看远程分支、本地分支、创建分支、把分支推到远程repository、删除本地分支
第一节:详细透彻解读Git与SVN的区别(集中式VS分布式)
Git 和 Svn 区别