发新话题
打印

初始化的Checkout

初始化的Checkout

初始化的Checkout
大多数时候,你会使用checkout从版本库取出一个新拷贝开始使用Subversion,这样会在本机创建一个项目的本地拷贝,这个拷贝包括版本库中的HEAD(最新的)版本:

$ svn checkout http://svn.collab.net/repos/svn/trunk
A  trunk/subversion.dsw
A  trunk/svn_check.dsp
A  trunk/COMMITTERS
A  trunk/configure.in
A  trunk/IDEAS

Checked out revision 2499.

名称中有什么?

Subversion努力控制版本控制下数据的类型,文件的内容和属性值都是按照二进制数据存储和传递,并且“svn:mime-type”一节给Subversion提示以说明对于特定文件“文本化的”操作是没有意义的,也有一些地方,Subversion对存放信息的有限制。

Subversion内部使用二进制处理数据—例如,属性名称,路径名和日志信息—UTF-8编码的Unicode,这并不意味着与Subversion的交互必须完全使用UTF-8。作为一个惯例,Subversion的客户端能够透明的转化UTF-8和你所使用系统的编码,前提是可以进行有意义的转换(当然是大多数目前常见的编码)。

此外,路径名称在WebDAV交换中会作为XML属性值,就像Subversion的管理文件。这意味着路径名称只能包含合法的XML(1.0)字符,Subversion也会禁止路径名称中出现TAB、CR或LF字符,所以它们才不会在区别程序或如svn log和svn status的输出命令中断掉。

虽然看起来要记住很多事情,但在实践中这些限制很少会成为问题。只要你的本地设置兼容UTF-8,也不在路径名称中使用控制字符,与Subversion的通讯就不会有问题。命令行客户端会添加一些额外的帮助字节—自动将你输入的URL路径字符转化为“合法正确的”内部用版本。

有经验的Subversion用户也发展出了一套关于布局版本库路径的最佳实践习惯。这些不像上面提到的有严格的语法要求,它们是用来组织经常执行的任务。URL中的/trunk部分就是这种习惯,我们会在第 4 章 分支与合并进一步论述这个问题并提出相关建议。

尽管上面的例子取出了trunk目录,你也完全可以通过输入特定URL取出任意深度的子目录:

$ svn checkout http://svn.collab.net/repos/svn/trunk/doc/book/tools
A  tools/readme-dblite.html
A  tools/fo-stylesheet.xsl
A  tools/svnbook.el
A  tools/dtd
A  tools/dtd/dblite.dtd

Checked out revision 2499.

因为Subversion使用“拷贝-修改-合并”模型而不是“锁定-修改-解锁”模型(见第 2 章 基本概念),你可以开始修改工作拷贝中的目录和文件,你的工作拷贝和你的系统中的其它文件和目录完全一样,你可以编辑并改变它,移动它,也可以完全的删掉它,把它忘了。

注意
因为你的工作拷贝“同你的系统上的文件和目录没有什么区别”,如果你希望重新规划工作拷贝,你必须要让Subversion知道,当你希望拷贝或者移动工作拷贝的一个项目时,你应该使用svn copy或者 svn move而不要使用操作系统的命令,我们会在以后的章节详细介绍。

除非你准备好了提交一个新文件或目录,或改变了已存在的,否则没有必要通知Subversion你做了什么。

.svn目录包含什么?

工作拷贝中的任何一个目录包括一个名为.svn管理区域,通常列表操作不显示这个目录,但它仍然是一个非常重要的目录,无论你做什么?不要删除或是更改这个管理区域的任何东西,Subversion使用它来管理工作拷贝。

因为你可以使用版本库的URL作为唯一参数取出一个工作拷贝,你也可以在版本库URL之后指定一个目录,这样会将你的工作目录放到你的新目录,举个例子:

$ svn checkout http://svn.collab.net/repos/svn/trunk subv
A  subv/subversion.dsw
A  subv/svn_check.dsp
A  subv/COMMITTERS
A  subv/configure.in
A  subv/IDEAS

Checked out revision 2499.

这样将把你的工作拷贝放到subv而不是和前面那样放到trunk。

TOP

发新话题