关于Linux上SVN导出功能的几个问题
关于Linux上SVN导出功能的几个问题
我做了一些作业,虽然我可以回答关于在Windows上导出SVN仓库的所有以下问题(使用VisualSVN服务器),但在Linux上,我完全不知所措,因为我在那里是个新手。
我想在Linux上使用SVN的导出功能,每次提交仓库时都更新网站。但是有一些问题。
我阅读了以下三个链接:
http://www.duchnik.com/tutorials/2011/07/02/svn-command-reference
http://www.picksourcecode.com/ps/ct/161055.php
并找到以下命令可用于在post-commit钩子中使用:
svn export --force svn://localhost/repository_name /share/Web/projects/website
问题:
- 有人有任何想法,为什么它不起作用?更改已提交到仓库,但操作以“post-commit hook failed(退出代码255)with no output”结束。而且post-commit hook似乎没有触发,目标网站没有更新。我检查过(甚至是双重检查过)命令本身运行良好(从命令行调用时)。只是在post-commit hook中失败。我尝试在文件末尾添加“exit 0”。当然,它是可执行的。没有运气。仍然,在多次尝试之后,相同的错误代码。
- 为什么这个操作有效,即使我没有提供用户名和密码作为参数?仓库中的“passwd”文件已正确设置,并且来自外部客户端的任何操作都需要提供用户名和密码,否则会失败。SVN中的一些bug吗?
- 是否有办法将导出到目标的文件限制为仅更改/添加/删除的文件,而不是在每次提交后导出整个仓库?
- 是否有办法完全相同(导出),但到FTP上的外部服务器,而不是我的QNAP本地路径?
对于问题三和四,我尝试使用SourceForge的svn2web工具,但这是一个相当糟糕的主意,而且它不起作用。它使用pre-commit钩子而不是post-commit钩子,这意味着其中任何错误都将阻止开发人员提交他们的工作(在我的情况下,post-commit中的更改已提交,只是未传播到目标)。他们的pre-commit钩子在我的服务器上失败(与上面第一点中的错误消息相同),并且他们的方法(解决方案)在纯Linux Subversion客户端上添加“svn2web”属性到文件夹属性可能适用,但在使用TortoiseSVN作为SVN客户端的Windows上完全失败。
我在想,问题1(和2-3以及可能4)的解决方案是否是在/share/Web/projects/website中设置一个本地工作副本,并使用CRON定期更新此仓库?这将始终“导出”实际更改,并且可能在没有正确的登录和密码的情况下失败。但是这似乎是重复发明轮子或强迫打开已打开的门。
提前感谢您的任何帮助。
问题的出现原因:1. 可能是因为以不同的用户运行导出命令,而SVN守护进程(svnserve)使用的用户没有足够的权限来运行导出操作。2. 可能是由于SVN的安装问题导致的。如果仓库被适当地保护并需要登录+密码,那么每个人都必须正确提供它,即使是导出操作也是如此。
解决方法:1. 以SVN守护进程使用的用户身份运行导出命令,或者确保运行导出命令的用户具有足够的权限。2. 检查SVN的安装并确保安装正确。3. 使用一个扩展脚本,最好作为提交后钩子(post-commit hook)运行,它将当前(最新的 - HEAD)版本与上一个版本进行比较,并仅导出已更改的文件。在尝试重新发明轮子之前,在互联网上寻找现成的解决方案。4. 如果不能直接使用SVN的提取命令,可以将导出文件提取到本地路径,打包,通过FTP发送,并在目标位置解压缩。或者,如果没有在目标地点访问shell来解压缩存档文件,则可以逐个文件地直接发送。
希望这些能够帮助!