最近公司核心团队出走,留下一摊东西要管。原来平台开发的SVN权限不在我手上,现在也交接到我手上。
于是想对SVN的权限和使用方式做一些调整:原来团队使用SVN都是基于主干开发不使用分支,而我这边使用SVN都会使用到分支与合并,所以想把使用分支与合并的方式和技巧教给他们。因为由我开发的SDK这边的库我拥有完整的权限所以使用上没什么问题。但是平台那边开发人员比较多权限分配的比较细,结果就出现了几个问题,导致我花了半天的时间来解决这些问题。
具体有如下两个问题
1.权限控制导致无法使用分支与合并功能
2.Visual SVN Server显示权限继承方面存在问题
解决问题1 权限控制导致无法使用分支与合并功能
SVN库的结构如下所示
TestRepo
├─trunk
│ └─project1
├─branches
│ └─p1branch
└─tags
情况是这样的:
同事A只拥有project1和p1branch的读写权限,其他目录都是继承库根目录权限,为无权限。
如下图所示
TestRepo (Everyone无权限)
├─trunk (继承Everyone 无权限)
│ └─project1 (A读写权限)
├─branches(继承Everyone 无权限)
│ └─p1branch(A读写权限)
└─tags(继承Everyone 无权限)
A想要在p1branch下创建分支,出现错误提示403 forbidden,无法创建分支,但单独在p1branch下却可以提交文件。
出错信息提示的路径是TestRepo库的根目录,分析了下觉得创建分支出错可能是跟库的根目录无权限有关。
于是在不破坏当前库权限的基础上做了如下修改,给同事A加上了TestRepo库根目录的只读权限,分别设置trunk、branches,tags无权限。
重新测试分支与合并,一切都OK了,新的权限如下图所示
TestRepo (Everyone只读权限)
├─trunk (Everyone无权限)
│ └─project1 (A读写权限)
├─branches(Everyone无权限)
│ └─p1branch(A读写权限)
└─tags(Everyone无权限)
解决问题2 Visual SVN Server显示权限继承方面存在问题
问题1解决后马上遇到了新的问题,按照上面的权限设置后,我发现自己无法访问TestRepo库了,查看日志只能看到提交的revision id,无法看到提交的内容和日期了。单独checkout TestRepo目录发现没有下面的三个目录了。
原来权限如图所示
TestRepo(Everyone无权限 我读写权限)
├─trunk(继承根目录权限)
│ └─project1(继承根目录权限)
├─branches(继承根目录权限)
│ └─p1branch(继承根目录权限)
└─tags(继承根目录权限)
按我的理解修改过后的权限应该为
TestRepo(Everyone只读权限 我读写权限)
├─trunk(Everyone无权限 我继承根目录自己的读写权限)
│ └─project1(Everyone继承上级的无权限,我继承根目录权限的读写权限)
├─branches(Everyone无权限,我继承根目录权限的读写权限)
│ └─p1branch(Everyone继承上级的无权限,我继承根目录权限的读写权限)
└─tags(Everyone无权限 我继承根目录自己的读写权限)
Visual SVN Server的权限设置对话框也是如此理解,如下图所示
可以看到我wowh是继承了上层的读写权限,Everyone为无权限,但此时我实际上是无权限的。
因为SVN的权限设计是只要在某一层设置了Everyone的权限,就会阻断其他用户从上层目录继承权限。
于是单独给trunk等三个目录添加我自己的读写权限后对库的操作就恢复正常了。
正确的设置如下所示
TestRepo(Everyone只读权限 我读写权限)
├─trunk(Everyone无权限 我单独设置读写权限)
│ └─project1(Everyone继承上级的无权限,我继承上层目录的读写权限)
├─branches(Everyone无权限,我单独设置读写权限)
│ └─p1branch(Everyone继承上级的无权限,我继承上层目录的读写权限)
└─tags(Everyone无权限 我单独设置读写权限)
总结
SVN的权限是把双刃剑,好处是在公司里使用时可以有效的保护公司的知识产权。
坏处就是因为权限导致的种种问题,比如以上两个问题。这里还有个至今无法解决的问题是,假如提交人是在上层提交,提交中包含了下一目录的内容,而如果你只拥有下一层目录的权限的话,你将无法看到提交日志。
另外Visual SVN Server是个好Server,如果能在权限控制上更贴近实际的情况那就更好了。
wowh 计算机与 Internet
最新评论