使用Subversion进行版本控制 附录A
“请确定你坐在了正确的位置,你的盘桌已经关闭,乘务员们,准备起飞…。”
这是一个非常高层次的教程,能够帮助你熟悉Subversion的基本配置和操作,在结束这个教程时,你一定能够对Subversion的典型使用有了一个基础的认识。
运行下面的例子需要首先正确安装Subversion客户端程序svn以及管理工具svnadmin,并且必须为1.2或更新版本的Subversion程序(可以运行svn --version来检查Subversion的版本。)
Subversion的所有版本化数据都储存在中心版本库中。因此首先,我们需要创建一个版本库:
$ svnadmin create /path/to/repos $ ls /path/to/repos conf/ dav/ db/ format hooks/ locks/ README.txt
这个命令创建了一个新目录/path/to/repos
,并在其中创建了一个Subversion版本库。这个目录里主要保存了一些数据库文件(还有其它一些文件),而不像CVS那样保存着版本化的文件。需要更多版本库创建和维护方面的内容,参见第 5 章 版本库管理。
在Subversion没有“项目”的概念。Subversion的版本库只是一个虚拟的版本化文件系统,可以存放你想要存放的任何文件。有些管理员喜欢为每个项目建立一个独立的版本库,而另外一些管理员则喜欢将多个项目存放到同一个版本库的不同目录里。这两种方式各有各的优点,关于这方面内容的叙述,参见“规划你的版本库结构”一节。不论是哪一种方式,版本库都只是负责管理文件和目录,而“项目”则是人为指定的概念。因此,尽管本书中遍布着项目这个词,但是请记住我们只不过是在谈论版本库中的某些特定目录(或者是一组目录)。
在这个例子中,我们假定已经有一些需要导入到Subversion版本库的条目(一组文件和目录)。接下来,我们需要把这些条目整理到一个名为myproject
的目录(或者其它任意目录)里。在这个目录下,创建三个顶级子目录:branches
、tags
和trunk
,这样做的原因将在后文中阐述。之后,将所有需版本化的数据保存到trunk
目录下,同时保持branches
和tags
目录为空:
/tmp/myproject/branches/ /tmp/myproject/tags/ /tmp/myproject/trunk/ foo.c bar.c Makefile …
branches
、tags
和trunk
这三个子目录不是Subversion必须的。但这样做是Subversion的习惯用法,我们还是遵守这个约定吧。
准备好了数据之后,就可以使用svn import命令(参见“导入数据到你的版本库”一节)将其导入到版本库中:
$ svn import /tmp/myproject file:///path/to/repos/myproject -m "initial import" Adding /tmp/myproject/branches Adding /tmp/myproject/tags Adding /tmp/myproject/trunk Adding /tmp/myproject/trunk/foo.c Adding /tmp/myproject/trunk/bar.c Adding /tmp/myproject/trunk/Makefile … Committed revision 1. $
现在版本库中已经保存了目录中的数据。如前所述,直接查看版本库是看不到文件和目录的;它们存放在数据库之中。但是版本库的虚拟文件系统中则包含了一个名为myproject
的顶级目录,其中依此保存了所有的数据。
注意我们在一开始创建的那个/tmp/myproject
目录并没有改变,Subversion并不在意它(事实上,完全可以删除这个目录)。要开始使用版本库数据,我们还要创建一个新的用于存储数据的“工作拷贝”,这是一个私有工作区。从Subversion版本库里“检出”一个myproject/trunk
目录工作拷贝的操作如下:
$ svn checkout file:///path/to/repos/myproject/trunk myproject A myproject/foo.c A myproject/bar.c A myproject/Makefile … Checked out revision 1.
现在,在myproject
目录下生成了一个版本库数据的独立拷贝。我们可以在这个工作拷贝中编辑文件,并将修改提交到版本库中。
-
进入工作拷贝目录,编辑某个文件的内容。
-
运行svn diff以标准差别格式查看修改的内容。
-
运行svn commit将更改提交到版本库中。
-
运行svn update“更新”工作拷贝。
完整的工作拷贝操作指南,请参见第 2 章 基本使用。
现在,Subversion版本库可以通过网络方式访问。参考第 6 章 服务配置,了解不同服务器软件的使用以及配置方法。