• 基础教程


    opn-open的教程很好,教程链接:

    http://www.open-open.com/lib/view/open1432211679708.html#articleHeader5

    SVN工作原理

    SVN(SubVersion)的基本工作思路是这样的:在一台服务器上建立一个源代码库,库里可以存放许多不同项目的源程序,由源代码库管理员统一管理这些源程序。

    每个用户在使用源代码库之前,首先要把源代码库里的项目文件下载到本地(Checkout),然后用户可以在本地任意修改,最后用svn命令进行提交(Commit),由svn源代码库统一管理修改。如下图:

    SVN基础教程

    • SVN服务器:运行SubVersion服务的计算机,SubVersion支持Linux和Windows,更多的是安装在Linux下。SVN提供服务有两种方式(运行方式):独立服务器和借助Apache服务器,分别使用SVN协议和Http协议。
    • SVN客户端:用户通过SVN客户端同SVN服务器打交道,SVN客户端分为命令行工具和图形化工具。最流行的客户端是TortoiseSVN。也可以在Eclipse中使用SVN插件。

    SVN基础教程

     

    二、SubVersion的使用

    可以在http://subversion.apache.org/packages.html下载SVN并安装(本文使用windows版本,过程不多说)。在SVN中集成了服务器端和客户端组件:

    • 服务器组件(管理员用):svnadmin、svnserve
    • 客户端组件(程序员用):svn

    这些组件命令都位于SubVersion安装目录下的bin目录下。

    友情提示:安装完SVN后,通过”svnadmin –version”验证是否安装成功。如果出现错误“svnadmin不是内部或外部命令”,则需要手动将SVN的bin目录加入到path环境变量下。

    1、创建SVN仓库

    1)先创建一个目录:E:svnrepo epoDemo1。后面就使用该目录作为SVN仓库。

    2)创建仓库:svnadmin create E:svnrepo epoDemo1。创建仓库后的目录结构如下:

    SVN基础教程

    3)启动SVN服务:svnserve -d -r E:svnrepo epoDemo1,如下图:

    SVN基础教程

    这样就启动了repoDemo1这个仓库的服务(单仓库),如果在svnrepo目录下还有其他仓库,且要同时启动多个仓库,执行svnserve -d -r E:svnrepo即可(多仓库)。

    一般情况下,访问SVN仓库的URL格式形如:svn://192.168.1.6/repoDemo1,但如果启动的是单仓库,则URL直接用:svn://192.168.1.6表示。svn协议的默认端口号为3690。

    小技巧:如果需要频繁使用该仓库,则可将该SVN服务注册成windows服务,这样在计算机开机时就可以启动该服务。如下图:

    SVN基础教程

    删除该windows服务:sc delete svnService。

    2、SVN客户端操作(命令行)

    重点:checkout(检出)、commit(提交)、update(更新)

    1)在E盘下建立user1、user2两个目录,模拟两个协同工作的用户的workspace。

    2)检出:第一次和SVN服务器交互时,需要使用checkout将仓库检出到本地。

    SVN基础教程

    说明:检出一次,就建立了与SVN仓库的连接。

    3)提交:commit

    在user1目录下新建Demo1.java文件,将该文件提交到SVN仓库。下图演示了三种典型的错误提交。

    SVN基础教程

    4)更新:update

    切换到user2的工作空间(user2目录下),user2第一次使用SVN仓库,需要检出。user2修改Demo1.java后提交。切换到user1目录,更新(update)。

    SVN基础教程

    5)删除与恢复:delete、revert

    SVN基础教程

    说明:如果delete后,提交到服务器(commit),则服务器上的数据也被删除了(慎用)。

    三、SVN的目录约定

    • /trunck:开发主线
    • /branches:支线副本
    • /tags:标签副本(一旦创建,不允许修改)

    1)使用trunk作为主要的开发目录

    一般的,我们的所有的开发都是基于trunk进行开发,当一个版本(release)开发告一段落(开发、测试、文档、制作安装程序、打包等结束后),代码处于冻结状态(人为规定,可以通过hook来进行管理)。此时应该基于当前冻结的代码库,打tag。

    当下一个版本/阶段的开发任务开始时,继续在trunk进行开发。此时,如果发现了上一个已发行版本(Released Version)有一些bug,或者一些很急迫的功能要求,而正在开发的版本(Developing Version)无法满足时间要求,这时候就需要在上一个版本上进行修改了。解决方法是基于发行版对应的tag,做相应的分支(branch)进行开发。

    2)下图为struts2的SVN仓库目录:

    SVN基础教程

    现在Struts2的代码使用git管理,所以现在查看Struts2的SVN仓库是空的。

    TortoiseSVN是现在最流行的SVN客户端工具,使用图形化界面和SVN仓库交互(作为命令行方式的替代)。关于TortoiseSVN的安装省略。

    安装完成后,在任意位置右击都能看到TortoiseSVN选项。

    1、基本操作

    1)创建仓库

    创建目录:E:svnrepo epoDemo2,进入该目录下,右击 — TortoiseSVN — Create repository here,并创建默认的SVN目录结构,如下图所示:

    SVN基础教程

    2)检出:checkout

    在E盘下建立user3、user4两个目录,模拟两个协同工作的用户的workspace。

    进入user3目录下,右击 — SVN Checkout,在URL of repository中输入:file:///E:/svnrepo/repoDemo2。【此时仓库还没有启动SVN服务,所以使用file://】

    SVN基础教程

    3)提交:commit

    在user3/trunk目录下新建Demo1.java,在该文件上右击 — TortoiseSVN — add,则将Demo1.java纳入版本控制。然后右击 — SVN Commit,提交至代码仓库。

    4)更新:update

    对user4进行上面的检出操作。并修改user4目录下的Demo1.java(如增加一个字段),并commit。

    回到user3/trunk,右击 — SVN Update。

    5)启动SVN服务。这步需要在命令行中输入:svnserve -d -r E:svnrepo

    6)访问SVN仓库。在任意空白位置右击 — TortoiseSVN — Repo browser,URL输入:svn://192.168.1.6/repoDemo2即可浏览SVN仓库中的内容,如下。

    SVN基础教程

    2、其他操作

    下面的操作都位于右键菜单的TortoiseSVN中。

    1)删除:delete

    删除文件或目录,不能直接用Windows的删除命令来操作,那样只是没有显示出来,实际并没有删除,在更新后,删除的文件又会被更新出来的。要想从库中 删除,必须选中你要删除的内容,TortoiseSVN — delete,这样才会将这个文件标记成要删除的。确认需要删除后,使用前面所讲的提交命令,就会真正的在库中删除了。

    2)重命名:rename

    重命名也不能直接用Windows的重命名命令来操作,必须选中你要重命名的文件,TortoiseSVN — rename。修改后提交就可以更新到仓库。

    改名的处理方式相当于新增了一个以新名称命名的文件,原名称命名的文件进行了删除。

    3)还原:revert

    在未提交之前,你对前面做的操作反悔了,可以使用revert来恢复。

    4)检查更新:Check for modifications

    ① 此功能可以显示你所做的修改有哪些还没有提交的。② 还可以看到版本库里的改动,即别人提交了哪些文件的改动,你还没更新到本地。

    5)导出:export

    使用SVN的工作空间每个目录下面都有一个.svn隐藏目录,利用SVN的export命令可轻松地导出不含.svn目录的工作空间。

    3、冲突问题的解决(☆)

    何时发生:接 着4.1节中的操作,假设user3和user4目录下的Demo1.java都更新到了最新版本。user3修改Demo1.java,提交至仓库。若 user4也修改Demo1.java并提交,此时user4的TortoiseSVN会报提交版本过时的错误,并提醒user4需要更新,更新时就会发 生冲突。如下图:

    SVN基础教程

    对于每个更新冲突的文件,Subversion会在冲突文件所在目录下放置了三个文件:

    • Demo1.java.mine:发生冲突时的本地版本。
    • Demo1.java.r3:最后更新之后的本地版本。
    • Demo1.java.r4:仓库中的最新版本。

    解决方法 1:

    ① 在Demo1.java上右击 — TortoiseSVN — Edit conflicts,这时你需要确定哪些代码是需要的,做一些必要的修改然后保存。小技巧:编辑冲突时,可使用直接复制需要的代码到Merged窗口即可。

    ② 编辑完成后保存,直接选择Mark as resolved,即标记为冲突已解决。退出编辑冲突窗口,发现冲突发生时生成的三个文件被自动删除了,且Demo1.java变成了未提交状态。

    SVN基础教程

    ③ commit,OK。

    解决方法 2:

    直接修改Demo1.java,把其中的一些标记删除即可(前提是服务器上的和本地的内容都需要保存)。

    4、TortoiseSVN图标

    SVN基础教程

    部分图标的说明:

    • normal:状态正常
    • modified:对本地的副本做了修改,需要提交到服务器
    • conflicted:有冲突
    • readonly:文件是只读的,要修改必须先获取锁
    • locked:获得锁
    • deleted:计划从版本库中删除
    • added:已被计划纳入版本控制
    • non-versioned:未纳入版本控制

    5、认证与授权

    所谓认证(Authentication),就是给使用该仓库的用户分配一个用户名和密码,用户在连接仓库的时候需要输入用户名/密码。授权 (Authorization)就是为指定用户分配特定的权限,如只读、读写等。认证与授权的设置需要修改仓库conf目录下的文件,如下:

    • authz:认证文件,分配用户名、密码。
    • passwd:授权文件,为现有用户分配组,并为组分配权限。
    • svnserve.conf:指定认证、授权文件的位置。

    1)修改conf/svnserve.conf

    SVN基础教程

    2)修改conf/passwd

    SVN基础教程

    3)修改conf/authz

    SVN基础教程

    这样,当用户再次执行checkout、commit、update时,就会要求认证。

    五、subclipse插件的使用

    Eclipse提供了集成SVN的插件 — subclipse,本文重点关注subclipse的使用。Eclipse中插件的安装不是这儿的重点。安装成功后,可以看到下面的视图 (Windows — Show View)和透视图(Windows — Open Perspective):

    SVN基础教程

    下面的操作使用了4.1节中的资源库(repoDemo2)。

    1)关联资源库

    进入SVN资源库研究透视图,在SVN资源库面板上右键 — 新建 — 资源库位置,URL中输入:svn://192.168.1.6/repoDemo2。

    2)共享项目:share Project

    新建一个Java Project,名称为svnProject,在项目中新建一个Demo1.java。

    共享项目:在项目上右键 — Team — Share Project…,将项目导入到repoDemo2。在输入文件夹名时,一般选择使用项目名称作为文件夹名。

    3)提交:Commit

    共享之后,项目并没有提交到仓库中,此时在项目上右键 — Team — Commit,就可以将现在的项目提交到仓库中。

    4)检出:Checkout

    新建一个workspace,模拟另外一个用户(user2)。首先还是关联资源库,在svnProject上右键 — 检出为。

    SVN基础教程

    在Demo1.java中新增一个字段并提交(在user2的workspace中做的)。

    5)更新:

    切换到user1的工作空间,更新项目。不多说,Team — update

    6)冲突处理

    冲突的产生见4.3节。原则:提交之前先更新。

    4.3节中的两种解决方法也适用于subclipse,解决方法1对应着subclipse中的Synchronize视图(View),解决方法2类同。

    六、SVN与Apache整合(用到再看)

    业务场景:在上面的Demo中,SVN仓库对外提供服务都是通过SVN协议,最直观的体现就是URL都是以svn://开头的。在开源项目中使用的SVN仓库对外提供服务时都是使用http协议,此时需要结合Apache服务器。

    1)安装Apache服务器(假定安装在C:Apache2.2)

    2)修改C:Apache2.2confhttpd.conf释放掉注释和增加红色边框的两行(有顺序要求)

    SVN基础教程

    3)从SVN安装目录的bin目录下,拷贝mod_authz_svn.so和mod_dav_svn.so到C:Apache2.2modules目录中

    4)用Apache服务器的htpasswd创建密码文件

    SVN基础教程

    5)拷贝project1_password到E: epositorysvnproject1conf目录下

    6)拷贝以下内容到Apacheconfhttpd.conf最后

    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    11
    12
    13
    14
    15
    16
    17
    18
    #配置虚拟目录#
    <location /svn/itheima>
    #引用远程访问模块
    DAV svn
    #项目版本库路径#
    SVNPath E:/repository/svn/project1
    #授权文件#
    AuthzSVNAccessFile E:/repository/svn/project1/conf/authz
    #所有用户都需要身份验证#
    Satisfy Any
    Require valid-user
    #验证方式#
    AuthType Basic
    #项目的名称#
    AuthName"project1"
    #用户文件#
    AuthUserFile E:/repository/svn/project1/conf/project1_password
    </location>

    7)访问http://localhost/svn/itheima/trunk即可访问SVN仓库。

    SAE上所有的应用创建时,系统会自动为该应用创建一个SVN仓库。该SVN仓库是所有代码部署方式的最终入口。开发者可以使用SVN客户端提交代码来完成应用代码的部署。或者使用在线代码编辑器。

    SVN基础教程
    SVN仓库地址 https://svn.sinaapp.com/YOUR_APP_NAME
    SVN用户名 SAE安全邮箱
    SVN密码 SAE安全密码

    注解

    SVN仓库地址可以在应用管理面板的“代码管理”中找到,仓库地址可以直接使用浏览器进行访问。 SVN用户名和密码为安全邮箱和安全密码,不是微博账号和微博密码! 如已启用微盾动态密码,则此处填写“安全密码”+“微盾动态密码”

    使用SVN客户端

    TortoiseSVN客户端

    注解

    如果使用TortoiseSVN 1.8.x部署代码发生问题,请尝试更新至最新版本或者使用1.8以下的版本。

    在Windows下推荐使用乌龟(Tortoise)SVN客户端。 TortoiseSVN 是 Subversion 版本控制系统的一个免费开源客户端,可以超越时间的管理文件和目录。文件保存在中央版本库(即SAE中央SVN仓库),除了能记住文件和目录的每次修改以 外,版本库非常像普通的文件服务器。你可以将文件恢复到过去的版本,并且可以通过检查历史知道数据做了哪些修改,谁做的修改。这就是为什么许多人将 Subversion 和版本控制系统看作一种“时间机器”。

    TortoiseSVN下载: http://tortoisesvn.net/downloads.html

    下面详细介绍使用TortoiseSVN向SAE部署代码。

    第一步,如图1,创建一个新文件夹作为本地工作目录(Working directory),可以使用应用名为文件夹名。如,为我的应用devcenter创建本地工作目录。

    SVN基础教程

    第二步,从SAE的SVN仓库检出(checkout)一个应用的全部版本代码,如图2,右键–>点击“SVN Checkout”

    SVN基础教程

    在弹出页面中填写仓库路径即可,这里是:https://svn.sinaapp.com/devcenter/,其它默认参数即可,如图3:

    SVN基础教程

    Reversion处,“HEAD revision”是指最新版,也可以指定Revision为任意一个版本。

    点击“OK”,出现下载界面,如图4:

    SVN基础教程

    如果一切顺利,devcenter应用所有版本代码将会全部出现在刚刚创建的devcenter文件夹下,如图5:

    SVN基础教程

    在本地使用你喜欢的编辑器,编辑任意文件,保存后该文件图标将会出现红色感叹号,如图6所示:

    SVN基础教程

    看,刚刚修改过的index.php变色了。下面需要提交(commit)最近的更新。在index.php文件上击右键,出现菜单

    选择“SVN commit”,如图7:

    SVN基础教程

    然后填写关于本次更新的日志(log message),这是必填项,否则commit会失败。如图8:

    SVN基础教程

    当您看到如图9所示,表明刚才的修改已经成功提交,并且前该devcenter项目的SVN版本号加1,变成30.

    SVN基础教程

    在SVN工作目录下,对于文件修改,完成后只需要commit就ok了,但对于新增文件,或者从其它目录复制进来的文件或文件夹,需要在commit之前 需 要做一步add操作,即将文件或文件夹添加到svn工作目录中来,否则SVN客户端不认它。具体操作很简单,如图10:

    SVN基础教程

    然后再如图7所示,右键commit 即可。

    更多Tortoise SVN使用帮助,请参阅: http://www.subversion.org.cn/tsvndoc/

    Notepad++集成SVN插件

    Notepad++是一款Windows环境下很受欢迎的免费开源的代码编辑器,有很丰富的第三方插件。

    下面介绍Notepad++的SVN插件的安装及使用。

    如图12,点击Plugin –> Plugin Manager –> Show Plugin Manager

    SVN基础教程

    打开后,在“Available”页找到“Subversion”,然后点击“Install”,如图13所示:

    SVN基础教程

    安装成功后会在Plugins菜单下出现”Subversion”子菜单。

    打开之前checkout下来的任一文件,如devcenter/1/index.php,编辑完成后,点击Plugins –> Subversion –> Commit File(或使用 快捷键Ctrl+Alt+A)

    出现熟悉的一页,如图14所示:

    SVN基础教程

    对,这就是乌龟SVN的Commit页面,输入Log Message,点击“OK”即可提交。

    使用UltraEdit Studio部署

    UltraEdit Studio(注意不是UltraEdit,UltraEdit不能与SVN整合)配置稍微复杂些。

    第一步,SVN仓库账号设置,如图15所示:

    SVN基础教程

    然后填写仓库信息,如图16所示:

    SVN基础教程

    完成后,创建Project,如图17所示:

    SVN基础教程

    填写project名b.prj后,出现如图18所示”Project Settings”,点击“Add Folder”,出现“NewFolder”,将”Group”前的勾去掉,然后点击“Browse”,在“Browse for Folder”页找到之前checkout出现的本地工作目录。

    SVN基础教程

    点击“OK”后出现提示,如图19所示:

    SVN基础教程

    表明UEStudio自动识别出了选择的代码目录是一个SVN工作目录,并询问是否整合,点击“Yes”,出现如图20所示:

    SVN基础教程

    大功告成,”Close”之后即可以编辑代码,并随时commit修改。如图21所示:

    SVN基础教程

    使用EditPlus部署

    EditPlus依赖于Tortoise SVN(TSVN),必须先安装。

    使用最简单,见图22所示:

    SVN基础教程

    当编辑SVN工作目录里的文件时,File –> TSVN即出现相应可操作的菜单。

    SVN命令行工具

    例如,您刚刚创建了应用newapp,在本地执行:

    svn checkout https://svn.sinaapp.com/newapp

    第一次checkout时需要验证,用户名/密码为您的SAE安全邮箱和安全密码(非微博登陆账号密码,如已启用微盾动态密码,则此处填写“安全密码”+“微盾动态密码”)。

    1. 上传代码。如部署wordpress到版本1。

      svn checkout https://svn.sinaapp.com/newapp
      cd newapp/1
      cp -rf /path/to/wordpress/* ./
      svn add ./
      svn commit -m"add wordpress"
    2. 修改代码。假如需要修改newapp应用版本1根目录下某个文件,如index.php,完整的操作流程如下:

      svn checkout https://svn.sinaapp.com/newapp #如果已经checkout过了,不需要重新checkout。
      cd newapp/1
      vim index.php #这里编辑代码
      svn commit -m "edit index.php"

    注解

    应用配置文件config.yaml不会被部署到用户的代码目录,但会被存储在服务端SVN仓库中。因此下次可以被checkout出来,但不会被用户访问到。

    SAE提供的SVN服务完全支持标准SVN的所有命令,更详细的使用说明请查阅SVN官方帮助文档。

    SVN for SAE的限制条件

    为了保持与SAE兼容,使用SVN方式部署代码到SAE有如下限制:

    1. 文件名或目录名不允许含有以下字符:”,*,?,<,>,|,另外文件或文件名的开始与结束也不允许有空格。
    2. 每个应用代码总大小不超过对应等级的配额
    3. 顶层目录下只允许存在10个以内的版本目录,目录名必须为正整数(详细见: 应用目录、应用版本目录、应用版本 )

    常见错误说明及解决办法

    错误提示错误原因解决方法
    The change log need some words(not null) 提交时没有添加log message 提交时加上log message即可
    The log message is a pathname (was -F intended?); use ‘–force-log’ to override log message 与路径名称相同 修改log message
    invalid directory or file: xxx 文件不符合SAE的目录结构规定,详细见 应用目录、应用版本目录、应用版本 按照 应用目录、应用版本目录、应用版本 的要求组织目录结构
    Too many versions, 10 allowed 版本目录多于10个,最多不超过10个 删除刚刚创建的版本目录即可
    Too many files: XXX (less than 2000 is allowed). XXX目录下文件的数量超过2000 删除XXX目录下的文件,使其总数降至2000以下
    out of quota, quota: xxx, used: yyy 该应用下代码(不包括.svn目录)总大小超过配额 删除不必要的代码再尝试提交
    类似Repository UUID ‘305daf1b-94be-48ee-a4b9-f4bcd36320de’ doesn’t match expected UUID ‘44e2f7a2-1b69-4710-974a-b6edef0fdc12’
  • 相关阅读:
    AOC的服务还不错
    浅谈Java、MySQL的中文排序问题
    祝cnBlogs的Blogger们新年快乐!
    GT 3.9.4以及今天的工作
    堆排序
    桶排序
    常用排序算法稳定性分析
    VS2010远程调试环境配置详解
    基数排序
    如何修改数据库的服务器名称
  • 原文地址:https://www.cnblogs.com/zx3707/p/5775346.html
Copyright © 2020-2023  润新知