我做了一些功课,尽管我可以回答以下所有有关在Windows上(使用VisualSVN服务器)导出SVN存储库的问题,但我在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),没有输出"结束。提交后的钩子似乎没有被触发,因为目标网站没有更新。我检查(甚至仔细检查)命令本身的作用就像一个超级按钮(从命令行调用时)。它仅在提交后挂钩内失败。我试图在此文件的末尾添加"退出0"。当然,它是可执行的。没运气。仍然,经过多次尝试,相同的错误代码。
即使我没有提供用户名和密码作为参数,为什么仍可以执行此操作?存储库中的" passwd"文件已正确设置,并且来自外部客户端的任何操作都需要提供用户名和密码,否则将失败。 SVN中的某些错误?
有什么方法可以将导出到目标的文件限制为仅更改/添加/删除,而不是在每次提交后导出整个存储库?
无论如何,是否有通过FTP而不是QNAP本地路径通过外部服务器完全相同(导出)的方法?
对于第3点和第4点,我尝试使用SourceForge形式的svn2web工具,但这不是一个好主意,并且不起作用。它使用提交前钩子而不是提交后钩子,这意味着它中的任何错误都将阻止开发人员提交他们的工作(在我的情况下-提交后-更改已提交,仅不传播到目标)。他们的预提交钩子在我的服务器上失败(与上面的第一点相同的错误消息),并且他们向文件夹属性添加" svn2web"属性的方法(解决方案)可能仅适用于纯Linux Subversion客户端,但是在使用时似乎完全失败了Windows上的TortoiseSVN作为SVN客户端。
我想知道,问题1(以及2-3,也许是4)的解决方案是否不是要在/ share / Web / projects / website内设置本地工作副本,并使用CRON对该存储库进行定期更新?这将始终仅"导出"实际更改,并且可能会在没有Poper登录名和密码的情况下失败。但这似乎是在重新发明轮子或强迫打开已经打开的门。
预先感谢您的任何帮助。
1.可以连接到(2)-钩子运行所在的用户未经授权,并且与(2)中的用户不同。2.您确定要阻止只读权限吗? 如果是,则可能是第一次请求您输入用户名/密码,现在将其缓存(删除?/ .subversion / auth目录中的所有内容,看看会发生什么)。
关于不使用同一用户-我不 也许你说的对。 关于兑现密码-我很 我只运行了3次export命令,每次都能正常运行,而不会要求我输入密码或登录。 但是,我的好奇心是关于不要求输入密码的问题。 毕竟,这对我来说不是一个大问题。
简单回答:
我可能会以与SVN守护程序(svnserve)用于运行挂钩的用户不同的身份运行此命令。另一个用户(由SVN使用)可能没有获得运行导出所需的所有权限。
不幸的是,我不知道。在您安装SVN时必须有所帮助。当然,这根本不应该发生。如果存储库得到了适当的保护,并且需要登录名和密码,那么即使是用于导出操作,每个人都必须核心地提供它。
您需要扩展脚本,最好将其作为提交后的钩子运行,它将当前(最后一个-HEAD)版本与先前的版本进行比较,并且仅导出更改的文件。这不是一件容易的事。在尝试再次发现轮子之前,请在Internet上四处寻找可用的解决方案! :]
不直接用SVN的提取命令吗?我想到的最简单的方法是提取到本地路径,打包,通过FTP发送并在目标位置解压缩。或者,如果您无权访问目标位置的shell,请逐个文件直接发送以解压缩存档。
希望这些会有所帮助吗? :]
非常感谢您(+1)! :]