您的位置:首页 > 其它

版本控制-SVN&GIT

2015-10-16 21:45 337 查看

版本控制-SVN&GIT

在实际开发中,项目的的开发都是多人参与的,如果没有使用版本控制,可能会出现很多问题:

1)备份多个版本,费空间,费时间

2)难于恢复至以前正确版本

3)容易引发BUG

4)解决代码冲突困难

5)代码管理混乱

6)难于追溯问题代码的修改人和修改时间

7)无法进行权限控制

8)项目版本发布困难

那么,什么是版本控制呢?

版本控制(Revision control)是一种软体工程技巧,籍以在开发的过程中,确保由不同人所编辑的同一档案都得到更新,

版本控制透过文档控制(documentation control)记录程序各个模组的改动,并为每次改动编上序号。这种方法是工程图

维护的标准做法, 它伴随着工程图从图的诞生一直到图的定型。

常见的版本控制软件有:

CVS(鼻祖)、SVN、ClearCase(IBM、爱立信等公司,收费)、VSS(微软,看着别人有它就开发了,不过不怎么样)、

GIT(Linus Torvalds的作品, 看作者的名字,就知道不一般)

SVN

Svn(Subversion)是近年来崛起的版本管理工具,在当前的开源项目里(J2EE),几乎95%以上的项目都用到了 SVN。

Subversion 项目的初衷是为了替换当年开源社区最为流行的版本控制软件CVS,在CVS的功能的基础上有很多的提升同时也能较好的解决CVS系统的一些不足。

使用SNV进行版本控制,基本交互图:



VisualSVN Server

VisualSVN Server是SVN服务器软件。

SNV下载地址: http://www.visualsvn.com/server/download/

VisualSVN Server的使用可以参考这篇博客:http://blog.csdn.net/han_yankun2009/article/details/7856992

创建SVN仓库

在SVN服务器上,我们要创建SVN Repositiones(SVN仓库)。

1)在创建SVN仓库时,应选择创建”trunk tags branches”三个文件夹这一项, 而这三个文件夹,在项目开发中分别用于:

trunk:存放开发的主线代码

tags:存放已经开发完的,稳定的版本代码

branches:存放支线副本, 当已经开发完的主线代码出现bug时, 应对bug版本,在这个目录下进行修复

2)当我们创建SVN仓库后,仓库目录下会存在以下文件夹(一般你也用不到):

db目录:就是所有版本控制的数据存放文件。

hooks目录:脚本文件的目录。

locks目录:用放置hook来放置Subversion文件库锁定数据的目录,用来追踪存取文件库的客户端。

format文件是一个文本文件,里面只放了一个整数,表示当前文件库配置的版本号。

conf目录:是这个仓库的配置文件(仓库的用户访问帐号、权限等)。

TortoiseSvn

SVN服务器我们已经创建完成了,里面保存着整个项目相关代码。开发中每个人都有自己的任务,

那么我们应该怎么样与SVN服务器进行交互呢? -> TortoiseSvn (小乌龟, SVN客户端软件)。

TortoiseSVN是Subversion版本控制系统的一个免费开源客户端,不需要为使用它而付费。

它是 Subversion 的 Windows 扩展。可以使你避免接触 Subversion 枯燥而且不方便的 Command Line。

它完全嵌入 Windows Explorer,使用时只需在正常的窗口里右键操作就可以了。

下载地址:http://tortoisesvn.net/downloads

当下载了小乌龟之后,那么如何使用它与SVN服务器交互呢?

右击鼠标:



我们主要通过tortoiseSVN来使用小乌龟。

一篇介绍使用tortoiseSVN的博文:http://www.cnblogs.com/blsong/archive/2010/09/02/1816124.html

大概步骤:

1)访问SVN仓库,把需要的代码从服务器中拿到本地。

NT:会产生.svn 隐藏文件夹, 这个隐藏目录记录着两项关键的信息: 工作文件的基准版本和一个本地副本最后更新的时间戳。

千万不要手工修改或删除这个 .svn 隐藏目录和里面的文件!!! 否则将会导致你本地的工作拷贝 (静态视图)被破坏,无法再进行操作。

2)然后编写你自己的代码呗

编写完右击,选择提交。(tortoiseSVN对于我们的文件状态有很友好的提示,比如文件未提交、有冲突、最新等等)

SNV管理Android工程

若是在eclipse下, 我们需要安装SVN插件。

步骤和小乌龟操作差不多。(图形化界面,真心没什么好写的,知道思想, 一看就明白了。。。。。)

一些关键点:

1)将仓库中的文件夹,变为eclipse下的工程

例如:对“trunk”目录, 右击选择“检出为”, 即可实现

2)其他常用选项:

分支/标记:该选项,可使我们将工程提交到Repositiones的指定目录

切换: 可以使工程指向的Repositiones目录改变

合并:可以将主线代码与分支代码进行合并

3)对于已经检出的工程

通过team->save project 可以将我们的文件提交到SVN服务器

小补充: 对于SVN服务器上的资源,如果我们是只读一下的话, 我们可以通过浏览器进行访问。

GIT

它是Linus torvalds的第二个伟大作品。2005年由于BitKeeper软件公司对Linux社区停止了免费使用权。

Linus迫不得己自己开发了一个分布式版本控制工具,从而Git诞生了。目前使用Git作为版本控制的开源软件:Linux kernel,Android, jQuery, Ruby on Rails,Debian…

并且在Eclipse上使用Git的项目数量也已经超过了使用SVN的仓库数。

GIT相对于SVN的有点:

1)分布式,强调个体

2)公共服务器压力和数据量都不会太大

3)速度快、灵活

4)任意两个开发者之间可以很容易的解决冲突

5)离线工作

6)每日工作备份

GIT基本交互流程图



即我们本地是有一个仓库的。

开源项目工作流程图(看看而已)



下载安装完GIT之后。

建立仓库

git是linus tordvalds最初使用实在linux下, 因此命令对于他来说是少不了的。

建立仓库:git init –bare 库名称

类似SNV,建立的仓库目录下有一下文件夹:

hooks目录:脚本文件的目录。

info目录:保存了不希望在 .gitignore 文件中管理的忽略模式的全局可执行文件

logs目录:日志目录

objects目录:存储所有数据内容

refs目录:存储指向数据(分支)的提交对象的指针

config文件包含了项目特有的配置选项

description文件仅供 GitWeb 程序使用

HEAD文件指向当前分支

TortoiseGit

类似tortoiseSVN, 它是GIT的客户端软件。

使用命令完成小乌龟的操作

但是客户端软件能完成的功能,我们通过敲击命令也是可以完成的。启动git, 命令环境为linux。

常用命令:

创建git资源库

git init –bare 库名称

在用户文件夹下把资源clone下来 (在我们第一次从GIT服务器获得仓库是,必须使用clone, 会产生.git隐藏文件夹)

git clone <仓库目录> /g/software/repository/git/itheima <用户目录> .

注意:clone时候用户目录必须为空

创建一个文件,纳入到版本控制中。

git add <文件名>

第一次执行会出警告:warning: LF will be replaced by CRLF in readme.txt.

The file will have its original line endings in your working directory.

警告处理:需要配置用户信息

git config user.name = “zhangsan”

git config user.email = “suixin@gmail.com”

提交到本地版本库里。

git commit <文件名>

推送到远程共享版本库中

git push origin master

切换用户,拉取最新的文件

git pull

当我们进行解决同行代码冲突问题时,git pull可能会出现如下问题:

git pull 之后有冲突:

$ git pull

remote: Counting objects: 5, done.

remote: Compressing objects: 100% (2/2), done.

remote: Total 3 (delta 0), reused 0 (delta 0)

Unpacking objects: 100% (3/3), done.

From g:/software/repository/git/itheima26

50db030..a04027a master -> origin/master

Auto-merging readme.txt

CONFLICT (content): Merge conflict in readme.txt

Automatic merge failed; fix conflicts and then commit the result.

解决方法:

1.git mergetool

调用上面命令之后会提示你输入编辑方法,输入:beyond compare 进入编辑器. (编辑去解决同行代码冲突)

2.编辑完之后.调用git commit -a 把当前目录中所有都提交到本地库中.

3.git push origin master 提交到远程库中.

使用可爱的小乌龟

类似SVN(一个公司开发的。。。。。),但思想不同滴。GIT强调的是分布式。图形化界面, 只可意会,不可言谈。。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  版本控制 svn git