From svn to git 你要知道的东西

最近团队项目准备从svn往git迁,于是做了一些相关的了解,发现svn跟git还是有很多不一样的,下面写了一些个人理解。

核心区别

分布式 vs 集中式

  • git是分布式版本管理,也就是本地即完整的仓库,包括所有的提交,分支,标签等,而且提交,分支等操作都是在本地进行,与远程仓库只是相互同步的关系
  • svn是集中式版本管理,本地只是远程仓库的某个镜像,比如处于某个分支,某个版本,但不保存其他版本信息,提交或者建分支等操作都是要连接远程仓库的。

这是两者最根本也是最核心的区别,如果理解了这个区别,就会很容易理解其他比如下面说道工作流程等的不同。为了方便理解,这里举个不太恰当的比喻,svn中本地和远程的关系相当于我们浏览器打开网站和该网站的服务器的之间的关系,我们本地只是状态,而我们要提交修改或切换页面都是通过与服务交互进行的。而git中本地和远程的关系相当于两台服务器之间的关系,两者都能独立完成操作,两者之间需要的只是同步。下图为git和svn本地和远程之间关系的示例图:

工作流程区别

理解了上面的原理上的不同,就可以理解工作流程的不同了,svn是本地修改,远程提交,而git则是本地操作,远程同步,这里的操作包括修改,提交,分支操作等。

工具的区别

svn更倾向于GUI工具的使用,而git更倾向于命令行工具的使用,当然这两者也不是完全是死的,比如你觉得git命令行不直观的话,也可以使用一些GUI工具,比如windows上安装的git本身自带GUI工具,甚至还有丧心病狂的TortoiseGit工具。

命令上的区别

add

很多刚从svn迁到git的同学会很困惑,为什么每次commit之前都要add一下。事实上,在git后续的版本就增加了git stage命令,其作用跟之前版本的git add完全一样,就是官方为了强调,git add的作用是将修改的文件加到暂存区(stage),而git commit的时候只会提交在暂存区的修改,也就是说,暂存区就是本地修改和commit之间的缓冲,而这样做的好处按我的理解有2个:

  1. 分次缓存,方便review:如果你跟我有一样的习惯,就是提交之前都会review一下自己修改的代码,那么git add 是可以方便我们进行代码review的,每次我完成一部份相对完整或者独立的修改之后,我会reviwe完修改之后就执行git add,将这部分修改加入缓存区,而当我后面又做了一些修改要review的时候,我就可以只关心修改了但未add的文件。不然的话,要么每次commit的文件都很多,要么commit次数很多,很乱。
  2. 方便回退:git一旦commit了,要回退是很麻烦的,只是本地commit的话还有得救,已经同步到远程的话,就只能弄多一个revert的commit才能进行回退,而git add 是很方便回退的。

PS: 当然,如果你觉得上面说的东西都没卵用,那么可使用 git commit -a -m命令直接实现 git add . + git commit -m 的效果(注意当有文件增删的时候不行,还是要先add一下)

checkout

svn上checkout跟git的checkout是不同的,git上与svn checkout对应的命令是 clone,而git上checkout的作用分支切换或者代码还原。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏smy

xampp中Apache 和 Mysql 那点经验!!

wrong path xampp\apache\bin\httpd.exe   这些问题,有时还有端口80问题,先不用急着找各种问题的解决方案,先试试用“管理员...

38913
来自专栏Rgc

mysql定时备份

2083
来自专栏云计算教程系列

如何在Debian 8上安装Nginx

Nginx是Apache2的流行HTTP服务器替代品。它可以用作反向代理,邮件服务器或Web服务器。根据截至2015年7月的Netcraft调查,Nginx目前...

3650
来自专栏菩提树下的杨过

process information unavailable 的解决办法

有时候在centos上查看java进程时,会遇到process information unavailable 的情况,如下图: ? 不同账号之间kill进程时...

2159
来自专栏腾讯云数据库团队的专栏

在云端快速构建一个 ODOO 站点

ODOO 的前身是 OpenERP,是一款开源的 ERP 系统,使用 Python 开发,数据库采用PostgreSQL,系统以 LGPLv3 协议发布。ODO...

2.5K1
来自专栏BeJavaGod

分布式系统的那些事儿(三) - 系统与系统之间的调用

系统与系统之间的调用通俗来讲,分为本地同一台服务器上的服务相互调用与远程服务调用,这个都可以称之为RPC通信。浅白点讲,客户访问服务器A,此时服务器要完成某个动...

3394
来自专栏JAVA同学会

OAuth授权 | 看这篇就够了

上一篇我们介绍了单点登录(SSO),它能够实现多个系统的统一认证。今天我们来谈一谈近几年来非常流行的,大名鼎鼎的OAuth。它也能完成统一认证,而且还能做更多的...

3126
来自专栏菩提树下的杨过

flash builder代码格式化以及其它快捷键

今天开始,决定用flash builder淘汰flash cs 4/5了,刚换过来感觉有些不适应,百度+查看帮助,找了几个有用的快捷键: 1.代码格式化:选中要...

1925
来自专栏hadoop学习笔记

hadoop基础入门教程--DKHadoop配置安装教程

使用hadoop版本是DKH标准三节点发行版,DKHadoop版本的易用性比较好,环境部署要简单的多,参考此篇安装前请先下载DKHadoop版本,网盘链接:ht...

913
来自专栏FreeBuf

通过可写文件获取Root权限的多种方式

在Linux系统中,任何东西都是以文件形式存在的,包括目录和设备在内,它们都拥有读取、写入和执行权限(需配置)。当管理员在设置文件权限时,必须根据Linux用户...

900

扫码关注云+社区