列 A

  # addgroup [svn-users]

  # usermod -u [nnnn] -G [svn-users]

  # mkdir -m 770 [/home/svn-repos]

  # chgrp [svn-users] [/home/svn-repos]

  # svnadmin create –fs-type fsfs [/home/svn-repos]

  请注意一定要在fs-type选项中明确“fsfs”。因为默认情况下,Subversion知识库文件系统的数据库的最初名称为“bdb”,已被证实有些不稳定。新版本中默认名称已经更改为fsfs,但是有些老版本及非标准版的Subversion依然使用bdb。出于安全起见,还是要在创建新知识库时明确一下fsfs数据库格式,保证系统能够更稳定。

  在服务器上建完知识库目录以后,就可以在这个目录下创建实际的项目知识库。也许是出于直觉,你不应该直接在知识库内进行。列B告诉你如何通过单独目录在知识库目录中创建包含有被丢弃的文件的知识库,然后再通过“check in”登记来创建项目知识库。

  最后以前面命令中指明的用户帐号登录。从所用用户帐号的根目录开始按步骤进行。使用非根用户身份登录,前面显示“$”符号。同样的,[ ]括弧中的内容可根据你的需要进行修改。记得在输入时不要输入括弧。

  列B

  $ mkdir [project]

  $ cd [project]

  $ touch [file.txt]

  $ svn import -m “[importing file to create project]” . file:///[home/username/svn-repos/project]

  在服务器上创建项目知识库以后,就完成了。 在将项目知识库导入知识库之前需要删除刚才创建的项目目录,因为目录中的数据现在已经安全的保存在了服务器上。既然知识库是通过一个空文件使用touch command创建完成饿,所以删除也不会造成任何损失。

  在客户端电脑上你可能需要编写项目或者访问文档,所以你还需要查看知识库中的内容并创建一个本地副本。范例如下。同样的也是假设您使用免费的类UNIX操作系统,如BSD,或者OpenSolaris这样的Linux版本。.

  列 C

  $ cd [/home/username]

  $ mkdir [svn-local]

  $ cd [svn-local]

  $ svn co svn+ssh://[hostname/home/username/svn-repos/project project]

  这时,一般都需要三次输入保存知识库的系统的密码。在本例中,除了你选择的操作系统,您还需要在客户端系统上安装功能完全的SSH客户端和SSH服务器。 Svn命令知道如何通过SSH传达网络需求,为客户端和服务器系统之间提供安全的加密连接,保护您的用户名、密码和数据不受可能注意您的网络的恶意安全破坏者侵害。

  Svn-local目录不是必需的。如果你愿意的话,你可以就把最新校验过的项目或者文档目录直接保存到您的用户帐号主目录下。一般最好将由 Subversion知识库维护的目录与备份方式不同的目录分别保存,以免弄混。在以前的例子中,你都无需为重要数据“项目”的目录命名,所以也不需要为最初的空文件“file.txt”命名。

  对项目的本地副本核完毕,就可以删除客户设备上的项目目录。然后就需要在目录内添加其他在Subversion中保存的文件,并在服务器上的Subversion知识库中进行核对。列D就为操作范例。

  列 D

  $ cd [/home/username/svn-local/project]

  $ svn rm file.txt

  $ cp -R [/home/username/project/*] .

  $ svn add `ls -R`

  $ svn ci -m “[added all base files to the project directory]”

  cp –R命令能将目录中重要数据目录中的全部内容(在这里为/home/username/project) 复制到当前目录中 (由单独的句子指定)。svn add `ls -R` 命令将这个目录下全部内容以及所有的子目录添加到本地项目目录副本中的版本控制中。svn ci 命令将当前副本提交到服务器上的主目录中。在添加命令以后,svn客户端工具会显示添加文件列表。Ci命令会要求密码以确保你有权限进行提交。

  Subversion的使用

  不同的图形化用户界面的使用方法也不同,各个用户的使用方式也不同。对于使用命令行的客户,最重要也是最基本的升级、管理和提交项目文件的命令是以下这些:

  svn up – 通过主知识库更新本地副本。在开始对任何文件的工作前都要进行更新。如果别人访问过知识库,也要在提交之前进行再次更新,是个好习惯。

  svn status – 告诉你哪些文件被修改过,哪些经过增改但还未被提交,哪些创建以后还未添加到版本控制,哪些文件神秘消失而没有从版本控制中删除(最大的可能是因为你忘记使用svn rm 替代 simply rm),以及哪些文件已经从版本控制中完全删除。

  svn add – 我们刚才演示过,用来在版本控制中添加文件。

  svn rm – 从版本控制中删除文件。这样也会从本地文件系统中将相关文件删除。

  svn mv – 将知识库中本地副本中的某个文件移动到另一个地方,而不会造成Subversion数据库的混乱。它的工作原理有些类似标准的mv 命令,但是它只用于版本控制下的本地项目副本。

  svn mkdir – 创建目录,与普通的mkdir 命令很类似,但是它同时能够将目录自动加入版本控制。

  svn ci – 能将知识库中本地副本当前目录下以及其内部所有子目录内发生的全部变化提交给主知识库。在这一命令生效之前,必须首先解决svn状态命令报告的标有问号的部分(未知的文件状态)。在没有疑问以后,svn ci 会打开默认文本编辑器输入提交信息。如果你需要查找项目中较早版本中的文件就会用到这些文本。-m 选项能够被用来明确命令行中的提交信息,如上面创建和使用Subversion知识库中所演示的那样。这样做的目的在于给已提交的变化做出标记,以防以后什么时候可能会对之前做的修改进行分类。

  svn help – 为你提供大量关于Subversion命令行客户端的使用信息,例如对每个svn命令深入的解释和举例,以及除这些以外更多命令的使用方法。您可以通过输入svn help add(这里假设你需要获得关于“add”命令的信息)获得更多关于特定svn命令的信息。

  本文并非神化Subversion,只是对Subversion版本控制软件进行了有益的介绍,版本控制软件的使用是任何敬业的程序员都要使用的技巧。本文中的这些例子能够为您提供真切的帮助,即使您不是程序员也会感觉有益。

转载请注明:韦旭红的点点滴滴 » svn 命令