SVN 学习笔记

SVN

一、SVN 的生命周期
1.建立资料库

资料库又叫版本库,它不仅存放了文件还记录了每个文件变更历史,Create 操作是用来创建一个新的操作库。大多数情况下这个操作只会执行一次。当你创建一个新的版本库的时候,你的版本控制系统会让你提供一些信息来标识版本库,例如创建的位置和版本库的名字。

2.检出

Checkout 操作是用来从版本库创建一个工作副本。工作副本是开发者私人的工作空间,可以进行内容的修改,然后提交到版本库中。

3.更新

update 操作是用来更新版本库的。这个操作将工作副本与版本库进行同步。由于版本库是由整个团队共用的,当其他人提交了他们的改动之后,你的工作副本就会过期。

让我们假设 Tom 和 Jerry 是一个项目的两个开发者。他们同时从版本库中检出了最新的版本并开始工作。此时,工作副本是与版本库完全同步的。然后,Jerry 很高效的完成了他的工作并提交了更改到版本库中。此时 Tom 的工作副本就过期了。更新操作将会从版本库中拉取 Jerry 的最新改动并将 Tom 的工作副本进行更新。

4.执行变更

当检出之后,你就可以做很多操作来执行变更。编辑是最常用的操作。你可以编辑已存在的文件,例如进行文件的添加/删除操作。你可以添加文件/目录。但是这些添加的文件目录不会立刻成为版本库的一部分,而是被添加进待变更列表中,直到执行了 commit 操作后才会成为版本库的一部分。同样地你可以删除文件/目录。删除操作立刻将文件从工作副本中删除掉,但该文件的实际删除只是被添加到了待变更列表中,直到执行了 commit 操作后才会真正删除。

Rename 操作可以更改文件/目录的名字。"移动"操作用来将文件/目录从一处移动到版本库中的另一处。

5.复查变化

当你检出工作副本或者更新工作副本后,你的工作副本就跟版本库完全同步了。但是当你对工作副本进行一些修改之后,你的工作副本会比版本库要新。在 commit 操作之前复查下你的修改是一个很好的习惯。Status 操作列出了工作副本中所进行的变动。正如我们之前提到的,你对工作副本的任何改动都会成为待变更列表的一部分。Status 操作就是用来查看这个待变更列表。Status 操作只是提供了一个变动列表,但并不提供变动的详细信息。你可以用 diff 操作来查看这些变动的详细信息。

6.修复错误

我们来假设你对工作副本做了许多修改,但是现在你不想要这些修改了,这时候revert操作将会帮助你。Revert 操作重置了对工作副本的修改。它可以重置一个或多个文件/目录。当然它也可以重置整个工作副本。在这种情况下,revert 操作将会销毁待变更列表并将工作副本恢复到原始状态。

7.解决冲突

合并的时候可能会发生冲突。Merge 操作会自动处理可以安全合并的东西。其它的会被当做冲突。例如,"hello.c"文件在一个分支上被修改,在另一个分支上被删除了。这种情况就需要人为处理。Resolve 操作就是用来帮助用户找出冲突并告诉版本库如何处理这些冲突。

8.提交更改

Commit操作是用来将更改从工作副本到版本库。这个操作会修改版本库的内容,其它开发者可以通过更新他们的工作副本来查看这些修改。在提交之前,你必须将文件/目录添加到待变更列表中。列表中记录了将会被提交的改动。当提交的时候,我们通常会提供一个注释来说明为什么会进行这些改动。这个注释也会成为版本库历史记录的一部分。Commit是一个原子操作,也就是说要么完全提交成功,要么失败回滚。用户不会看到成功提交一半的情况。

二、SVN 的启动

利用svn命令创建版本库

svnadmin create /opt/svn/runoob

使用命令svnserve启动服务

svnserve -d -r 目录 --listen-port 端口号
  • -r: 配置方式决定了版本库访问方式。由于-r 配置方式的不一样,SVN启动就可以有两种不同的访问方式

    • 方式一:-r直接指定到版本库(称之为单库svnserve方式)

    • svnserve -d -r /opt/svn/runoob
      
    
    
    • 在这种情况下,一个svnserve只能为一个版本库工作。

    • authz配置文件中对版本库权限的配置应这样写:

    • [groups]
      admin=user1
      dev=user2
      [/]
      @admin=rw
      user2=r
      
    - 
    
    - **方式二:**指定到版本库的上级目录(称之为多库svnserve方式)
    
    - ```
    svnserve -d -r /opt/svn
    
    - 这种情况,一个svnserve可以为多个版本库工作
    
    - `authz`配置文件中对版本库权限的配置应这样写:
    
    - ```
    [groups]
    admin=user1
    dev=user2
    [runoob:/]
    @admin=rw
    user2=r
    
    [runoob01:/]
    @admin=rw
    user2=r
    
    • 如果此时你还用[/],则表示所有库的根目录,同理,[/src]表示所有库的根目录下的src目录。
  • –listen-port: 指定SVN监听端口,不加此参数,SVN默认监听***3690***

三、创建版本库

正如上文我们创建一个版本库并查看目录:

svnadmin create test1

tree test1
D:\TEST\TEST1
├─conf
├─db
│  ├─revprops
│  │  └─0
│  ├─revs
│  │  └─0
│  ├─transactions
│  └─txn-protorevs
├─hooks
└─locks
1、svn 服务配置文件

svn 服务配置文件为版本库目录中的文件 conf/svnserve.conf。该文件仅由一个 [general] 配置段组成。

[general]
anon-access = none
auth-access = write
password-db = passwd
authz-db = authz
realm = My First Repository

  • anon-access: 控制非鉴权用户访问版本库的权限,取值范围为 “write”、“read” 和 “none”。 即 “write” 为可读可写,“read” 为只读,“none” 表示无访问权限,默认值:read。
  • auth-access: 控制鉴权用户访问版本库的权限。取值范围为 “write”、“read” 和 “none”。 即"write"为可读可写,"read"为只读,"none"表示无访问权限,默认值:write。
  • authz-db: 指定权限配置文件名,通过该文件可以实现以路径为基础的访问控制。 除非指定绝对路径,否则文件位置为相对conf目录的相对路径,默认值:authz。
  • realm: 指定版本库的认证域,即在登录时提示的认证域名称。若两个版本库的认证域相同,建议使用相同的用户名口令数据文件。默认值:一个UUID(Universal Unique IDentifier,全局唯一标示)。
2.用户名口令文件

用户名口令文件由 svnserve.conf 的配置项 password-db 指定,默认为 conf 目录中的 passwd。该文件仅由一个 [users] 配置段组成。

[users] 配置段的配置行格式如下:

<用户名> = <口令>

[users]
harry = harryssecret
sally = sallyssecret

3、权限配置文件

权限配置文件由 svnserve.conf 的配置项 authz-db 指定,默认为 conf目录中的 authz。该配置文件由一个 [groups] 配置段和若干个版本库路径权限段组成。

[groups]配置段中配置行格式如下:

<用户组> = <用户列表>

版本库路径权限段的段名格式如下:

[<版本库名>:<路径>]

[aliases]
joe = /C=XZ/ST=Dessert/L=Snake City/O=Snake Oil, Ltd./OU=Research Institute/CN=Joe Average

[groups]
harry_and_sally = harry,sally
harry_sally_and_joe = harry,sally,&joe

[/foo/bar]
harry = rw
&joe = r
* =

[repository:/baz/fuz]
@harry_and_sally = rw
* = r

本例是使用 svnserve -d -r /opt/svn 以多库 svnserve 方式启动 SVN,所以 URL:svn://192.168.0.1/runoob01

四、SVN 检出
root@runoob:~/svn# svn checkout svn://192.168.0.1/runoob01 --username=user01
A    runoob01/trunk
A    runoob01/branches
A    runoob01/tags
Checked out revision 1.

五、解决冲突

一个案例: SVN 解决冲突 | 菜鸟教程 (runoob.com)

六、提交操作

首先要查看工作副本的状态:

# svn status
?       file

此时file的状态为?,说明它还未加到版本控制中。

将文件file加到版本控制,等待提交到版本库。

# svn add file 
A         file

查看工作副本中的状态

# svn status     
A       file

此时file的状态为A,它意味着这个文件已经被成功地添加到了版本控制中。

为了把file存储到版本库中,使用commit -m加上注释信息来提交。

如果你忽略了 -m 选项, SVN会打开一个可以输入多行的文本编辑器来让你输入提交信息。

# svn commit -m "SVN file"
Adding         file
Transmitting file data .
Committed revision 8.

现在file被成功地添加到了版本库中,并且修订版本号自动增加了1。

七、版本回退

我们对文件file进行修改,查看文件状态。

# svn status
A       readme

这时我们发现修改错误,要撤销修改,通过svn revert文件file回归到未修改状态。

# svn revert file
Reverted 'file'

再查看状态。

# svn status 
# 

进行 revert操作之后,file文件恢复了原始的状态。 revert操作不单单可以使单个文件恢复原状, 而且可以使整个目录恢复原状。恢复目录用-R命令,如下。

svn revert -R project

为了消除一个旧版本,我们必须撤销旧版本里的所有更改然后提交一个新版本。这种操作叫做reverse merge

首先,找到仓库的当前版本,现在是版本 22,我们要撤销回之前的版本,比如版本 21。

svn merge -r 22:21 readme 

#### 八、查看历史消息

svn log -r [version code1]:[version code2]

svn log [filename]

## 获取当前目录信息
svn log -l [version code] -v

九、SVN 分支
1.创建分支
# svn copy [项目目录] [分支目录]
A         分支目录  ## 此项展示了分支的状态

2.提交新增的分支到版本库

首先还是要查看状态,随后添加

# svn status
A         ...
....

## 和普通添加差不多只不过这是添加分支而不是文件
# svn commit -m "add my_branch"

3.切换分支开发

进入分支目录即可

cd [分支目录]

十、SVN 标签

总体和分支差不多,不过tags往往是作为开发过程的里程碑或上线的版本,和分支一样,都需要copystatuscommit

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值