天天看点

SVN版本工具_Git版本工具

                                           第1部分  版本管理工具介绍——SVN 篇

一、版本控制简介:

1.什么是版本控制?

软件开发过程中各种程序代码、配置文件及说明文档等文件变更的管理。

最主要的功能:

追踪文件的变更。

让版本库中任意文件恢复到任意版本。

可查看代码在什么时间被什么人修改过。

版本控制包括:检入检出控制、分支和合并、历史记录。

2.为什么要用版本控制工具

版本控制工具的作用:帮助我们记录和跟踪项目中各文件内容的修改变化。

版本控制工具的分为3类:

1)、直接访问式版本控制系统

2)、集中式版本控制工具,比如CVS、SVN

3)、分布式版本控制工具,比如git

集中式版本控制工具和分布式版本控制工具的区别在于:开发人员之间相互同步修改内容的方式不同。

二:各种版本比较

CVS(使用量较少,从RCS发展而来)、SVN、GIT

并发修改:全部支持

并发提交:CVS每个文件均出现一个版本号。支持:SVN和GIT

历史轨迹:SVN和GIT支持更名,即使改名也可以定位到对应版本,CVS不支持

分布式:GIT支持(不需要专门服务器),SVN和CVS不支持(需要专门的服务器)

三、SVN 服务器端的安装和配置    Windows的SVN教程

客户端下载地址:TortoiseSVN:http://tortoisesvn.net/downloads.html

服务端下载地:VisualSVN:http://www.visualsvn.com/server/download

服务端和客户端配置图

SVN版本工具_Git版本工具
SVN版本工具_Git版本工具
SVN版本工具_Git版本工具
SVN版本工具_Git版本工具

客户端配置:

选择安装目录

SVN版本工具_Git版本工具

仓库位置及磁盘路径(仓库下载后所放的位置)。

SVN版本工具_Git版本工具
SVN版本工具_Git版本工具

该文件用于跟服务端仓库联系的文件夹,可以进行svn的操作,增删改查代码。其中的.svn千万不要删,若删除则变成一个普通文件夹。

SVN版本工具_Git版本工具

四、SVN的基本操作

1、基本操作

1).在有.svn的文件夹中创建一个Test.java文件,右键,commit进行提交。可以直接在文件夹中删除文件,然后svn—commi,选中删除。。

2).修改文件但未提交时,客户端和服务端的文件内容不同,需commit进行提交。

2、SVN常见问题

1).TortoiseSVN—Settings—Saved Data—clear all 清除权限。

2).及时更新代码,提交时加上文字说明。

3).TortoiseSVN—Show log 查看文件历史记录。

4).若想恢复到某次修改,右击该记录—Revert to this revision 恢复到该版本—Revert,。

5).误操作,删除某文件。在.svn文件的文件夹右击鼠标,选择Show log,下载对应文件。

6).若A和B用户在操作同一文件时,A提前提交,B再提交会出现提交失败问题。此时需要更新最新版本文件(SVN的自动合并)。若A和B改的是同一行代码,则会冲突无法自动合并。

7).a.A和B文件若冲突地方较多,且双方均有可用代码。b.若代码被修改但未发现

解决方法:

a.先将自己修改的内容备份,再把最新版本更新下来,使用TortoiseSVN—Diff进行比较,并协商。

b.Showlog,逐个版本进行寻找,找到修改的作者,进行协商。

                                      第2部分  SVN从入门到放弃  Linux的SVN教程

安装命令:  subversion包含服务端和客户端

Ubuntu: apt-get install subversion

CentOS: yum install subversion

其余linux版本,不保证代码全部可执行

服务端和客户端命令

服务端:

svnserver:控制svn系统服务的启动

svnadmin:版本库的创建/导出/导入/删除等

svnlook:查看版本库的信息等

客户端:

svn:版本库的检出/更新/提交/重定向等

创建版本库: svnadmin create/path/repos  

如:mkdir svnroot;svnadmin create/svnroot/test 或者cd svnroot svnadmin create test2

svnadmin create --fs-type fsfs/dbd test:数据保存类型

删除版本库:rm -rvf/path/repos  rm -rvf/svnroot/test1

版本库配置: 配置文件位于:/path/repos/conf/

authz:配置用户组以及用户组权限

passwd:配置用户名和密码

svnserve.conf:配置默认权限、权限配置文件及密码配置文件

版本库的访问:

运行svn:svnserve -d -r /svnroot/test/

访问svn服务

1)在桌面创建文件夹svntest

检出版本库

2)cd svntest— svn checkout/co svn://ip地址(域名) --username test --password xxx    也可以co svn://ip地址(域名) 输入用户名和密码

https://tortoisesvn.net/  自行下载客户端软件

桌面鼠标右击有checkout检出

svn自启动:

vim /etc/rc.local

svnserve -d -r /svnroot/test/     在exit0前加操作命令

SVN常见术语及文件状态

术语:版本库、检出、工作副本、更新、提交、删除、修改

文件状态:无版本控制、增加、修改、常规、冲突、删除、锁定

checkout和export的区别与使用

checkout:检出,检出的工作副本目录中含.svn文件夹,在版本控制下

export:导出,导出的项目文件中没有.svn文件夹,无版本控制

如:

svn checkout -r 版本号

svn export -r 版本号

常见SVN客户端命令:

svn add: 添加到版本控制

svn add 文件名

svn add 目录名 增加目录及目录下文件

svn add 目录名 --non-recursive 只增加目录

svn add *   加载所有文件和目录    svn add * --force 强制执行增加

svn commit/ci:提交修改到服务器

svn commit -m "文字说明" 文件名

svn commit -m "文字说明" * 提交所有改动

svn update/up:更新工作副本

svn update/up 更新到最新版本

svn update/up -r 版本号 文件名 查看历史版本

svn delete/del:从版本库中删除文件或目录

svn delete/del/remove/rm 文件名 -m "文字说明"(可省略)

svn diff 文件名: 比较版本差异

svn mkdir 文件名:创建目录并增加到版本控制

svn cat 文件名:不检出工作副本,直接查看文件

工作副本还原revert

svn revert 文件名

svn revert *

svn revert --recursive * 递归恢复(包括子文件夹文件)

冲突

什么是冲突

常出现于工作副本长时间未更新

修改内容与需更新内容在同一处

发生树冲突的都不是二进制文本文件

如何避免冲突

如何解决冲突

发生冲突时,先推迟处理;

当处理冲突后,需要 svn resolved 命令,告诉服务端冲突已解决。

查看冲突文件时:

此时我们只需要在一排<<<<<<<<<<  

    ........    

                一排==========       之间寻找就可以了

    ........

    >>>>>>>>>>

           小于号(<)到等号(=)之间的内容是自己的;

             等号(=)到大于号(>)之间的内容是对方的。

如果一时还无法决定,我们可以输入p进行推迟提交; 如果已经决定了,那么就可以输入e来编辑这个文件。

锁定lock与解锁unlock

svn lock 锁定文件,防止其他人对文件进行提交

svn unlock 解锁文件

svn list :列出当前目录先所有文件

svn status:列出工作副本中文件(夹)的状态

svn log:查看提交日志(来自svn cide -m参数)

svn info:工作副本及文件(夹)的详细信息

多版本库的解决方案:

TCP/IP协议端口号范围:0-65535号

0-1023号为公认端口

1024-49151号为注册端口

49152-65535号为私有端口,用户可随意分配

解决方法:

监听端口:svnserve -d -r /path --listen-port 端口号

killall svnserve 停止所有服务

1).手动指定不同的版本号

2).将版本库放入同一目录下,使多个版本库用同一个端口号 svnserve -d -r /svnroot/

检出工作副本:svn co svn://ip地址/test

总结:多个端口号可以创建在任意位置,但端口号容易混淆;使用同一个端口号必须创建在同一目录下,无需分配端口号。

svn copy

工作副本到工作副本的复制:svn copy/cp 文件名 目标文件名

指定文件版本:svn copy/cp -r 版本号 文件名 目标文件名

多个文件复制:只能复制到处当前位置以外的位置

svn cp 文件名1 文件名2 ... path

本地工作副本到线上副本的复制(不能跨库):svn cp 文件名 svn://ip/path/目标文件名 -m "说明"

线上到本地工作副本复制(可以跨库):svn cp svn://ip/path/文件名 目标文件名

主干版本和分支版本

创建分支版本

将当前版本库cp到主干版本:svn cp svn://ip/test/ svn://ip/test/trunk -m ""

创建分支版本:svn cp svn://ip/test/trunk svn://ip/test/branch -m ""

在工作中,当版本库创建好后,创建trunk和branch和备份版本

HOOKS钩子应用:

什么是钩子:当执行某些特定操作时触发执行预定设定好的任务

进入版本库的hooks目录中,会看到以.teml结尾的文件,去掉.teml结尾,该文件则会执行。

例如:cp -a post-commit.tmpl post-commit

赋予可执行文件:chmod +x post-commit

版本库的精简和丢弃:

killall svnserve—svnadmin dump /svnroot/imooc(版本库文件系统的路径)/ -r 6:16 > -/tt.repo  丢弃版本6之前版本

创建新的版本库newtest—将版本库数据加载进来 svnadmin loa /svnroot/newtest/ < ~/tt.repo

将test版本库中的配置文件复制到新的版本库中:

cp -av /svnroot/test/conf/* /svnroot/newtest/conf/

删除旧版本库:rm -rvf /svnroot/test

运行版本库:svnserve -d -r /svnroot/

版本库的迁移与重定向

迁移:

方法1:从旧的版本库备份数据,然后创建一个新的版本库,把备份的数据加载到新的版本库中

方法2:整个版本库压缩成一个压缩包,再移动到新的服务器上解压后再运行

1).停止svn的服务

2).把/svnroot/repo压缩车repo.zip

3).复制repo.zip到新服务器并解压

4).在新服务器上运行repo版本

重定向:当版本库迁移之后,它的UIL就会失效。那么我们就要把服务端的UIL重新定义到新的UIL上。

演示:

1).停止svn服务

2).迁移版本库,并运行

3).svn switch/sw --relocate svn://ip/原url svn://ip/新url

4).执行svn update

常见坑与总结

1-忘记配置svnserve.conf

2-运行版本库的路径问题  运行或检出必须有一个

3-svnadmin dump(>)/load(<)  管道符号

至此,SVN常用操作教程完成。

关于GIT教程,等有空闲时会及时补上。

                                    第3部分  版本管理工具介绍——GIT 篇

GIT介绍

版本控制工具发展历程:

    1:cvs    1985,集中式, 始祖  (网络环境)

    2:svn    2000,集中式 , 集大成者 (网络环境)

    3:git     2005,分布式,geek主流 (无网环境)

    4:GitHub    2008,托管网站,geek社区 (程序猿托管网络)

集中式:服务器       分布式:效率高

GIT下载和安装:

GitHub官网-->Find out more-->https://desktop.github.com/-->下载Git(Hub)-->默认安装。

Linux安装GIT:

 软件包管理器安装:yum install git

    yes表示同意安装

    git --help ,git帮助文档

GitHub注册:

https://github.com/pricing

注册github账号: 通过github客户端进入github官网 进行注册,邮箱验证。

svn版本需要联网操作!而git不用联网就能进行操作。

新建一个Git项目:

  1. New repository。 2、新建项目的页面中:项目名称repository name(不可用中文),描述Description(可用中文),他人是否可见(public/private),是否加载一个README(勾选了那么我们创建的项目写的一些注解,可以在GitHub上边首页看到注解)。

将项目克隆到本地

1:mkdir test 先创建文件

2:cd test

3 : git clone URL (在GitHub中复制项目的链接)

4:ls 查看

Linux环境下第一次提交项目:

vi 文件名 新增一个文件

git status 查看工作区的状态

git add 文件名 建立跟踪

git commit 提交变更

git push 推送到GitHub上。

填写账号和密码,完成推送。

Windows下检出项目和提交项目:

github主页,点击clone to desktop->open in desktop

本地git客户端编辑,同步Sync 右击、忽略所有bak文件。

代码冲突:

同一时间,同一块代码,不止一个人修改,产生了代码冲突。

Linux下解决思路:

  1. A先提交文件F,正常提交,无冲突问题.

2. B提交文件F时,报冲突.

3. B需要执行: git pull 操作,会自动将服务器端有冲突的最新文件,合并到本地

4. 进行修改,修改后重新提交。

git pull  把github上的代码拉到本地

git diff 比较两个冲突文件的不同

Windows下解决思路:

提交产生冲突提示,点击OK,会自动合并冲突内容,编辑修改,再点击Sync。

版本回到过去:

git log //查看git 提交日志,获取之前提交ID

git reset --hard commitID  

回到未来:

git reflog   //查看回到过去之前的版本号

git reset --hard commitID 

建立里程碑,版本号 操作步骤:

  1. 在github网站上.进入项目首页.

2. 横栏按钮(commits, branches, release等),找到release按钮.

3. 找到按钮:draft a new release,点击进入下一页面.

4. 填入版本号,以及说明信息.

分支开发与分支合并

创建分支,修改内容,提交,发布

合并分支到master

切换到master,进入新分支

将新分支拖拽到master 左侧,merge

另一种分支方式,更适合开源软件

修改提交发布新分支

右键点击项目名称,view in github,

点击按钮merge push request,commit

经验共享:

1、多用客户端和工具,少用命令行,除非是在Linux服务器上直接开发。——学习工具是为了提升我们的工作效率,不是为了研究工具本身

2、每次提交前,diff自己的代码,以免提交错误的代码

3、下班回家前,整理好自己的工作区

4、并行的项目,使用分支开发

5、遇到 冲突,搞明白冲突的原因,千万不要随意丢弃别人的代码