我正在尝试实现一个post-commit钩子来更新工作副本。 据我所知,post commit hook正在运行(我在文件中写了一些东西来验证它)但是没有运行update命令。
起初我做了
cd /home/user/working/copy
svn update
但是那不起作用,那么我读到你必须给出svn的完整路径:
cd /home/user/working/copy
/usr/bin/svn update
但仍无法正常工作。
我将permisions更改为777,并在一个空的环境中运行脚本......它可以工作。
答案 0 :(得分:5)
#!/bin/bash /usr/bin/svn update /home/user/working/copy
上面的代码应该作为post-commit钩子。
添加--username& - 如果需要,可以使用密码选项。
修改
请参阅 http://subversion.tigris.org/faq.html#website-auto-update
执行提交的服务器程序(svnserve或apache)与将运行提交后挂钩脚本的程序相同。这意味着该程序必须具有更新工作副本的适当权限。
如果需要更新的“工作副本”归同一用户所有,那么您无需担心用户名和用户名。密码。
Subversion常见问题解答建议将Setuid与以下C程序一起使用。
#include <stddef.h>
#include <stdlib.h>
#include <unistd.h>
int main(void)
{
execl("/usr/local/bin/svn", "svn", "update", "/home/joe/public_html/",
(const char *) NULL);
return(EXIT_FAILURE);
}
答案 1 :(得分:1)
工作副本位于用户的主目录中。如果SVN服务器以不同的用户身份运行,比如说“svnserver”,那么post-commit hook脚本将作为“svnserver”运行。有意义的是,一个用户无法修改或读取其他用户的文件,除非文件的权限设置允许这样做。
您不应在多个用户之间共享工作副本。如果你真的必须,那么仅仅给每个用户提供读/写权限是不够的。您还需要确保没有用户创建其他用户无法访问的文件。要实现这一点,您需要为设置正确umask的svn命令编写包装脚本,或者让所有相关用户能够通过sudo充当特定用户。
答案 2 :(得分:1)
如果您不自行使用workingcopy,则可以 chown 将workingcopy运行到运行hook-script的用户
答案 3 :(得分:1)
我也遇到了同样的问题,并尝试了(包括官方FAQ中的那个)所有方法都没有运气
当然,我每次都会根据需要运行chmod -R和chown -R www-data:www-data。
在大多数情况下,执行更新命令,没有权限错误,没有任何其他错误消息,但工作副本未更新。
最后,以下步骤适合我:
在post-commit hook run
中export LC_CTYPE=en_US.UTF-8
cd [/working-copy-folder/] # heading tail slash
/usr/bin/svn checkout [source path]
一次,然后将post-commit hook更新为
export LC_CTYPE=en_US.UTF-8
cd [/working-copy-folder/]
/usr/bin/svn update
现在它正在运作,我太累了找不到根本原因。 花了一整天的时间来'svn update'
答案 4 :(得分:0)
我工作的最终解决方案是我得到的一些答案。 我的服务器有apache作为nobody运行,所以我让工作副本由nobody和UserName组拥有,然后chmod到775。 通过这种方式,钩子将起作用,用户名也将具有通过FTP更新文件的权限。
答案 5 :(得分:0)
wcoenen的回答肯定是在正确的轨道上。解决此问题的最简单方法是将SVN用户添加到您的组中。假设您的post-commit钩子由用户someUser和someUser拥有。将SVN服务器添加到someUser组,并将提交后的挂钩脚本chmodding为group-executable,可以解决您的问题。
我希望这是有道理的:P
答案 6 :(得分:0)
此脚本更好,因为它只更新所需的文件... http://vidax.net/blog/en/2010/03/subversion-post-commit-hook/
答案 7 :(得分:-3)
我相信提交后实际上是在提交可见之前运行的。这很奇怪,但是你说你提交了修订版30.提交后仍然会将29作为最新版本。完成提交后脚本后,您将看到30作为主要修订版。
我可能是错的。这完全来自记忆。至少要尝试的东西。