Svn 颠覆标记与安全
我从头开始建立了一个SVN存储库,并且使用SVN copy命令成功地标记了我的一些发行版 我使用了apache的SSPI auth插件,因此我们的开发人员只需使用他们的网络凭据访问服务器,一切都很顺利 我创建了一个AuthZ授权文件,将我们的开发人员添加到文件中的组中,并授予他们对根目录的写访问权。我还授予匿名用户对根目录的只读访问权限 然后我用:Require组“CORP\CKAN0BlahBlah”锁定了/svn/目录 这实际上将安全组中的新开发人员限制为只读访问,直到通过aAuthZ配置文件授予他们访问权限 现在,我有几个问题:Svn 颠覆标记与安全,svn,version-control,batch-processing,pre-commit-hook,Svn,Version Control,Batch Processing,Pre Commit Hook,我从头开始建立了一个SVN存储库,并且使用SVN copy命令成功地标记了我的一些发行版 我使用了apache的SSPI auth插件,因此我们的开发人员只需使用他们的网络凭据访问服务器,一切都很顺利 我创建了一个AuthZ授权文件,将我们的开发人员添加到文件中的组中,并授予他们对根目录的写访问权。我还授予匿名用户对根目录的只读访问权限 然后我用:Require组“CORP\CKAN0BlahBlah”锁定了/svn/目录 这实际上将安全组中的新开发人员限制为只读访问,直到通过aAuthZ配置文
1-您可以使用预提交挂钩来防止提交,请参阅 编辑:要在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
注意,这将阻止提交到包含子字符串标记的任何存储库路径。根据您的需要进行修改。没有“适当”的方法。标签是一种惯例,开发者应该学习并遵循它。除此之外,可以使用Subversion挂钩实现故障保护。请参阅第页,以获得一个不错的教程。在我看来,这似乎是一个教育和过程的问题。如果您的开发人员了解SVN标记的用途,那么让人们(有意)对标记进行提交的可能性就会小得多。我发现有效沟通这些流程所必不可少的是最新的书面文档。我的团队使用wiki来存储关于我们流程的文档(特别是我们使用的)。与在sharepoint中存储版本化的MS Office文档相比,wiki方法似乎使事情更容易访问和更新。对于问题#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
从中抓取grep工具
对于问题#2,答案是否定的,您无法对照AuthZ配置文件中的AD安全组进行检查
谢谢大家的帮助。使用svn auth文件来定义它怎么样?这看起来是这样的:
[groups]
ADMINS=<your ID>
<rest of groups>=<all other IDs>
[/]
* = r
<rest of groups> = rw
@ADMINS = rw
[/tags]
<rest of groups> = r
[组]
管理员=
=
[/]
*=r
=rw
@管理员=rw
[/tags]
=r
这将允许管理员对tags目录进行读写访问,但不允许其他人访问。我不知道SSPI auth插件,所以我提供的示例可能在您的上下文中不起作用。有没有办法在windows上做到这一点?钩子位于服务器端,因此可以使用主机平台自带的编译应用程序、shell脚本、命令文件等来完成。因此,我一直在谷歌上搜索.bat预提交脚本,几乎所有的脚本都称为Perl脚本。我不认为我可以获得在这台服务器上安装perl的权限,所以你知道纯.bat版本吗?编辑了我的答案,加入了一个.bat示例。我这里是+1,尽管我很确定你的脚本不会工作。具体来说,您需要使用SVNLOOK实用程序来检测更改,而不仅仅是检查存储库名称。我发布了我的代码作为答案。我是开发人员之一,实际上我更愿意把它作为一个硬性的规则来实现。这很公平。我能问一下为什么吗?显然,事故会发生,这是一个硬性规则有用的用例。这就是你想要它的原因吗?是的。我不相信我的一些同龄人会理解这项政策。这很粗糙。我相信拥有提交权限的每个人都处于高度信任的位置。如果你不能相信某人会遵循一个相当基本的流程,也许你应该和你的管理层谈谈。毕竟,如果你甚至不能信任他们将代码检查到正确的位置,那他们的工作质量又如何呢?在这方面有很多政治因素。通常我会同意你的看法,但我不想成为烈士。这是很酷的windows脚本;)问题:在您的脚本中,我可以将新文件添加到标记中。。您知道避免此问题的解决方案吗(我正在搜索此解决方案)?是的,您可以复制包含“(%svnlook%”文本的第一行,并将“^U.*”更改为“^a.*”。但是,请注意,您将无法将新文件添加到任何名为“tags”的目录中