问题标签 [post-commit-hook]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1573 浏览

svn - 用于在 SVN 修订文件中搜索特定字符串的批处理脚本

我需要一些有关 Windows 批处理脚本的帮助

我想达到什么目的:

  • 从存储库中检索最年轻(最后)的修订
  • 在该文件中搜索特定字符串
  • 如果字符串存在,则加载网页

我试过的:

我为什么要这样做:

我想在消息中包含特定字符串的提交后启动 Hudson CI 自动测试(例如Autobuild: true

我无法调试我的代码,因为我不熟悉 Windows 批处理脚本

在我的脚本中,我使用了

  • 变量的串联(可能是错误的),因为我不确定是否可以将变量附加到路径
  • findstr查找文件是否包含字符串(我知道 findstr 也可以用于变量)

如果我的小脚本有语义问题和句法问题,我不会感到惊讶,因为正如我已经提到的,我之前没有做过那么多的批处理脚本

我没有要求,没有规范,所以脚本可以以任何可能的方式实现。所以我愿意接受建议

PS我还读到过使用超重程序post-commit不是一个好主意,因为svn在完成所有操作之前不会将控件返回给用户->这不是一个大问题

编辑: 我通过测试发现我并没有真正获得最年轻的修订号,而是使用了命令字符串。所以在谷歌搜索了一下之后,我发现在 Windows 中调用一些命令并将结果存储在变量中并不容易。所以我决定使用文件来存储中间结果。

这是我尝试过的:

在修订版.bat 中:

现在我在 SVN 中得到这个错误:

我相信这是因为我a在错误的时间在错误的地方创建了变量。但是如果我手动运行 bat 文件,我不会收到此错误

0 投票
3 回答
18427 浏览

linux - SVN 提交后更新错误(无法从模板创建临时文件/权限被拒绝)

我的提交后挂钩是:

/usr/bin/svn 更新 /var/www/html/mysite/ --username myusername --password mypassword --no-auth-cache >> /var/www/html/mysite/foo.txt 2>&1

执行提交后,我的 post-commit 钩子输出到 foo.txt 如下:

更新“/var/www/html/mysite”:svn:E000013:无法从模板“/var/www/html/mysite/.svn/tmp/svn-XXXXXX”创建临时文件:权限被拒绝

有任何想法吗??必须是与权限相关的东西。它曾经工作,但发生了一些事情。

0 投票
1 回答
4451 浏览

svn - Tortoise SVN - 提交后挂钩失败(退出代码 1),没有输出

我正在使用 TortoiseSVN 1.8.1,Build 24570 并尝试将文件提交到远程存储库。但它不起作用,因为我正在收到消息

结果是没有任何东西被提交到远程存储库

有任何想法吗?

0 投票
2 回答
1972 浏览

svn - SVN 提交后脚本

我在我的钩子文件夹中名为 post-commit.sh 的文件中有这个:

现在如果我运行:

一切正常,但如果我从我的电脑上进行提交,那么它就不起作用了。我已将 www-data 用户添加到组“开发人员”中,即网站和 svn 目录的文件夹和文件所有者组。我已经使 sh 文件可执行。我错过了什么?谢谢詹姆斯

0 投票
2 回答
3603 浏览

svn - SVN 提交后脚本未执行

我现在花了几个星期试图解决这个问题(没有任何进展)。

我遵循了 svn 红皮书部分“实施存储库挂钩”:

  • 将 $REPOSITORY_HOME/hooks/post-commit.tmpl 文件复制到 $REPOSITORY_HOME/hooks/post-commit

  • 使 $REPOSITORY_HOME/hooks/post-commit 脚本可由运行 httpd 或 svnserve 的帐户执行(事实上,我使它对所有人都可执行)

  • 验证我的提交后脚本是否可以由同一用户在命令行上手动运行

但是,只要任何用户将任何工件提交到存储库,提交后脚本仍然无法执行。

我在 svn 红皮书和 post-commit.tmpl 中发现的一件事让我对它的推断有点困惑:“请注意,‘post-commit’必须由将调用的用户执行它(通常以用户 httpd 的身份运行),并且该用户必须具有文件系统级别的权限才能访问存储库。”

这是否意味着执行 post-commit 脚本的用户也必须是可以访问 SVN 存储库的用户(通过诸如 tortoiseSVN 之类的 SVN 客户端,或者更确切地说是可以通过诸如 putty 之类的东西访问 SVN 存储库文件的本地用户帐户) . 我相信这可能是我的问题所在,但我并不完全相信,因为运行 httpd 的用户是提交后脚本和存储库所在文件系统的所有者。因此,他拥有文件系统所需的所有权限。但是,我无法使用该用户帐户在我的工作站上使用 tortoiseSVN 从存储库远程签出目录/文件。

非常感谢任何见解!

已审阅的参考资料:

0 投票
5 回答
14035 浏览

git - Github 文件更改通知

有没有办法通知人们更改某些文件?具体来说,我想跟踪 *.sql 文件的更改,并通知我们的开发人员进行更改。如何配置提交后挂钩以进行通知?

0 投票
2 回答
1254 浏览

svn - 为什么当我检查特定分支是否已提交时,我的提交后挂钩条件语句不起作用?

我正在通过 Windows 服务器上的 VisualSVN 服务器运行 Subvbersion,并且我的存储库设置了一个主干和三个分支。分支是 dev、test 和 prod。我有一个要运行的提交后挂钩,它在运行提交后更新工作副本,但我只希望它在开发分支中进行提交时更新该工作副本。

这是我现在的代码...

如果我取出条件,更新会在每次提交时运行,所以我知道条件中的代码有效。我还将条件作为常规批处理文件进行了测试,将其发送为“branches/dev”和“branches/test”之类的字符串,并且在这些测试中表现正常。但是,当我将它保存为我的提交后挂钩脚本时,它永远不会运行,无论提交是在 dev 分支中还是其他地方。

编辑:根据已经回答了这个问题的反馈,我尝试了另一个问题中推荐的方法,但这种方法也不起作用。这是我在那里建议的代码版本:

为了让它工作,我在 hooks 目录中创建了一个名为 post-commit-actions.bat 的文件来执行 svn 更新。但是,这不是在提交后运行。如果我遗漏了任何相关信息,请告诉我。

编辑:感谢大家的帮助。通过这里的输入,我能够拼凑出一个可行的解决方案。对于那些寻找类似问题答案的人来说,它的工作原理是这样的:

0 投票
1 回答
799 浏览

svn - 如何循环遍历 Subversion 提交后挂钩中的更改?

我一直在为我的 Subversion 存储库开发一个提交后挂钩,当其他工作副本被提交时,它将更新我的实时服务器上的特定工作副本。当我在整个工作副本上运行更新命令时,它可以工作,但当我想对已更改的特定文件执行此操作时,它就不行了。我在 Windows 2008 服务器上运行 VisualSVN 服务器,并且钩子是从 .cmd 文件运行的。

任何帮助是极大的赞赏。这是我正在使用的代码:

我相信 FOR 循环有问题,但我不知道它是什么。这是用于更新整个工作副本的代码。但是,此解决方案并不是真正可行的,因为每次提交运行更新都需要很长时间:

编辑:根据我在 CMD 中阅读的有关 FOR 循环的内容,我对上面的代码进行了一些小改动,但它仍然无法正常工作。我没有收到任何错误,但更新没有执行。

编辑:我找到了一个问题的解决方案,它作为 .bat 文件或 CMD 文件运行得很好,但它仍然没有从 post-commit.cmd 更新。它不返回任何错误,只是不运行更新:

0 投票
2 回答
661 浏览

svn - SVN Hook 停止工作 - SVN 更新未执行

我大约一个月前建立了一个 SVN 存储库,经过一番努力后,我得到了一个 post-commit 挂钩,可以在开发服务器上更新我的网站的工作副本。它工作了好几天,然后,昨天,突然间,它停止了。

我正在从我网络上的服务器运行 VisualSVN Server。据我所知,Web 服务器或托管 VisualSVN 服务器的服务器没有任何变化。VisualSVN 服务器在过去几天没有在事件查看器中显示任何事件,所以我看不到是否有错误,也找不到任何特定于 SVN 的日志文件。当我运行'svn log'时,它只显示提交。我不确定如果有错误,它是否会显示错误。

这是正在运行的脚本的清理副本:

我还检查了服务器上的任何锁,但没有发现任何锁,并在我的 DEV 服务器上运行了工作副本的清理,一切都无济于事。我还尝试从另一个工作站进行更新,只是想看看它是否可能是我的本地计算机并且它仍然没有正常运行。最后,我还尝试从命令行运行脚本,它会运行并更新工作副本。实际上似乎服务器没有运行它。

非常感谢调试此问题的任何帮助。

更新:在找到一些调试策略后,我能够通过包含如下命令来确认该钩子确实正在运行:

正如预期的那样,这记录了提交。我还包含了类似的调试代码,以确保钩子捕获了正确的主干/分支,并且我还让它在更新之前记录了目录,所以我新建了它将运行该命令。所有这一切都做到了。然后,为了尝试记录服务器响应,我将更新代码更改为以下内容:

这根本不返回任何内容。我对此完全不知所措。

更新2:当我测试这个问题时,我之前没有得到这个,但是现在当我自己运行命令时......

它返回“svn: E020024: Error resolve case of”并吐出我刚刚给它的路径。

我确实尝试用谷歌搜索这个问题的一些来源,但我发现的唯一一件事是建议用斜杠切换反斜杠,但它返回完全相同的错误,但斜杠切换回反斜杠。

更新 3:为了检查错误是否与作为网络服务运行并尝试通过 UNC 路径访问工作副本的服务器有关,我尝试将服务更改为以我的名义运行并映射网络驱动器并使用脚本中的这个映射驱动器。该测试没有给我任何错误,但没有执行更新。

此外,我想得越多,我在上面的 UPDATE 2 中从命令行得到的错误可能不是脚本运行时发生的情况,因为客户端的提交屏幕(由 TortoiseSVN 运行)会显示我的错误。它没有显示任何错误。

所以,这就是我所知道的。

  1. 该脚本运行了好几天
  2. 该脚本在周末的某个时间突然停止工作
  3. 没有对托管工作副本的服务器或运行存储库的服务器进行任何更改
  4. 钩子不会产生任何错误(因为这些会显示在 TortoiseSVN 提交屏幕中)。
  5. svn update 命令未执行。

我完全不知所措。

0 投票
1 回答
3768 浏览

bash - Subversion post-commit 钩子不会在提交时运行,脚本有效,因为我可以在命令行上运行它

我刚刚创建了一个新的存储库。我的服务器是 Ubuntu 12.04 32 位。我希望我的承诺在我提交后立即生效。这是通过在我的公共 html 目录中制作工作副本并让 post-commit 挂钩更新该工作副本来实现的。我已经使用此处的说明进行了设置:

http://www.frenssen.be/content/using-subversion-automatically-update-live-website

问题是当我的项目提交时我的 post-commit 不会运行。我的项目提交就好了。我知道该脚本也是一个有效的脚本,因为我可以运行它

hooks目录内部,它会正确更新。

我认为这可能是一个权限问题,所以我广泛使用chown以确保它www-data是以下内容的所有者:

但还是一无所获。我的提交是成功的,但钩子永远不会运行。我的钩子脚本如下所示:

所有的谷歌搜索似乎都指向权限问题,但我无法弄清楚这一点。