我正在用 Ruby 编写一个程序,它需要在启动时从 SVN 下载我团队软件的最新版本。
我相信我想使用结帐功能(来自 Ruby SVN 绑定),因为更新不会添加任何在我机器的本地“主干”工作区上不存在的文件。checkout 语句既会更新与 HEAD 不匹配的文件,也会下载根本不存在的文件。实际上,在运行完全递归结帐后,我希望拥有最新 SVN 存储库的精确副本。
根据此API,结帐语句基本上采用以下内容:
- 一个准确的 SVN URL
- 本地根项目目录
- 修订版(我将使用字符串“HEAD”)
- 递归(整数 1 或 0)
- 一个池对象(我无法确定它的确切用途,但我认为它不会影响我)
这是我写的,在一个为 SVN 存储库中的每个文件迭代的块中:
if status != NORMAL #any file that changed or is 'missing'
ctx.checkout(status.entry.url, ROOTDIR, 'HEAD', 0, nil) #update abnormal file to HEAD
end
作为测试,我从本地工作区中删除了一个目录,并尝试使用此命令恢复它。它一直运行直到它到达丢失的文件之一,此时它会引发错误:
`svn_client_checkout3': subversion/libsvn_fs_fs/tree.c:663: Svn::Error::FsNotFound: File not found: revision 0, path '/trunk/project-gadfly/SocketServer/DiscoveryServer.cpp' (Svn::Error: :FsNotFound)
我不明白为什么会出现这个错误,因为我认为checkout语句会看到本地不存在目录(即文件)然后创建它。也许我做错了什么?
回顾我所写的内容,我认为所有这些都是在问以下简单问题的一种冗长的方式:如何使用 SVN Ruby 命令将最新版本的 SVN 存储库放到我的本地硬盘驱动器上?
在此先感谢,埃尔伍德霍普金斯