【发布时间】:2013-11-27 21:10:37
【问题描述】:
好的,我的意思是,我在服务器上有一个 svn 的工作副本,必须保持最新。所以我设置了一个 cronjob 来经常更新 svn。我的脚本只是在特定的时间间隔进行 svn 更新。我尝试在 svn 服务器上使用 post-commit 挂钩脚本,但没有成功。
不管怎样,我的老板让我修改脚本来制作一个svn信息,并将当前版本与工作副本的版本进行比较,如果有变化,则触发更新。 他认为 svn 服务器上的服务器负载会比在同一时间间隔进行更新要少。我的观点是 svn update 确实可以比较,但是更新前的版本。
我在执行 svn info 脚本时没有任何问题,但我认为它不会改变任何事情。
我寻找有关 svn update 的信息以及它的实际作用,但没有找到有用的信息。
编辑:@Wrikken 和@Ben,首先让我澄清一下我的环境。 我的 svn 环境仅在局域网上,所以我们使用 svn 协议(svn://)。我的 svn 服务器是 ubuntu 服务器,我的客户端是 debian 服务器。我已经在我的 svn 服务器上配置并运行了 hookscript,以便与作为我的 svn 服务器镜像的第三台服务器同步。我的 svn 服务器与用户 svn 一起工作。我的钩子脚本和我的脚本属于同一个用户(svn)。这是我的提交后脚本(svnsync 命令工作正常) #!/bin/sh
REPOS="$1"
REV="$2"
ME=`whoami`
echo "post-commit $REPOS $REV user: $ME " >> /var/log/svnsync.log
# non interactive:
/usr/bin/svnsync sync --non-interactive svn://path/to/mirror/repository --username "user" --password "######" >> /var/log/svnsync.log 2>&1
/path/to/script/script.sh >> /var/log/svnimpact.log 2>&1
现在这里是我的脚本,用于连接和更新我的第二台服务器上的工作副本(它只是一个 svn 客户端而不是 svn 服务器)
#! /bin/sh
/usr/bin/sshpass -p "######" /usr/bin/ssh svn@ipaddress 'svn update /path/to/working/copy'
只执行更新脚本可以与运行 svn 服务器 (svn) 的同一用户正常工作 但是当提交完成时它从未被执行过。 我现在有点迷路了。
【问题讨论】:
-
svn info& 然后svn update在服务器上比svn update更重,如果没有什么要更新的话,它并没有多大作用。我很好奇您在使用 post-commit 钩子时遇到了什么问题,在这里可以完美触发构建...... -
@Wrikken 最后我们找到了问题。 svn 用户以前从未在该服务器上进行 ssh 连接。因此,使用 sshpass 命令,它被赋予了问题的密码,您是否信任计算机。所以该命令永远不会正常工作。我们将提交后更改为使用 ssh 密钥,一切都开始工作了
标签: svn