2

我有一个这样的颠覆存储库:

Repo
    ProjectA
        trunk
        branches
        tags
    ProjectB
        trunk
        branches
        tags

我正在尝试编写一个仅适用于一个项目的提交后挂钩脚本,但我刚刚了解到它们位于存储库的根目录中。

我得到的唯一两个参数是存储库路径和修订号。有什么方法可以让我只为一个特定的项目执行这个脚本吗?

谢谢,

解决方案: 最终解决方案是这样的:

#!/bin/bash
REPOS="$1"
REV="$2"
if svnlook changed -r $REV $REPOS | grep ProjectA; then
    echo "do stuff"
fi
4

3 回答 3

3

是的,使用svnlook获取已提交修订中修改的文件列表,然后使用合适的正则表达式对名称进行 grep 以确定 post-commit 的路径是否在正确的位置包含您的项目名称,如果它确实执行代码,否则,跳转到脚本末尾并返回 0。

于 2011-06-18T12:09:23.693 回答
1

我来到这里为 Windows 2012 服务器上的 VisualSVN 寻找这个问题的答案。在收集了更多信息后,这是我为 VisualSVN 上的 Windows 批处理文件提交后挂钩提出的解决方案,该挂钩在开发服务器上加载 PHP 脚本以将特定项目部署到该服务器。钩子命令是一行:

svnlook changed "%1" | findstr /L "ProjectA/trunk/" && powershell -Command "Invoke-WebRequest http://192.168.0.177/checkout_on_commit/checkout_on_commit.php -OutFile $ENV:SYSTEMROOT\Temp\commit.txt" || rem

需要 rem 作为“无操作”,以防止 Tortoise 将钩子报告为提交给其他项目失败。导致项目部署在 Linux 服务器上的 checkout_on_commit.php 的内容是:

<?php
`date >> checkout.log`;
`svn sw --non-interactive --no-auth-cache --username project_a_readonly --password trytoguess https://svnserver/svn/GroupA/ProjectA/trunk /app/www/ >> checkout.log`;
?>
于 2015-06-23T21:51:58.417 回答
0

在 Subversion 中不存在像“项目”这样的定义......定义必须由您完成。这意味着 Subversion 在存储库中的更改而不是在“项目”基础上执行该更改...

您可以使用您获得的信息(如存储库和修订号)来提取您需要的信息...您可以通过使用 svnlook 来提取您需要的信息..通过使用适当的参数调用 svnlook 来做到这一点。

于 2011-06-18T12:08:46.510 回答