SVN(版本控制) 1、什么是SVN · 多人共同开发同一个项目,内部最大的问题是,在比较短的时间内如果有多人同时开发同一个文件,会造成彼此的代码相互覆盖的情况发生。 · 管理着随时间改变的数据,这些数据放置在一个中央资料档案库中(repository)。这个档案库很像一个普通的文件服务器,不过它会记录每一次文件的变动。这样你就可以把档案恢复到旧的版本,或是浏览文件的变动历史。 2、使用SVN的作用 · 多人开发同一个项目不会出现代码覆盖的情况。 · 针对一个文件可以创建许多不同的版本,并且可以随时查看不同版本的内容。 · 公司领导可以通过SVN查看每一个人的工作情况。 3、安装SVN · 服务器端安装 - windows下,和其他软件安装相同。 · 客户端安装 - 安装过后,windows操作系统,右键有标志。 4、创建仓库 · >svnadmin create h:/svnServer/app/shop(仓库地址。指定一个创建位置,事先要有相对应的文件夹。windows系统中使用cmd窗口即可) *:如果创建时候,提示“不是内部或外部命令”就跑到svnadmin的执行程序文件目录去执行它。服务器端的安装路径 5、启动服务并使得本地与仓库进行联系 · 启动服务 - svnserve -d(独立的端口号) -r(仓库地址) 仓库地址 >svnserve -d -r E:/SVN/svnServer/app/book 该svn服务走svn协议,端口号是3690 - 启动的cmd窗口不要关闭,否则服务就关闭了。 6、本地客户端与远程仓库取得联系 · 先启动服务 · 在自己本地的工作目录中,【 右键 --> Checkout(检出) 】 · 填写 svn 主机名地址 (本地的svn是 [ svn://localhost ]) · 填写 本地工作目录 (默认) · 点击 OK · 如果成功,会把远程仓库中的原有文件,检出到本地的工作目录下,如果远程库中没有文件,那么什么文件也不检出。 *:检测是否与svn服务器联系成功 -->【 查看本地工作目录中,是否有隐藏文件 [ .svn ] 】 *:清除与svn服务器的联系 -->【 删除隐藏文件夹 [ .svn ] 】 7、使用SVN 一、文件颜色标志: --> 蓝色加号(+) :本地的 .svn 对该文件有形成管理 --> 绿色对号(V) :本地文件、 .svn管理的版本文件、仓库文件 三者一致 --> 红色叹号(!):本地文件、 .svn管理的版本文件、仓库文件 不一致(用户自己修改了文件) --> 黄色叹号(!):表示该文件正处于冲突状态 --> 蓝色问号(?):新建的一个文件,本地 .svn 和 远程仓库都没有该文件记录 二、开启匿名账号权限: · 提交之前,要有相应仓库账号权限。测试的话,开启匿名账号权限,无论是谁都可以提交 --> 方法:在要提交到的远程仓库中,找到 conf/svnserver.conf 配置文件,并将 anon-access = read 前面的注释去掉,并修改read为write 。 · 关闭匿名账号: --> 不用加 # ,直接设置其参数为none即可。 四、查看提交文件的日志信息: --> 转到所提交的远程仓库的文件夹,db/revprops/ , 文件夹下。 五、查看提交文件的内容: --> 转到所提交的远程仓库的文件夹,db/revs/ , 文件夹下。 六、相关操作: ++++++++++ 单用户,单文件提交 ++++++++++++ 步骤: 对要提交的单一文件: a)右键 --> SVN --> Add (使本地的 .svn 对该文件形成管理) b)右键 --> Commit (使本地文件提交到svn仓库) ++++++++++++++++++++++++++++++ ++++++++++ 多用户提交 ++++++++++++ -->首次使用svn执行 checkout ,同时会把仓库最新程序文件更新到本地 -->给仓库提交程序文件执行 Commit -->把仓库最新的程序文件更新到本地执行使用 update 指令 +++++++++++++++++++++++++++++ ++++++++++ 目录提交 ++++++++++++ --> 新创建目录中的文件,不能直接单独提交,应该先提交其目录,然后才可以单独提交其内的文件。 (因为新创建的目录还没有提交到仓库,如果其中的文件提交的话,仓库根本找不到地方存放。) ++++++++++++++++++++++++++++ ++++++++++ 提交所有需要提交的文件 ++++++++++++ --> 在本地工作目录的 “空白处” 直接 “右键 commit ” 提交。 --> 如果是新文件的话,新文件会通过 commit 指令把 add 和 commit 合并起来执行。 ++++++++++++++++++++++++++++ 8、同时运行多个svn服务 · 不能同时使用 cmd窗口 开启多个仓库服务,容易导致混乱。 --> 应直接开启“所有仓库”的父级目录,来开启所有的仓库服务。 例如:我所有的仓库都在 app/ 文件夹下存放,那么,开启仓库服务的时候,直接开启app就行。 >svnserve -d -r E:/SVN/svnServer/app 在 Checkout 远程仓库的时候, 填写 svn 主机名地址,应改为想要检出的仓库服务名称: (本地的svn改为是 [ svn://localhost/book])其中 svn://localhost 指向的是app --> 用户怎么更换主机名地址+ - 删除 .svn 文件,断开与远程仓库的联系。 - 重新 Checkout 并根据 新的主机名 建立与仓库的联系。 9、一个文件不同版本之间的切换查看 --> 选中文件 --> 右键 --> TortoiseSVN --> Update to revision... --> show log ++++++++ 重点 +++++++++ 10、冲突解决 两个程序员对同一个文件进行修改,彼此代码文件出现覆盖的情况就称之为冲突。 SVN冲突: 广义角度的冲突:提交程序文件 【本地版本号码】 小于 【 服务器版本号码】 狭义角度的冲突:多个程序员对 用一个文件、同一处代码进行修改,在他们提交文件的时候产生冲突。 冲突的解决: a):令牌方式解决,给每个文件设置令牌,谁获得令牌谁有权利开发该文件。 - vss(visusl source safe)源代码控制管理软件使用此种方式。 b):通过【版本号码】进行提交,用户 commit 文件,【本地文件版本】 与 【仓库版本号码】必须一致,才可以提交,否则禁止提交。 (本地与服务器版本号码不一致,一定是本地版本号码小于服务器的版本号码) - svn就是通过版本号码解决冲突的。 冲突具体形式: 一、大家修改的代码不在同一处 - 解决:执行update操作,把仓库最新的文件更新到本地,并和本地文件进行【Merge(合并,不是覆盖)】操作。之后继续提交文件即可。 二、大家修改的代码在同一处 - 解决:直接update操作把最新的版本更新到本地,与本地文件进行合并操作。稍作修改后继续提交。 因为文件是在同一处,svn对本地文件进行合并后,会把相关的版本文件,同时下载下来,供查看使用。其实文件已经合并成功。下载下来的文件,可以删除。 11、账号和权限 --> 远程仓库中的 conf/ 文件夹,authz文件用来配置权限,passwd文件用来配置账号,svnServe.conf主配置文件。 引入辅助配置文: -->在主配置文件(svnserve.conf)引入 两个 辅配置文件(authz,passwd)。取消前面的注释。 password-db = passwd authz-db = authz 添加账号: -->在passwd中,为该仓库添加可访问的账号 在 [users] 下添加,相应的账号名称和密码。 tom = tom123 mary = mary123 给账号设置权限 -->给制定仓库设置权限 仓库的两种权限 一、启动运行多个仓库服务 svnserve -d -r E:/SVN/svnServer/app/ [shop:/] 表示我们要给多个仓库的具体shop仓库设置访问权限 [book:/] 同上 [car:/] 同上 二、启动运行单一仓库服务 svnserve -d -r E:/SVN/svnServer/app/shop [/] 表示给单一的仓库账号设置访问权限 具体权限:read write 【*=:表示其他用户没有操作权限】 例如:给shop仓库的账号设置权限 -------------------- [shop:/] tom = rw mary = r *= -------------------- 表示shop远程仓库中,tom用户可以读和写。mary用户只读,其他用户没有权限。 给一个组别设置权限: ---------------------------------- [groups] php = php1,php2,php3 [shop:/] tom = rw mary = read @php = rw *= ---------------------------------- 先创建一个组别,将用户添加到其中,之后在 shop:/ 中,直接设置组别名的权限。组别要用@符号标记。 开启只操作某个目录的权限 --> [shop:/vedio] 步骤: 一、管理员先把该目录vedio给创建出来并提交给svn仓库 二、给外包团队 设置账号 和 设置工作目录、和其分支目录权限 三、外包团队 建立与仓库分支目录 的联系 四、外包团队给该 目录提交文件 五、管理员执行update更新操作,把该分支目录从服务器更新下来即可查看外包团队的工作情况。 --> 在shop库中创建相应的外包账号: [user] wai1 = wai123 wai2 = wai223 wai3 = wai323 --> 对shop库中的外包账号设置权限 [shop:/vedio] wai1 = rw wai2 = rw wai3 = rw *= 12、设置开机启动项服务 --> 创建服务 : sc create 服务名称 binPath=空格"svn服务器安装路径 -r svn库路径 --service" start空格auto > sc create svnd binPath= "E:/SVN/svnServer/server/bin/svnserve.exe -r E:/SVN/svnServer/app --service" start= auto --> 删除服务 :sc delete 服务名称 >sc delete svnd --> 可以创建相应的批处理文件 13、查看每个程序员的工作情况,以及整体版本控制的情况 --> 对本地项目 文件夹中的空白处 右键-->TortoiseSVN-->show log 一个文件的不同版本之间的对比: --> 选中一个文件,右键,show log ,查看版本日志,选中要对比的两个或者是两个以上的版本,右键,compaire reversion 。进行对比。 14、项目工作模式 程序员直接与svn仓库联系,不与服务器直接联系。 程序员提交文件到svn服务器,然后发邮件给维护人员,维护人员update文件后,上传到web服务器。 过程中由维护人员直接与web服务器进行联系。