svn总结

svn总结
mac自带svn服务,我们可以在本地搭建svn服务器,用来代码版本管理
一、配置SVN

1.创建代svn文件夹
    在桌面创建svn版本管理文件夹:mkdir /Users/mac/desktop/svn
    或者手动创建文件夹svn
2.创建仓库
    cd /Users/mac/desktop/svn
    svnadmin create repository
    如果没有任何提示,直接回到可以输入的状态就表明创建成功。
    进入 /Users/mac/desktop/svn 可以看到我们已经成功创建了 repository文件夹

3.如何关闭svn服务器
    打开活动监视器
    搜索svn
    点击左上角X按钮 退出svn

4.配置SVN
    进入repository文件夹中的conf文件夹
        - authz 文件 配置用户权限,如用户分组,不同用户读写权限皮遏制
        - password 文件 配置用户账号和密码
        - svnserve.conf 主要是svn进程配置。

    打开 svnserve.conf,找到以下的四行
        anon-access = read  
        auth-access = write   
        password-db = passwd   
        authz-db = authz
        把每一行前面的#和空格都删掉

    打开 password,在[users]下面添加账号和密码
        wbb = 123456
        fbz = 123456
        twf = 123456

    打开authz,配置用户组和权限
        我们可以将在passwd里添加的用户分配到不同的用户组里,以后的话,就可以对不同用户组设置不同的权限,没有必要对每个用户进行单独设置权限。
        在[groups]下面添加组名和用户名,多个用户之间用逗号(,)隔开
        如:
            [groups]
            top = wbb
            normal = fbz,twf
        一个top组,组中只有一个成员wbb,
        一个normal组,组中有两个成员fbz,twf

        使用[/]代表svn服务器中所有资源库
        [/]
        @top = rw
        top组中的成员都有读写权限

        如果是用户 不用加@
        [/]
        fbz = rw

        如果让twf用户,在iOS/testProject文件夹中只拥有 只读权限
        [/repository:iOS/testProject]
        twf = r

    配置ignore
        vi ~/.subversion/config
        如果”.subversion”目录不存在,请运行”svn status”命令,虽然此命令会失败,但是会为你创建所需要的文件。
        在下面添加:
        global-ignores = build *~.nib *.so *.pbxuser *.myode *.perspective* .DS_Store xcuserdata build *.mode1v3 *.pbxuser *.moved-aside DerivedData Pods Podfile.lock
        # global-ignores = *.o *.lo *.la *.al .libs *.so *.so.[0-9]* *.a *.pyc *.pyo

二、SVN命令
import命令
本地代码import到版本库
bogon:~ chenshuangchou$ svn import /Users/chenshuangchou/Desktop/BuickIOS/Buickhousekeeper https://192.168.21.248:8443/svn/BuickIOS/ -m "initial import"

    本地代码导入到本地svn服务器
    把我们的项目导入到svn服务器中
    svn import 项目文件路径 svn服务器地址 用户名 密码 导入说明
    svn import /Users/mac/desktop/svnTestProject svn://localhost/repository/iOS/svnTestProject --username=wbb --password=123456 -m"导

checkout命令
    从版本库checkout出来,这个目录就相当于被激活,内部跟服务器地址关联。
    bogon:~ chenshuangchou$svn checkout https://192.168.21.248:8443/svn/BuickIOS/ /Users/chenshuangchou/Desktop/BuickIOS
    
    注意:只有从服务器checkout的文件夹内才可以使用svn记录版本
    最简单的办法就是,在服务器创建一个项目文件夹,把服务器文件夹checkout到本地,然后把我们自己的项目文件全部挪到这个文件夹,这样就可以使用svn来管理了。

commit命令
    提交内容到版本库
    commit -m "添加了一个油耗柱状图" 
    提交到版本库成功的话,
    Adding  (bin)  。。。。
    Committed revision 3.

update命令
    更新版本库到本地,更新指定目录,svn update如果后面没有目录,默认将当前目录以及子目录下的所有文件都更新到最新版本。
    svn update 
    Updated to revision 3.

回退到版本2:    
    svn update -r 2 
    回退成功的话
    Updated to revision 2.

查看svn 状态:
    svn status
        ?:不在svn的控制中;
        M:内容被修改;
        C:发生冲突;
        A:预定加入到版本库;
        K:被锁定

    svn status -v path 
        显示所有文件的修改信息,在查看状态的同时,显示本地当前版本号,最后一次修改的版本号和修改人,分别在前
        M       Desktop/BuickIOS1/.git/index
        ?       Desktop/BuickIOS1/.git/objects/1c/7d8324a67dcd866bd0b4122b01b924a0e77128
        ?       Desktop/BuickIOS1/.git/objects/75/1826a72a4afd4b15faf73a0b6e4166d3bbec01
        ?       Desktop/BuickIOS1/.git/objects/a4/1c23190a65cda6a64a95bef22a9264ad64d90e
        ?       Desktop/BuickIOS1/.git/objects/b3/df5dbb592745d9744adf7a32ed2bb39370c78e
        M       Desktop/BuickIOS1/Buickhousekeeper/AppDelegate.h
        ?       Desktop/BuickIOS1/Buickhousekeeper/lastmouth_color1.png
        ?       Desktop/BuickIOS1/Buickhousekeeper/lastmouth_color2.png
        ?       Desktop/BuickIOS1/Buickhousekeeper/lastmouth_color3.png
        ?       Desktop/BuickIOS1/Buickhousekeeper/lastmouth_color4.png
        M       Desktop/BuickIOS1/Buickhousekeeper.xcodeproj/project.pbxproj
        M       Desktop/BuickIOS1/Buickhousekeeper.xcodeproj/project.xcworkspace/xcuserdata/chenshuangchou.xcuserdatad/UserInterfaceState.xcuserstate

delete命令
    svn delete path -m " delete test fle " 
    删除一个空白的文件夹:
    svn delete /Users/chenshuangchou/Desktop/BuickIOS/branches 
    D         Desktop/BuickIOS/branches
    显示删除成功

添加文件
    svn add 文件名
    批量添加 http://www.cnblogs.com/sky-heaven/p/5534104.html
    svn st | grep '^\?' | tr '^\?' ' ' | sed 's/[ ]*//' | sed 's/[ ]/\\ /g' | xargs svn add

svn revert 取消所有的本地编辑。
    概要
    子命令Svn revert PATH...描述
    Reverts any local changes to a file or directory and resolves any conflicted states. Svn revert will revert not only the contents of an item in your working copy, but also any property changes. Finally, you can use it to undo any scheduling operations that you may have performed (e.g., files scheduled for addition or deletion can be “unscheduled”).

    选项
    --changelist ARG
    --depth ARG
    --quiet (-q)
    --recursive (-R)
    --targets FILENAME

    下面我们来看一下子命令Svn revert例子:

    丢弃对一个文件的修改:
    $ Svn revert foo.c
    Reverted foo.c

    如果你希望恢复一整个目录的文件,可以使用--depth=infinity选项:
    $ Svn revert --depth=infinity .
    Reverted newdir/afile
    Reverted foo.c
    Reverted bar.txt
    
    最后,你可以取消预定的操作:
    $ svn add mistake.txt whoops
    A         mistake.txt
    A         whoops
    A         whoops/oopsie.c
    $ Svn revert mistake.txt whoops
    Reverted mistake.txt
    Reverted whoops
    $ svn status
    ?      mistake.txt
    ?      whoops。SVN的子命令Svn revert的一些相关问题就介绍到这里,请你关注本节的其他文章介绍。

查看提交说明
    svn log
    svn log -l 4

三、svn 错误和解决

错误:Item is not readable
    没有读权限
    解决:去svnserve.conf 中设置 anon-access = none

四、svn 基本概念

版本库
Subversion 使用集中的数据库,它包含了所有的版本控制文件及其完整历史。这个数据库就是版
本库。版本库通常位于运行 Subversion 服务器的文件服务器上,向 Subversion 客户端(例如TortoiseSVN,提供需要的数据。如果只备份一个东西,请备份版本库,因为它是你数据的主副本。

工作副本
这是实际工作的地方。每一个开发者在自己的电脑上都有属于自己的工作副本,有时可以将其理解
为沙箱。你可以将最新的版本从版本库上取下来,在本地的副本上工作而不影响其他人,如果对更
改满意就可以将其提交到版本库中。

两种版本模型
1.锁定-修改-解锁 方案
2.复制-修改-合并 方案  需要程序员手工合并

版本库的URL
    file://      直接版本库访问(本地磁盘或者网络磁盘)。
    http://      通过 WebDAV 协议访问支持 Subversion 的 Apache 服务器。
    https://     与 http:// 相似,但是用 SSL 加密。
    svn://       通过未认证的 TCP/IP 自定义协议访问 svnserve 服务器。
    svn+ssh://   通过认证并加密的 TCP/IP 自定义协议访问 svnserve 服务器。

工作副本怎样跟踪版本库
    对于工作副本的每一个文件,Subversion 在管理目录 .svn/ 记录两项关键的信息:
    • 工作文件的基准版本(叫做文件的工作版本)和
    • 一个本地副本最后更新的时间戳。
    给定这些信息,通过与版本库通讯,Subversion可以告诉我们工作文件是处与如下四种状态的那一种:
    
    - 未修改且是当前的
    文件在工作目录里没有修改,在工作版本之后没有修改提交到版本库。svn commit 操作不做任何事情,svn update 不做任何事情。
    
    - 本地已修改且是当前的
    工作副本已经修改,从基准版本之后没有修改提交到版本库。本地修改没有提交,因此 commit 会成功的提交,update 不做任何事情。
    
    - 本地未修改且过时
    这个文件在工作副本没有修改,但在版本库中已经修改了。这个文件应当更新到最新公共版
    本。commit 不做任何事情,update 将会更新工作副本到最新的版本。
    
    - 本地已修改且过时
    这个文件在工作副本和版本库中都被修改了。提交 该文件将会因为 过时 而失败。该文件应该先更新; 更新 命令将会尝试合并公共更改和本机更改。如果 Subversion 不能顺利的自动完成合并,则需要用户解决冲突。


svn目录结构

   我们在一些著名开源项目的版本库中,通常可以看到 trunk, branches, tags 等三个目录。由于 SVN 固有的特点,目录在 SVN 中并没有特别的意义,但是这三个目录却在大多数开源项目中存在,这是因为这三个目录反映了软件开发的通常模式。 

   1.trunk 
   trunk 是主分支,是日常开发进行的地方。 

   2.branches 
   branches 是分支。一些阶段性的 release 版本,这些版本是可以继续进行开发和维护的,则放在 branches 目录中。又比如为不同用户客制化的版本,也可以放在分支中进行开发。 

   3.tags 
   tags 目录一般是只读的,这里存储阶段性的发布版本,只是作为一个里程碑的版本进行存档。 

    要使用这样的结构,在建立项目版本库时,可首先建好项目文件夹,并在其中建立 trunk, branches, tags 三个空的子目录,再将项目文件夹连同这三个子目录一起导入版本库。这样在 trunk 中开始进行开发,当需要建立 branch 或 tag 时,使用 SVN 的 copy 操作进行。其中 tags目录需要只读,可以使用 SVN 中的 authz 文件控制该目录的访问权限为只读。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,544评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,430评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,764评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,193评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,216评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,182评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,063评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,917评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,329评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,543评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,722评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,425评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,019评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,671评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,825评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,729评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,614评论 2 353

推荐阅读更多精彩内容

  • SVN在国内使用率非常高(70%****到****90%) 集中式****Git ****越来越多用了******...
    成功没有捷径_LBQ阅读 304评论 0 0
  • iOS 开发 SVN 版本控制器 更多技术交流请加群 iOS技术联盟 27512466 SVN是Subversio...
    Sunny_Fight阅读 8,768评论 7 63
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,652评论 18 139
  • 命令的使用 1、检出 svn cohttp://路径(目录或文件的全路径)[本地目录全路径] --username...
    小李龍彪阅读 4,439评论 0 9
  • 雪域圣地的风啊 裹着我呢喃细语 娓娓地述说着她过往的故事 我愿意温柔地死去 如倒在情人的怀抱 然后 化着一羽雄鹰 ...
    胡杨书法学堂阅读 538评论 0 0