Git与SVN冲突解决
参考文献
https://blog.csdn.net/enlangs/article/details/44806029
当我们使用"git svn rebase"合并产生冲突时,应该记得如下的处理要点
- 在rebase时,不伦发生什么情况,我们都处在"no-branch"当中,都没有在一个有效的分支中;(branch-分支)
- 使用git status查看项目,如果发现一个".dotest"文件,可以忽略它;
- 如果想终止合并,使用"git rebase --abort";
- 手动修复完冲突的文件,还需使用"git add"加入被修复的文件;
- 然后使用"git rebase --continue"继续更新;
- 如果遇见提示"did you forget to call ‘git add’?",而实际冲突已经处理,那么可以使用"git rebase --abort"来跳过它;
- 重复上面的步骤,直到rebase完成;
- 我们再任何时候都可以使用"git rebase --abort"来终止操作;
而在第4步,我们处理冲突的文件时,需要通过历史版本的对比,删除或者修改对应的代码,完成修复;
PS: git-svn官方参考:http://git-scm.com/docs/git-svn
Git与SVN对比
参考文献
https://www.cnblogs.com/ssgeek/p/9642171.html
Git:
? 目前时间最先进的分布式版本控制系统,Git与SVN一样也有自己的集中式版本库或服务器,但是Git更倾向于分布式模式的使用;也就是每个开发人员从中心版本库/服务器上chect out代码后会在自己的机器上克隆一个跟中心版本库一模一样的本地版本库;
? Git每一个终端都是一个仓库,客户端并不只是提取最新版本的文件快照,而是把原始的代码仓库完整的镜像下来,每一次的提取操作,实际都是一次对代码仓库的完整备份;Git不仅仅是版本控制系统,也是一个内容管理系统(CMS),工作管理系统等;
? Git还能和若干不同的远端代码仓库进行交互,我们可以在同一个项目中,分别和不同的工作小组进行协作,根据需求设定不同的协作流程;
? Git的绝大多数操作只需要访问本地文件和资源,不需要联网,所以处理速度相对较快;
- Git中每个克隆(clone)的版本库都是平等的,任何一个版本库都可以克隆出来,作为自己的版本库;
- Git每一次提取操作,实际都是一次完成的代码仓库提取;
- 提交无需授权,完全在本地操作,
- 基于旧版本的改动也可以成功提交,此时会基于旧版本创建一个新的分支;
- Git的提交不会被打断,直到工作完全完成,PUSH给他人或者他人PULL你的版本库,合并发生在PULL和PUSH过程中,不能自动解决的冲突会提示用户手动完成;
- 冲突解决不再像SVN一样,取决于谁先提交,而是在需要的时候才进行合并和冲突解决;
SVN:
? Subversion,集中式管理的版本控制器,只有一个单一的集中管理服务器,保存所有文件的修订版本,团队工作者通过客户端连接到这台服务器,取出最新的文件或者提交更新;
? SVN原理上只关心文件内容的具体差异,每次记录哪些文件作了更新,以及更新了哪些内容;
- 每个版本库有唯一的URL(官方地址),每个用户都从这个地址获取代码和数据;
- 提交必须有网络连接;
- 提交需要授权,如果没有写的权限,则提交失败;
- 提交并非每次都能够成功,如果有其他人先于你提交,那么会提示"改动基于过时的版本,先更新在提交…"诸如此类;
- 冲突解决是一个提交速度的竞赛:手快先提交,平安无事,手慢后提交,可能会遇到较为麻烦的冲突,需要解决;
优点:每个人都可以一定程度上看到项目中其他人正在做什么,管理员也可以轻松掌握每个开发者的权限;
缺点:中央服务器单点故障,安全性相对较低;如果宕机,无法进行协同工作,如果磁盘发生故障,则有数据丢失的风险;
PS:如果具有使用SVN的背景,需要做一定的思想转换,来适应Git提供的一些功能特性;
那么集中式版本控制与分布式版本控制又有何区别呢?
集中式版本控制:
? 版本库集中存放在中央服务器,团队开发时,个人先从中央服务器取得最新的版本,然后在进行开发,开发完成后再把代码提交给中央服务器;
集中式版本控制系统的最大毛病是必须联网才能工作,如果在局域网内带宽大速度快,但如果是互联网,在网速较慢的情况下,就很影响使用体验;
分布式版本控制:
? 没有中央服务器,团队每个人的电脑就是一个完整的版本库,这样工作时就不需要联网;
既然每个人电脑都是一个完整的版本库,那么多人协作如何进行呢?
? 假设,我在自己的电脑上改了A文件,我的同事也在他的电脑上改了A文件,这时我和他之间只需要把各自的修改推送给对方,就可以互相看到对方的修改了;
? 在实际使用分布式版本控制系统的时候,很少出现两人之间的电脑互相推送版本库的修改,因为两人可能不在一个局域网内,两台电脑互相访问不了,也可能有一台电脑压根没有开启;
? 因此分布式版本控制系统通常有一台充当"中央服务器"的电脑,但是这个服务器的作用仅仅是用来方便"交换"大家的修改,有没有它都不影响正常干活,只有"交换"的效率高低的区别;
|