svn git 必须理解的概念
不都是SCM代码管理嘛,有很大区别么?很多svn老鸟都是抱着这样的心态去学习git,然后无一幸免地陷入“查阅过很多资料,依然掌握不好”的困境,至少我们团队是这样的。
网上的资料确实已经很多了,却没有把整个知识结构串起来。通读《git权威指南》是可行的,只是大家都急着用,没那耐性。我这里熬一碗鸡汤,整理供大家享用。
一、安装
服务器端不展开,因为主要面向搬砖的码农。
客户端可参见大神 廖雪峰 的Git教程-安装git
需要特别说明的是,在windows中,msysgit才是真正的git客户端,乌龟tortoisegit只是个界面。mercurial和sourcetree也是类似道理。
二、本地版本库
又见 工作区和暂存区
这里容易是初学者容易踩坑的地方,代码只提交到本地版本库,却没有推送到远程版本库。(其实是选型的人的反人类设定吧,用分布式的工具去做集中式的管理。)
svn是本地-远程两层的结构,而git则是工作区-本地-远程三层的结构。
在客户端看的见到的源码文件是工作区,提交到的是本地版本库,本地版本库的修改如果不推送,就是单机自己玩,不会影响其他人。
三、相关命令和冲突合并
命令方面资料很健全,我就不重复造轮子了。见上文的Git教程。
命令的查阅很流行这种叫Cheatsheet(考试作弊的小抄么?)速查手册,也是一搜一大把~
比如 http://ndpsoftware.com/git-cheatsheet.html 清晰地指出从哪个区到哪个区对应的命令是什么~

又比如上图,图示说明了遇到各种场景应该怎么办。
至于冲突,都是发生在跨分支或跨库的修改。比如,工作区的修改未commit而pull远程的更新时会报错(要先commit),本地库push发现远程库有其他人提交时会报错(要先pull并在本地解决冲突),暂存区取回stash pop时可能发生冲突。
而当合并发生冲突需要手动解决时,svn老鸟肯定是懵逼的,三路对比合并,哪个打哪个啊。。。这是因为,在svn中只有“我和中央库”的冲突,而git中却是“我和他”的冲突。
所以在git中做合并有三个源:base是分支的共同祖先,local是本地仓当前分支,remote是要从这个分支合过来,output当然就是合并结果的预览啦。
详见 对于解决 Git 的 Merge Conflict 你有哪些经验和技巧?
四、命令行or图形界面?
两者没有本质区别,图形界面最后也还是触发命令。直接用命令行能更好理解整个操作的过程。
图形界面则操作方便。但新手一定要对图形界面中的参数保持敏感,可能多勾了选项结果就完全不一样,比如--force。。。
五、分支管理
查阅过很多git分支管理的资料,依然用得不好,直到踩过若干个月的坑。。。
git的发源是开源系统,思想是分布式、去中心化,用svn的集中式管理是很容易踩坑的。
首先,svn是针对文件内容的对比,而git是针对文件增量和提交时间的对比,多人的频繁的冲突合并极容易发生错误。
其次,git的去中心化思想认为每个开发者都是熟练的负责任的。而事实上不是的,如果团队里有一两个“流氓”,遇到冲突没有细看,直接--force或use mine,测试会抓狂的,然后开发和项目经理都会抓狂的~
然后最后,你便会质疑:为什么不用svn啊?git跟svn没什么区别啊,还更难用!
且看看开源项目对git是怎么用的。 Git使用规范流程 开发者先fork复制出自己的库(远程),然后一系列的开发(本身也可以有分支管理),push上自己的远程库后,再pull request提交给管理员review和合并。而开源项目的发布,是有stable和nightly update等不同的发布版本。
回过头来看,公司团队里的项目要怎样管理git的版本和分支呢?

上图 git flow 便是最完整最科学的分支管理模型了。
这里有四点血泪经验要谨记:
1.不要吝啬开分支,git开分支的代价很小。
2.合并是容易出事的环节,要让负责任的熟手来把关。
3.以feature划分开发分支是非常好的思维方式,把相互依赖的内容放在一起、把不相关的内容隔离开、让“这个功能暂时不上”这种需求变更变得可行。
4.分支是活的、会变动的,标签tag才是一个确切的版本。
至此,使用git做源码管理的项目和团队足以运作起来而且可以避开大部分的坑。要用得更溜的话可以继续精修patch、rebase、revert、--fast-forward、cherry pick等更高阶的用法。
最后彩蛋:老司机温馨提醒,请把eclipse项目文件、编译后文件(文件夹)加入.gitignore文件,这个问题在svn就存在了~
svn git 必须理解的概念的更多相关文章
- svn老鸟转用git必须理解的概念
不都是SCM代码管理嘛,有很大区别么?很多svn老鸟都是抱着这样的心态去学习git,然后无一幸免地陷入“查阅过很多资料,依然掌握不好”的困境,至少我们团队是这样的. 网上的资料确实已经很多了,却没有把 ...
- 版本控制比较cvs,svn,git
版本控制比较cvs,svn,git 几个重要概念: 版本库模型(Repository model):描述了多个源码版本库副本间的关系,有客户端/服务器和分布式两种模式.在客户端/服务器模式下,每一用户 ...
- 版本控制— SVN & git
版本控制—— SVN & GIT 提问 什么是版本控制? 是能够一直监视代码文件的变更,并存储这些文件以便将来引用的一种机制(软件) 为什么要使用版本控制? (1)记录哪个开发人员做了变更 ( ...
- svn git 的区别(别再问我了)
这篇主要是谈谈两者的区别,至于谁优谁劣看官自己思考吧! 把第一条理解到位思想到位了做起来才会有的放矢,其他几条都是用的时候才能体会到 1) 最核心的区别Git是分布式的,而Svn不是分布的.能理解这点 ...
- svn/git的diff、patch
svn/git的diff.patch 前几天,正当我突突的写代码,企业微信嘀嘀一声响”在不,过来帮我看个bug”.本人一向助人为乐,高兴的冲了过去,然后就开始了一段长达1分钟的问题描述.很明显,此同学 ...
- Git的一些基本概念
Git的一些基本概念 设置自己的用户名和邮箱git config –global user.name "Your Name"git config –global user.emai ...
- SVN/GIT源代码泄露
造成SVN源代码漏洞的主要原因是管理员操作不规范.在使用SVN管理本地代码过程中,会自动生成一个名为.svn的隐藏文件夹,其中包含重要的源代码信息.但一些网站管理员在发布代码时,不愿意使用‘导出’功能 ...
- 设置SVN,Git忽略MAC的.DS_Store文件的方法
设置SVN,Git忽略MAC的.DS_Store文件的方法 I. 显示Mac隐藏文件的命令: defaults write com.apple.finder AppleShowAllFiles -bo ...
- svn git协同管理
项目开发过程中总有一些奇奇怪怪的需求出现. 我们的项目管理是使用SVN的,用SVN是历史原因,无法整个项目向Git切换.由于我需要管理SVN,做一些代码合并工作.每次合并都会遇到SVN代码需要对比查看 ...
随机推荐
- linux中的IP地址的修改
一,图形界面,setup 二,修改文件 1,修改主机名字 vi /etc/sysconfig/network NETWORKING=yes #HOSTNAME=localhost.localdomai ...
- 权重比较(id class 标签)
权重的取值: 按照 id class 标签 的顺序在其位置上标出1或者0 例如下面的例子 <!DOCTYPE html> <html lang="en"&g ...
- Vue.js路由
有时候,我们在用vue的时候会有这样的需求,比如一个管理系统,点了左边的菜单栏,右边跳转到一个新的页面中,而且刷新的时候还会停留在原来打开的页面. 又或者,一个页面中几个不同的画面来回点击切换,这两种 ...
- Excel2010隔行变色的实现方法 [也可套用格式即可]
这样excel隔行变色的效果,excel会自动隔行填充不同颜色. 公式说明: =MOD(ROW(),2)=0,实现的效果是偶数行自动填充底纹颜色 =MOD(ROW(),2)=1,实现的效果是奇数行自动 ...
- curd——5
curd——5 SELECT area_id FROM 16tree.ts_area where pid=0; <?php //1可以防止注入$db = Yii::app()->db; ...
- 二级VB备考中
今天安装了一个VB软件,二级备考中,每天一套牌卷子. 在Html5中 align 与valign改变了属性 vertial-align 是垂直方向的改变 面对网站首页的建立需要首先画好一份区域设计图 ...
- hive数据倾斜原因以及解决办法
何谓数据倾斜?数据倾斜指的是,并行处理的数据集 中,某一部分(如Spark的一个Partition)的数据显著多于其它部分,从而使得该部分的处理速度成为整个数据集处理的瓶颈. 表现为整体任务基本完成, ...
- 微信支付开发出现redirect_uri参数错误的解决方法
我们在进行微信支付开发的时候会遇到出现“redirect_uri参数错误”这种情况,怎么办呢?下面就是我总结出现这种“redirect_uri参数错误”的七种可能情况,以及解决方式. 1.可能原因①: ...
- 中国大学mooc直播回放看这里哦http://www.icourse163.org/forum/1001974001/topic-1003372881.htm?sortType=1&pageIndex=1
中国大学mooc直播回放看这里哦http://www.icourse163.org/forum/1001974001/topic-1003372881.htm?sortType=1&pageI ...
- subprocess.Popen模块
该类用于在一个新的进程中执行一个子程序.subprocess模块底层的进程创建和管理是由Popen类来处理的. 1.subprocess.Popen的构造函数 class subprocess.Pop ...