3

我已经从头开始建立了一个 SVN 存储库,并且我已经使用 SVN 复制命令成功地标记了我的一些版本。

我为 apache 使用了 SSPI auth 插件,所以我们的开发人员只需使用他们的网络凭据访问服务器,一切正常。

我创建了一个 AuthZ 授权文件,将我们的开发人员添加到文件中的组,并授予他们对 root 的写入权限。我还授予匿名用户对 root 的只读访问权限。

然后我使用以下命令锁定 /svn/ 目录: Require-group "CORP\CKAN0BlahBlah"

这有效地将安全组中的新开发人员限制为只读访问权限,直到他们通过 aAuthZ 配置文件获得访问权限。

现在,我有几个问题:

  1. 防止用户对任何“标签”目录提交更改的正确方法是什么(除了荣誉系统)?

  2. 是否可以使用 SSPI 将组的成员传递给 AuthZ,而不是在配置文件中单独列出成员?

4

5 回答 5

6

1 - 您可以使用 pre-commit hook 来防止提交,请参阅SVN pre-commit hook for Avoid changes to tags subdirectories

编辑:要在 Windows 上执行此操作,请尝试以下操作:

将其保存为 repo 的 hooks 文件夹中名为 pre-commit.bat 的文件:

@echo off
set REPOSITORY=%1
echo %REPOSITORY% | find /I "tags"
if errorlevel 1 goto done
echo You tried to commit to %REPOSITORY% >&2
echo Committing to tags is not allowed >&2
exit 1
:done

请注意,这将阻止提交到包含子字符串tags的任何存储库路径。根据您的需要进行修改。

于 2009-05-19T18:41:55.043 回答
3

对于问题#1,我为此开发了:

@echo off
SET SVNLOOK=C:\Program Files\CollabNet Subversion Server\svnlook.exe
SET GREP=D:\SVN\Repo\hooks\grep.exe
SET LOG=D:\SVN\Repo Logs.txt

>>"%LOG%" echo ==== commit %1 %2 ====
>>"%LOG%" "%svnlook%" changed -t %2 %1

("%svnlook%" changed -t %2 %1 | "%grep%" "^U.*/tags/") && (echo Cannot commit to tags.>&2 && exit 1)
("%svnlook%" log -t %2 %1 | "%grep%" "[a-zA-Z0-9]") || (echo You must specify a comment.>&2 && exit 1)

exit 0

从http://sourceforge.net/projects/unxutils获取 grep 工具


对于问题 #2,答案是否定的,您无法检查 AuthZ 配置文件中的 AD 安全组。

谢谢大家的帮助。

于 2009-05-19T20:07:26.907 回答
2

没有“正确”的方式。标签是一种约定,开发人员应该学习并遵循它。除此之外,可以使用 Subversion 钩子实现故障安全。请参阅页面以获取不错的教程。

于 2009-05-19T18:43:24.510 回答
1

在我看来,这是一个教育和过程的问题。如果您的开发人员了解您的 SVN 标签的用途,那么您似乎不太可能让人们(故意)对标签进行提交。我发现有效传达这些流程必不可少的是最新的书面文档。我的团队使用 wiki 来存储有关我们流程的文档(具体来说,我们使用MediaWiki)。与将版本化的 MS Office 文档存储在 sharepoint 中相比,wiki 方法似乎使事情更易于访问和更新。

于 2009-05-19T18:49:37.573 回答
0

如何使用 svn-auth 文件来定义它?这看起来像这样:

[groups]
ADMINS=<your ID>
<rest of groups>=<all other IDs>

[/]
* = r
<rest of groups> = rw
@ADMINS = rw

[/tags]
<rest of groups> = r

这将允许管理员对标签目录进行读写访问,但不允许其他人访问。我不知道 SSPI auth 插件,所以我提供的示例可能不适用于您的上下文。

于 2010-01-14T08:33:19.710 回答