创建工作副本

优质
小牛编辑
121浏览
2023-12-01

大多数时候, 用户开始使用仓库是通过执行 检出 (checkout) 命令. 检出仓库中的目录将会在用户的 本地主机上创建一个该目录的工作副本. 除非特意指定, 否则这个副本将包 含仓库最新版本的数据:

$ svn checkout http://svn.example.com/svn/repo/trunk
A    trunk/README
A    trunk/INSTALL
A    trunk/src/main.c
A    trunk/src/header.h
…
Checked out revision 8810.
$

上面的例子检出的是主干目录, 但用户也可以轻易地检出更深层的子目录, 只需要在检出命令的参数中写上子目录对应的 URL 即可:

$ svn checkout http://svn.example.com/svn/repo/trunk/src
A    src/main.c
A    src/header.h
A    src/lib/helpers.c
…
Checked out revision 8810.
$

因为 Subversion 用的是 复制-修改-合并 模型, 而非 加锁-修改-解锁 (见 “版本控制模型”一节), 所以用户马上就可以修改 工作副本里的文件与目录. 工作副本就像一个普通目录, 用户可以编辑或 重命名里面的文件, 甚至可以删除整个工作副本.

[警告]警告

虽然工作副本 “像一个普通目录”, 用户可以按照自己 的意愿编辑里面的文件, 但是其他事情必须告诉给 Subversion. 例如, 如果 用户想要复制或移动工作副本中的某个文件或目录, 必须使用 svn copysvn move, 而不是 操作系统提供的复制与移动命令. 关于它们的更多内容会在后面讲到.

除非用户准备提交修改, 否则不需要通知 Subversion 服务器你做了哪些 修改.

目录 .svn 里有什么东西?

工作副本的根目录 — 1.7 版以前是每个目录及其子目录 — 都有一个用于管理的子目录 .svn. 通常情况下, 操作 系统的目录列表指令不会显示该目录, 但它是一个非常重要的目录, 无论用户 做什么操作, 都不能删除或修改其中的内容, Subversion 管理工作副本的信息 都存放在这个目录里.

在上面的两个例子中, Subversion 在本地创建的目录名是检出命令中 URL 参数的最后一个分量. 如果用户只向 svn checkout 提供了 URL 参数, 那么根据最后一个分量来创建目录对用户来说就比较方便. 不过 Subversion 客户端命令行工具也允许用户自己指定一个目录名, 例如:

$ svn checkout http://svn.example.com/svn/repo/trunk my-working-copy
A    my-working-copy/README
A    my-working-copy/INSTALL
A    my-working-copy/src/main.c
A    my-working-copy/src/header.h
…
Checked out revision 8810.
$

如果用户指定的本地目录不存在, svn checkout 会自动创建该目录.