Subversion 使用简介

来源:互联网 发布:mac 雅黑字体 编辑:程序博客网 时间:2024/05/21 11:24

转贴自:https://www6.software.ibm.com/developerworks/cn/education/opensource/os-php-blog/section7.html

利用 PHP 和 Subversion 从零开始创建一个 blog

 

为存储库作准备

Subversion 将所有版本化数据存储在中央存储库中。创建存储库之前,您需要对目录结构进行一些修改。在本教程开始提到的 blog-svn 目录下再创建 3 个子目录:branches、tags、trunk。trunk 目录包含主源树、branches 目录为主源树的细分。可暂时不合并 Branches,也可立即合并此目录。Tags 目录非常有用,因为您可为 trunk 的当前快照加上 “发布版” 或代码其他关键点、里程碑的标签。

那么 index.php 文件所在目录中有了 3 个新的子目录,将整个原始目录结构移动到 trunk 目录中。这样就为创建存储库作好了准备。

 




回页首


创建存储库

创建存储库时,应首先构建一个目录以保存存储库。本教程中使用的目录为 C:/svn-repository/。在本目录中创建存储库的命令为:


svnadmin create c:/svn-repository/php-blog

 

如果您现在查看 php-blog 目录,应看到以下目录/文件列于其中:conf、dav、db、format、hooks、locks 和 README.txt。存储库已成功创建!

 




回页首


将代码导入存储库

将代码导入存储库后,存储库就完成了。通过以下命令将 blog 代码导入存储库:


svn import <blog-svn-dir> file:///svn-repository/php-blog -m "first import"

 

<blog-svn-dir> 目录应为之前创建的 trunk、branches 和 tag 目录的父目录。此时,Subversion 应返回形如清单 23 所示的信息。


清单 23. 初次将代码导入 Subversion 存储库



Adding C:/www/blog-svn/trunk
Adding C:/www/blog-svn/trunk/footer.php
Adding C:/www/blog-svn/trunk/edit
Adding C:/www/blog-svn/trunk/edit/footer.html
Adding C:/www/blog-svn/trunk/edit/includes
Adding C:/www/blog-svn/trunk/edit/includes/functions.php
Adding C:/www/blog-svn/trunk/edit/header.html
Adding C:/www/blog-svn/trunk/edit/index.php
Adding C:/www/blog-svn/trunk/header-sidebar.php
Adding C:/www/blog-svn/trunk/blogs
Adding C:/www/blog-svn/trunk/blogs/Dec 2005
Adding C:/www/blog-svn/trunk/blogs/Dec 2005/Dec 22 2005 15 48
Adding C:/www/blog-svn/trunk/includes
Adding C:/www/blog-svn/trunk/includes/functions.php
Adding C:/www/blog-svn/trunk/index.php
Adding C:/www/blog-svn/branches
Adding C:/www/blog-svn/tags

Committed revision 1.





回页首


设置您的工作目录

既然已经完成了存储库,请删除之前导入到 Subversion 的 blog-svn-dir 目录。需要从存储库中签出一份新副本,以创建您的工作副本。删除此目录之后,即可在相同的位置从存储库中签出副本,输入以下命令:


svn checkout file:///svn-repository/php-blog/trunk blog-svn

 

此命令签出存储库(参见清单 24),并建立您自己的工作副本。浏览目录,并注意各目录中都有自己的 .svn 目录。这就是在 blog 代码的清单 12 和清单 17 中忽略 .svn 目录的原因。


清单 24. 从存储库中签出



A blog-svn/footer.php
A blog-svn/edit
A blog-svn/edit/footer.html
A blog-svn/edit/includes
A blog-svn/edit/includes/functions.php
A blog-svn/edit/header.html
A blog-svn/edit/index.php
A blog-svn/header-sidebar.php
A blog-svn/blogs
A blog-svn/blogs/Dec 2005
A blog-svn/blogs/Dec 2005/Dec 22 2005 15 48
A blog-svn/includes
A blog-svn/includes/functions.php
A blog-svn/index.php
Checked out revision 1.





回页首


向存储库提交更改

在作出更改及编辑代码时,您可使用以下命令提交更改:


svn checkout file:///svn-repository/php-blog/trunk blog-svn

 

Subversion 随后将返回形如清单 25 所示的信息。


清单 25. 签入更改



Sending blogs/Dec 2005/Dec 22 2005 15 48
Sending edit/includes/functions.php
Sending includes/functions.php
Transmitting file data ...
Committed revision 2.

 

通过下一节的介绍,您将看到向存储库添加新 blog 条目有多么简单。

 




回页首


向存储库添加文件

若您想向 Subversion 存储库添加 blog 条目或另外一个文件,请输入以下命令:


svn add "Dec 21 2005 15 48"

 

Subversion 将返回这样的信息:


A Dec 21 2005 15 48

 

此后在您想提交更改时,Subversion 将返回以下信息:


Adding Dec 2005/Dec 21 2005 15 48
Transmitting file data .
Committed revision 5.

 

因而,为所添加的新文件显示的是 Adding 而非 Sending。或许您还希望实现一点自定义,在 PHP 中创建一个函数为您完成签入操作(具体方法请参阅 参考资料)。

 




回页首


从存储库中删除文件

删除文件的方法与添加文件极为类似:


svn remove "Dec 21 2005 15 48"

 

Subversion 返回:


D Dec 21 2005 15 48

 

与上面一样提交更改,Subversion 返回:


Deleting Dec 2005/Dec 21 2005 15 48

Committed revision 8.

 

这一次,为所删除的文件显示了 Deleting 而非 Sending。

接下来介绍如何设置系统以实现从另外一台计算机上远程签出您的 blog 代码。

 




回页首


远程访问

为实现远程访问,需要在您的机器上设置 Subversion 服务器。为此,输入:


svnserve -d -r c:/svn-repository/

 

请注意,-d 开关告诉 svnserver 以守护程序 (deamon) 模式运行,-r <directory> 开关告诉 svnserve 仅允许存储库在给定目录下可见 —— 也就是说,在上述服务器配置中,c:/repository2/ 是不可见的。

现在前往您的远程计算机(或您想签出代码的其他计算机,务必确保远程计算机已安装 Subversion),输入:


svn checkout svn://example.com/php-blog/trunk

 

注意,我已在 localhost 上运行了 svnserve 服务器,因此您也可以尝试这样做,只需将 example.com 替换为 localhost 即可。另请注意我以粗体标出的内容:由于服务器是以 -r c:/svn-repository/ 开关运行的,查看服务器的文件系统时应将 c:/svn-repository 视为服务器的根目录。

您将看到清单 26 所示返回信息,看上去就像您是在本地 Subversion 存储库以外的地方检查 PHP blog 代码。


清单 26. 从远程 Subversion 存储库签出



A trunk/footer.php
A trunk/edit
A trunk/edit/footer.html
A trunk/edit/includes
A trunk/edit/includes/functions.php
A trunk/edit/header.html
A trunk/edit/index.php
A trunk/header-sidebar.php
A trunk/blogs
A trunk/blogs/Dec 2005
A trunk/blogs/Dec 2005/Dec 21 2005
A trunk/blogs/Dec 2005/Dec 22 2005
A trunk/blogs/Dec 2005/Dec 23 2005
A trunk/includes
A trunk/includes/functions.php
A trunk/index.php
Checked out revision 8.

 

好!现在您已经很好地掌握了 Subversion。