我做了一些功课,虽然我可以回答以下关于在 Windows 上导出 SVN 存储库(使用 VisualSVN 服务器)的所有问题,但我完全迷失在 Linux 上,因为我是那里的新手。
我想在 Linux 上使用 SVN 的导出功能,以便在每次提交存储库时更新网站。但这样做存在一些问题。
我已经阅读了这三个: 如何使用“svn export”命令从存储库中获取单个文件? http://www.duchnik.com/tutorials/2011/07/02/svn-command-reference http://www.picksourcecode.com/ps/ct/161055.php
并想出了在提交后挂钩中使用的以下命令:
svn export --force svn://localhost/repository_name /share/Web/projects/website
问题:
任何人都有任何想法,为什么它不起作用?更改已提交到存储库,但操作以“提交后挂钩失败(退出代码 255)且无输出”告终。并且 post-commit 钩子似乎没有被触发,因为目标网站没有更新。我已经检查(甚至仔细检查)该命令本身就像一个魅力(从命令行调用时)。它只在提交后挂钩内失败。我试图在这个文件的末尾添加“exit 0”。当然它是可执行的。没运气。尽管如此,经过多次尝试,相同的错误代码。
为什么这个操作有效,即使我没有提供用户名和密码作为参数?存储库中的“passwd”文件已正确设置,来自外部客户端的任何操作都需要提供用户名和密码,否则会失败。SVN中的一些错误?
有没有办法将导出到目标的文件限制为仅更改/添加/删除,而不是在每次提交后导出整个存储库?
有没有做完全相同的事情(导出),但是通过 FTP 到外部服务器,而不是我的 QNAP 的本地路径?
对于第 3 点和第 4 点,我尝试使用 SourceForge 形式的 svn2web 工具,但这是一个相当糟糕的主意,而且它不起作用。它使用 pre-commit 钩子而不是 post-commit,这意味着其中的任何错误都会阻止开发人员提交他们的工作(在我的例子中 - post-commit - 提交更改,只是不会传播到目的地)。他们的预提交挂钩在我的服务器上失败(与上述第一点相同的错误消息)并且他们将“svn2web”属性添加到文件夹属性的方法(解决方案)可能适用于纯 Linux Subversion 客户端,但在使用时似乎完全失败了Windows 上的 TortoiseSVN 作为 SVN 客户端。
我想知道,如果问题 1(和 2-3,也许是 4)的解决方案不是在 /share/Web/projects/website 中设置本地工作副本并使用 CRON 定期更新此存储库?这将始终仅“导出”实际更改,并且可能会在没有弹出登录名和密码的情况下失败。但这似乎是在重新发明轮子或强迫打开已经打开的门。
预先感谢您的任何帮助。