初始化检出
初始化检出
大多数时候,你会使用checkout从版本库取出一个新拷贝开始使用Subversion,这样会在本机创建一个项目的“本地拷贝”,这个拷贝包括了命令行指定版本库中的HEAD
(最新的)版本:
$ svn checkout http://svn.collab.net/repos/svn/trunk A trunk/Makefile.in A trunk/ac-helpers A trunk/ac-helpers/install.sh A trunk/ac-helpers/install-sh A trunk/build.conf … Checked out revision 8810.
名称中有什么?
Subversion努力控制版本控制下数据的类型,文件的内容和属性值都是按照二进制数据存储和传递,并且“文件内容类型”一节给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路径字符转化为“合法正确的”内部用版本。
尽管上面的例子取出了trunk目录,你也完全可以通过输入特定URL取出任意深度的子目录:
$ svn checkout \http://svn.collab.net/repos/svn/trunk/subversion/tests/cmdline/ A cmdline/revert_tests.py A cmdline/diff_tests.py A cmdline/autoprop_tests.py A cmdline/xmltests A cmdline/xmltests/svn-test.sh … Checked out revision 8810.
因为Subversion使用“拷贝-修改-合并”模型而不是“锁定-修改-解锁”模型(见“版本模型”一节),你可以在工作拷贝中开始修改的目录和文件,你的工作拷贝和你的系统中的其它文件和目录完全一样,你可以编辑并改变它,移动它,也可以完全的删掉它,把它忘了。
警告
因为你的工作拷贝“同你系统上的文件和目录没有任何区别”,你可以随意修改文件,但是你必须告诉Subversion你做的其他任何事。例如,你希望拷贝或移动工作拷贝的一个文件,你应该使用svn copy或者 svn move而不要使用操作系统的拷贝移动命令,我们会在本章后面详细介绍。
除非你准备好了提交一个新文件或目录,或改变了已存在的,否则没有必要通知Subversion你做了什么。
.svn
目录包含什么?
工作拷贝中的任何一个目录包括一个名为.svn
管理区域,通常列表操作不显示这个目录,但它仍然是一个非常重要的目录,无论你做什么?不要删除或是更改这个管理区域的任何东西,Subversion使用它来管理工作拷贝。
如果你不小心删除了子目录.svn
,最简单的解决办法是删除包含的目录(普通的文件系统删除,而不是svn delete),然后在父目录运行svn update,Subversion客户端会重新下载你删除的目录,并包含新的.svn
。
因为你可以使用版本库的URL作为唯一参数取出一个工作拷贝,你也可以在版本库URL之后指定一个目录,这样会将你的工作目录放到你的新目录,举个例子:
$ svn checkout http://svn.collab.net/repos/svn/trunk subv A subv/Makefile.in A subv/ac-helpers A subv/ac-helpers/install.sh A subv/ac-helpers/install-sh A subv/build.conf … Checked out revision 8810.
这样将把你的工作拷贝放到subv
而不是和前面那样放到trunk
,如果subv
不存在,将会自动创建。
禁用密码缓存
当你执行的Subversion命令需要认证时,缺省情况下Subversion会在磁盘缓存认证信息,这样做出于便利,在接下来的操作中你就可以不必输入密码,但如果你很在乎密码缓存,[3]你可以永久关闭缓存或每次执行命令时说明。
在某次命令关闭密码缓存可以在命令中使用--no-auth-cache
选项,如果希望永久关闭缓存,可以在本机的Subversion配置文件中添加store-passwords = no
这一行,详情请见“客户端凭证缓存”一节。
用其它身份认证
因为Subversion认证缓存是缺省设置(包含用户名和密码),用来记住上一次修改工作拷贝的人非常方便。但是有时候会不好用—特别是如果你使用的是共享工作拷贝,在这种情况下,你只需要为命令行传递--username
选项,Subversion就会尝试使用该用户认证,如果需要也提示你输入密码。
[3] 当然,你不必太过担心—首先你要知道你不会从Subversion真的删除文件,第二,Subversion密码不是和你的三百万个密码的任何一个相同,对吧?对吧?