svn本地开发与tags修复

svn仓库

|—project
|—|—trunk
|—|—|—app1
|—|—branches
|—|—|—dev1
|—|—|—|—app1
|—|—|—|—1.0
|—|—tags
|—|—|—1.0

本地开发目录

|—~/wwroot
|—|—app1 已经配置nginx的目录.

那么app1是开发工作区,那么现在app1在为2.0本地开发中, 那么这个时候1.0突然有问题急需要修复. 怎么样可以把app1这个工作区的切换到1.0上?

可以想到的方式

  1. svn switch

svn switch 但是切换后会和当前工作区的代码合并. 

  1. 在本地在建立目录配置nginx

但是这种方法感觉好麻烦, 还是想是在方式1上的可以直接把项目切换到1.0分支上修复, 这样就可以不用重新配置nginx

svn目录划分

├── branches
│   ├── mjw
│   │   ├── ks
│   │   │   └── readme.md
│   │   └── ks_1.1.0_beta
│   │       └── readme.md
│   └── test
│       └── ks
│           └── readme.md
├── doc
├── tags
│   └── ks_1.1.0_beta
│       └── readme.md
└── trunk
    ├── api
    ├── ks
    │   └── readme.md
    └── tpl
  • trunk 主干
  • branches 分支
  • tags 标记(快照-只读)
  • doc 项目相关文档

trunk 存放相对稳定代码, 分支代码先由开发者初步测试后然后提交合并. 再由此主干发布tags.
branches 存放各个开发者的代码. 每个开发者除了自身开发代码, 还有一些由tags发布后产生的BUG 再回到此修复后提交到主干再发布.
tags 存放已发布的代码. 此目录的代码不可修改. 只可读.

图片来源: http://t.cn/RSvRBdl

查阅资料

SVN trunk(主线) branch(分支) tag(标记) 用法详解和详细操作步骤
SVN介绍及Linux下SVN命令收录

svn

SVN服务端搭建与配置

常用命令

本地初始化项目, 导入到线上库

svn import /Users/dtg/Desktop/testSVN svn://localhost/code/abc--username=test1 --password=test1 -m "初始化项目”

使用svn add的–force递归到版本化的目录下

svn add * --force

忽略项目的.git文件夹

右键 –> TortoiseSVN –> 设置 –> 常规设置 –> 在如下输入框中添加 详细教程

svn使用记录

svn

中文手册 | Englis

env: svnserve, version 1.9.3 (r1718519)

svn有两种协议svn与http. 基于svnserve的,默认端口为3690, 基于Apache的, 默认端口为Apache的默认端口80.

tip: svnserve更改auth文件是即时生效的, 无需重启服务.

服务端配置

  • authz 设置用户或组对项目各目录的权限
  • passwd 设置用户与密码
  • svnserve.conf 服务主配置文件

auth配置

[group]
admin = aaa,bbb,ccc
vip = a1
man = b1
custom = c1   //这里先设定有这么多个角色和用户
        //假设库的名字叫cp
        //下面在cp下建立2个平行的目录vip和main
[/]
@admin=rw     //表示根目录下只有admin才有读写权限  
[cp:/]
*=r         //在cp库下,除了admin下,所有人都有读的权限
@admin=rw    //在cp库下,admin具有读写的权限
[cp:/vip] 
*=        //除了vip和admin之外,所有人没有任何权限
@vip=rw       //
@admin=rw        //
[cp:/main]
*=         //除了以下角色外,其他人没有任何权限
@admin=rw    //
@vip=rw    //
@man=r        //

tip: 如果上一级用户拥有权限但是没有拥有特定的这个权限的话, 是看不到的该文件夹的. 或者说, 拥有子目录权限但是没有主目录权限的话, 可以直接通过完全的子目录链接来达到访问的目的.

auth配置

客户端配置

rm ~/.subversion/auth/svn.simple/* 删除当前账户的所有旧svn密码记录 更多

界面操作

svn重命名

  1. 选中文件或者文件夹—右键—TortoiseSVN—改名。
  2. svn 提交

命令操作

svn add . --force 添加新文件及修改文件. tip: 通常情况下,命令svn add *会忽略所有已经在版本控制之下的目录,有时候,你会希望添加所有工作拷贝的未版本化文件,包括那些隐藏在深处的文件,可以使用svn add的–force递归到版本化的目录下. 更多 svn add * --force

svn add --non-recursive otherdir 只添加一个目录而不包括其内容 svn命令行忽略文件及文件夹

svn copy http://svn.example.com/project/trunk http://svn.example.com/project/branches/1.0 -m "Release 1.0" svn创建branches、tags命令 更多
svn rm http://svn.example.com/project/branches/1.0 -m "误创建" 删除branches, tags

svn switch svn://xx.com/repo/branches/TRY-something 把工作目录转到分支 tip: 切换之间要有关系 如 trunk branches之间可以切换 branches/ks branches/ks_1.0.1_beta之间不可以切换 错误信息: Path '.' does not share common version control ancestry with the requested switch location

cd br_feature001 svn merge http://svn_server/xxx_repository/trunk 合并主干上的最新代码到分支上 分支每次开发前要执行的命令. hook自动合并可否?

svn delete [文件] 删除文件

svn log -l 5 查看最后五条log 更多
svn ls svn://svn.example.com/tags 查看版本库的文件 ls -> log 可查看日志

撤销操作

svn revert --recursive example_folder 撤销svn add 


svn: E220001: 遇到不可读的路径;拒绝访问.(SVN Error: Unreadable path encountered; access denied;)

在项目的conf/svnserve.conf 中, 设置 anon-access = none 即可. 然后重启Subversion 服务. tip: 如果本地SVN客户端查看过日志会有缓存, 需要在 设置->日志缓存->缓存的版本库 中删除有问题的版本缓存 再重新查看日志就好了. svn: E220001: 遇到不可读的路径,拒绝访问

当树冲突时 如错误提示出现

svn: E155015: 提交失败(细节如下):
svn: E155015: 提交终止: “/home/wwwroot/xxxxxx/Runtime/Cache” 处于冲突状态

svn resolved <文件名/文件夹名字 >

root@futongdai:~# cd /home/wwwroot/newcrm.ofim.com/
root@futongdai:/home/wwwroot/newcrm.ofim.com# svn up
正在升级 '.':
已跳过 'Admin/*****.php' -- 节点处于冲突状态
版本 1312。
冲突概要:
跳过的路径:1

解决方法

step1
root@futongdai:/home/wwwroot/newcrm.ofim.com# svn resolve --accept working Admin/*****.php
“Admin/*****.php”的冲突状态已解决
step2
root@futongdai:/home/wwwroot/newcrm.ofim.com# svn revert Admin/*****.php        
已恢复“Admin/*****.php”

svn 恢复 如果你 svn add * 后想取消 命令 svn revert * 或 svn revert * --depth infinity

查阅资料

SVN介绍及Linux下SVN命令收录
svn命令行创建和删除分支和tags 创建分支与合并, 写的很详细.