Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SVN预提交钩子中的用户验证_Svn_Pre Commit Hook_Pre Commit - Fatal编程技术网

SVN预提交钩子中的用户验证

SVN预提交钩子中的用户验证,svn,pre-commit-hook,pre-commit,Svn,Pre Commit Hook,Pre Commit,找到mcdon提供的一个有用的SVN预提交挂钩 我想在提交之前添加对用户的验证检查。我可以做下面这样的事情吗 @echo off REM user1, user2, user3 are example set VALID_USERS=user1,user2,user3 set SVNROOT="C:\Program Files\CollabNet Subversion Server\svnlook.exe" set REPOS=%1% set TXN=%2% %SVNROOT% autho

找到mcdon提供的一个有用的SVN预提交挂钩

我想在提交之前添加对用户的验证检查。我可以做下面这样的事情吗

@echo off
REM  user1, user2, user3 are example
set VALID_USERS=user1,user2,user3

set SVNROOT="C:\Program Files\CollabNet Subversion Server\svnlook.exe"
set REPOS=%1%
set TXN=%2%

%SVNROOT% author %REPOS% -t %TXN% | findstr /r "^%VALID_USERS%$" >nul
if %errorlevel% EQU 0 (
   echo This is an invalid user 1>&2
   exit 1
) else (
   echo This is valid user 1>&2
   exit 0
)

上述预提交脚本失败,因为所有用户都可以提交其文件。另外,“echo”命令不起作用,因为我在上面没有看到任何echo语句。有人能帮忙吗?

我不明白你为什么需要一个预提交钩子,所以我给你一个草图,我们在处理标记时使用了什么

  • 我们使用Subversion,有这样的规则:

    [/tags]
    * = r
    @R_SVN_ADMINS = rw
    
    因此,只有管理员才能创建和修改标记

  • 如有必要,我们为每个标记添加一条规则以避免修改:

    [/tags/r1.0]
    @R_SVN_ADMINS = r
    
  • 另一种解决方案是在创建后的第一个点修改规则,使标记仅为只读

  • 这对我们来说很有效,因为标签很少创建,我们没有太多标签。我们不需要任何钩子来禁止某些东西…

    发现以下解决方案有效:

    REM     Block deletion of folder/file in trunk
    %SVNLOOK% changed %REPOS% -t %TXN% | findstr /r "^D.*trunk/.*$" >nul
    if %errorlevel%==0 (goto DeleteInTrunkError)
    
    REM     DeleteInTrunkError
    REM ------------------------
    :DeleteTrunkTagsError
    echo. 1>&2
    echo Trunk Delete Error: 1>&2
    echo     Only Administrator can delete in the trunk folder. 1>&2
    echo Commit details: 1>&2
    %SVNROOT% changed %REPOS% -t %TXN% 1>&2
    exit 1
    

    谢谢你的回复。我曾想过使用预提交钩子来限制用户删除/trunk目录中的文件/文件夹。然后,您应该重新表述您的问题(可能还有标题)以告诉人们您的问题…@mliebelt,上述授权是否也适用于基于LDAP的身份验证?我的意思是,LDAP中的用户可以访问repo,但不能为所有用户设置读写权限。我无法使用“限制”,因为LDAP中没有创建组。请建议。