使用git已经有一段时间了,从使用git的第一天开始,就计划逐步放弃svn.
svn有的功能,git都能做到,而且做得更出色,况且git还有很多特性svn望尘莫及,还有什么理由继续使用svn呢?
well,理由很多. 比如,git在windows上的性能问题, TortoiseGIT还没有开发出来(或者根本没有这个计划?),团队中其它人员不习惯用git....等等.
那么,鱼与熊掌,能否兼得?
=== SVN 之痛与痒 ===
svn的最大问题是不支持分布式开发. 分布式并不一定就是指象Linux Kernel那样的大型协作开发场景.
例如,你想把没做完的工作带回家做,但是家里又不能连线到公司的svn服务器,那么你就不能commit. 实际上,这也是一种分布式开发的场景.
你会说,那你就不要commit啊 ... 我办不到, 我有个坏习惯,经常做些小改动,但是十分钟后就后悔了想改回来,只有经常commit我才能找回上次,上上次变更.
当然,我有坏习惯因此我不会commit到trunk或主branch上,否则会被扁死 :-)
所以,我经常有很多临时branch要merge,频率非常之高...在svn中的merge并不好玩.
不得不说,svn的repository设计很糟糕. 慢, 特别是在项目规模上去,开发周期长时,repository迅速膨胀.项目树中到处都是.svn也是很讨厌.
但是, TortoiseSVN实在是方便, 很多人使用SVN就是因为图这个方便.
支持SVN的IDE也数不胜数.
SVN,既痛又痒....
=== GIT 的威力 ===
git很快,真的很快,比小李飞刀还快...(当然是在Linux下).
试试checkout Linux Kernel的各个tag,那个速度,不得不佩服,呵呵~
其实对于小项目来说,速度倒无所谓,不差那么几秒,git还有很多cool things.
git diff很强大,真的很强大.比较任何两个历史版本,速度飞快.
git中做branch简直太简单了,branch merge也是非常的爽,更不用说three way merge了. 当然还有很多很cool的特性,例如,与别人的git tree进行merge ... 其实这些或多或少都是由于分布式的特性带来的.
还有那些通过email commit等等一般小团队开发用不到的功能,就不多说了.
=== 鱼与熊掌兼得 ===
首先,svn照用,主版本管理用svn(照顾团队嘛).
然后在项目目录下建git repository: git init.
这只在项目根目录下多出一个.git目录,不会象svn或cvs那样,每个子目录都有它的垃圾.
接下来,建立.gitignore文件,把不需要git管理的文件,加入此表,例如.svn. 或者进入.git/info编辑exclude文件.
加入git: git add .
完成了,就这么简单.
从此以后,小的,临时的改动,通通用git来管理,又快又准,还不影响别人. 因为你只用到本地git repository,与其他人无关.
各人建各人自己的git tree,互不干扰. 当然,如果你想日后某一天可以merge别人的tree,那么还是建一个bare public tree吧, 各人clone一个,然后工作在自己的branch下,平时还是照样离线commit,需要时push.
在家里工作?没问题,照样可以commit,git是分布式的.
回到公司后,想commit到svn?没问题,在git中checkout你想要的"working code"版本,再在svn中commit, 然后git再checkout HEAD,继续前行
=== 结论 ===
svn和git结合, 可以带来以下好处:
1) 与单独使用svn的其它组员不冲突
2) 享受git分布式带来的好处
3) 可以满足svn commit working code的需求
4) svn大粒度管理,减轻svn repository的压力.
5) svn继续发挥GUI便利的优势.
所以, SVN + GIT = 鱼与熊掌兼得
有趣的是,Linus当时设计git的时候,说:"...当碰到一个特性不确定应该采取什么样的设计时,就只要照着svn的反方向设计就对了..."
分享到:
相关推荐
一种常见的方式是,在SVN仓库上搭建Git-SVN桥接,这样团队可以在本地使用Git,然后通过Git-SVN工具与SVN仓库同步。这种方法可以充分利用Git的灵活性和SVN的集中管理。 **知识点总结** 1. **SVN基础**:集中式版本...
视频目录: 01_创建虚拟机、02_为什么要使用版本控制、03_单用户的SVN代码管理、04_仓库的备份和还原、05_多用户共同管理代码的冲突、...svn下载开源项目源码、12_git简介&本机提交、13_git公共服务器、14_相遇的纪念
svn+git实现离线提交并且不需要到处所有svn版本,速度超快非一般的感觉,超越git本身的git2svn功能。 使用本工具需要安装基础工具: 首先安装git msysgit:https://code.google.com/p/msysgit/downloads/list msysgit...
标题“svn2git.zip”指的是一个包含用于迁移Subversion(SVN)项目到Git的工具的压缩文件。这个工具称为svn2git,它是一个小型但功能强大的应用,旨在帮助用户平滑地从传统的Subversion版本控制系统过渡到更现代的...
### Jenkins + SVN + Maven + Java 自动化部署详解(Windows版) #### 一、Jenkins 安装与配置 **1. Jenkins 安装** - **下载安装**: 首先,从官方网址 (https://jenkins.io/download/) 下载最新的Jenkins安装包...
svn-git插件是Jenkins的一个扩展,旨在提供一种方式来同步SVN仓库和Git仓库,使开发者可以从Git仓库进行开发,同时保持与SVN主仓库的同步。这尤其适用于那些已有大量历史记录在SVN中,但希望利用Git的分布式特性进行...
Git与SVN比较Git与SVN比较Git与SVN比较Git与SVN比较Git与SVN比较Git与SVN比较
SVN是一种集中式的版本控制系统,与Git相比,其主要特点包括: 1. 集中式:所有版本信息都存储在一个中央服务器上,开发者需要连接到服务器才能进行版本控制操作。 2. 简单的分支和合并:相较于Git,SVN的分支和...
SVN(Subversion)和GIT是目前流行的两种版本控制系统,它们各自有独特的设计哲学和工作机制。尽管它们的基本目的都是帮助程序员们高效地管理代码变更,但在实际应用中,它们在功能、性能和用户体验方面存在着显著...
常见的版本控制工具包括ClearCase、SVN(Subversion)和GIT。每种工具都有其特点和优势,本文将对这三种工具进行比较,帮助开发者和管理员更好地选择和使用这些工具。 多站点支持 ClearCase支持多站点复制和同步,...
【Ubuntu+svn+ssl+ldap】的安装及集成是一个复杂的过程,涉及到Ubuntu操作系统、Subversion (SVN) 版本控制系统、SSL安全套接层以及Lightweight Directory Access Protocol (LDAP) 用户认证。以下是对这些技术的详细...
svn+ldap+sasl 认证是指在 svn 服务器中使用 ldap 服务器进行用户认证,实现 svn 服务器的安全认证机制。ldap 服务器是一个目录服务,用于存储和管理用户信息,sasl 则是一个安全认证协议,用于在客户端和服务器之间...
SVN(Subversion)是一种版本...总之,搭建SVN+Eclipse环境是Java开发中的基础工作,它使得团队能够高效地协作,跟踪代码变更,以及方便地进行版本控制。掌握这一技能,对于提升开发效率和保证项目质量具有重要意义。
【绝对经典】配置SVN+TRAC一直是一个比较麻烦的事情,经过广泛搜集资料和实践,最终发现这样一种非常简单的配置方法。用这种方法TRAC的安装也仅仅是几个文件拷贝而已。从此Windows上的SVN开发服务器配置不再困难,...
描述了如何从SVN迁移到git,比较简短,精炼,文档中提到的users.txt为svn与git的用户对照
1. **理解SVN与Git的区别** SVN是一个集中式的版本控制系统,所有的版本信息都存储在一个中央服务器上,而Git则是一个分布式系统,每个开发者的本地机器都有一个完整的仓库副本。这使得Git在分支管理和离线工作方面...
这篇博客的标题“再次奉献SVN+apache Server配置”提示我们将深入探讨如何将SVN与Apache服务器集成,以实现高效的代码管理和版本控制。 【描述】虽然描述为空,但我们可以推测博主可能分享了他在配置SVN与Apache...
总的来说,这个教学资源对于想要深入理解和掌握Svn与Git的开发者来说非常有价值,无论是在个人项目还是团队合作中,都能通过有效的版本控制提高效率和代码质量。学习者不仅可以学到基本操作,还能接触到高级技巧,...
Jenkins+Maven+Windows+svn+sonarqube持续集成平台搭建图文指南
【SVN+Trac配置详解】 SVN(Subversion)是一种版本控制系统,而Trac则是一个集成项目管理工具,它们的结合使用可以帮助团队更有效地管理代码仓库和项目进度。以下是对SVN和Trac配置的详细说明: 1. **SVN配置** ...