SVN提交后更新为不正确的版本

SVN和它的post-commit钩子有一个奇怪的问题。

我们有一些网站,这个问题只影响一个(至less我发现)。 这个代码有一个post-commit钩子:

#!/bin/sh REPOS="$1" REV="$2" WC=/srv/www/sites/sitename date | tee -a $REPOS/hooks/log.txt cd $WC && svn update 2>&1 >> $REPOS/hooks/log.txt echo | tee -a $REPOS/hooks/log.txt 

挂钩运行,当我提交; 该目录存在; 和它运行的用户具有访问该目录的正确权限(我已经调整了钩子的代码以回显两个日志文件来检查。)

当我su到用户,并切换到目录,我可以运行svn update – 它将更新与最新的版本。 当我通过钩子做的时候,它不会。

我做了一些戳,发现钩子运行时,触发svn update ; 但是对刚刚提交的新版本没有做任何事情。 我从目标目录中删除了一个文件,并提交了一个更改 – 文件被恢复了,但是从之前的版本 – 我手动更新的最后一个版本。

显然有一些奇怪的事情,但我不知道是什么。 资源库的configuration看起来不错,但是我对SVN的了解不够深入。 我会很感激任何人可能有什么提示下一步看什么。

编辑

svn info给我:

 URL: file:///srv/svn/repos/sitename/trunk Repository Root: file:///srv/svn/repos/sitename Repository UUID: 8f30e7d8-358c-4aa0-ba90-4bb80c6b434e Revision: 132 Node Kind: directory Schedule: normal Last Changed Author: authorname Last Changed Rev: 132 Last Changed Date: 2013-06-17 09:47:46 -0400 (Mon, 17 Jun 2013) 

日志文件的输出没有帮助; 当我只是提交文件,我看到:

 Mon Jun 17 10:05:08 EDT 2013 

这是上次提交的时间。 svn update不会将任何内容输出到日志文件中。

我刚刚创build了一个新的版本 – 我已经添加了一个新的文件到我的本地版本库,并从目标目录中删除了README 。 这给了我在日志文件中的以下内容:

 Mon Jun 17 10:11:44 EDT 2013 Restored 'README' 

我刚刚提交的版本是134.没有新文件的迹象, svn info告诉我最后更改的logging仍然是132。

再次编辑

我已经添加了一些debugging代码钩,如要求:

 echo $@ >> /tmp/tempfile; env | tee -a /tmp/tempfile; 

这给了:

 /srv/svn/repos/sitename 150 OLDPWD=/ PWD=/srv/www/sites/sitename 

150是我刚刚添加的修订版本。

再次编辑

按照要求。 第一个是我做了改变并承诺的(没有更新); 第二个是我删除一个文件后,再次提交(该文件已恢复,但从一个较早的版本)

 /srv/svn/repos/sitename 153 OLDPWD=/ PWD=/srv/www/sites/sitename /srv/svn/repos/sitename 154 OLDPWD=/ PWD=/srv/www/sites/sitename 

再次编辑

我创build了一个新的工作目录,并以www数据login。 我以同一个用户的身份进行了初始结账。 然后犯下。 和svn update没有做任何事情。

我尽我所能,这不是一个明显的文件权限错误。 挂钩肯定是运行svn update命令,因为当我从工作目录中删除一个文件并运行一个提交,它正在恢复我删除的文件。

就好像svn没有看到新版本。 我目前使用的命令是:

 REPOS="$1" REV="$2" WC=/srv/www/sites/sitename /usr/bin/svn update -r $REV "$WC" 2>&1 

$1是正确的存储库名称。 $2是正确的最新版本号。 $WC是正确的目录。

  • 当我提交一个文件,挂钩运行,但不更新(即使设置了-r标志)。
  • 当我运行svn commit作为正确的用户,在正确的目录中,它正确更新
  • 当我从工作目录中删除一个文件,并提交时,该文件被恢复,但从最新版本手动运行。

为了完善,我也尝试使用版本号的旧版本。 当我做了/usr/bin/svn update -r 10 "$WC" 2>&1 [约140版本之前],它没有任何更改 – 没有删除,没有添加任何东西。

更新第五个

svn update添加到cron中,与post-commit挂钩启动时完全相同。 它会更新到我运行svn update的最后一个版本,但是更新的版本将被省略。 如果工作目录和最后一个版本没有区别,它什么都不会做。 是的,cron正在运行。 我试图以正确的用户身份和作为根源,在这一点上有点挫败。

另外,我刚刚重新创build了仓库和工作目录。 我将我的本地工作目录中的内容添加到新的回购库,并且其行为方式完全相同。 即使这个设置和我今天早上build立的一个不同的开发站点是一样的。

所以我放弃了这一点。 试图解决这个问题的麻烦远远超过偶尔手动更新它的不便之处。 谢谢大家阅读这个,并为您的build议。

为什么不每隔几分钟就有一个cron作业来更新工作副本。 它会绕过你作为一个post commit钩子所遇到的麻烦,而且这将节省开发者在每次提交时都必须等待svn更新完成的麻烦。