管理GIT权限 - 多个代码仓库

5
我们有几个开发团队,每个团队都会开发多个项目(通常超过10个)。我们目前使用CVS,并正在评估是否要转移到SVN或GIT。我倾向于使用GIT,但是我不确定如何有效地管理权限。例如,
我们有A团队、B团队和C团队,每个团队都有12名开发人员。每个团队至少有10个独立的项目。A团队可以看到所有人的代码,B团队和C团队只能看到自己的代码。此外,一些开发人员只有只读访问权限,而其他人则具有完全访问权限。
因此,在CVS中,我们有三个存储库,一个用于每个团队。就像这样:
/cvsroot/TeamARepos/project1
/cvsroot/TeamARepos/project2

/cvsroot/TeamBRepos/project1
/cvsroot/TeamBRepos/project2 

/cvsroot/TeamCRepos/project1
/cvsroot/TeamCRepos/project2 

等等,我可以管理整个代码库并且让John Doe对A只有只读权限,对B有写入权限,而对C没有访问权限 - 因此我不必为每个项目都给他显式的访问权限(而且新项目经常添加,所以我不必每次都把每个人都添加到每个新项目中)。

我的理解是,GIT中每个项目都有一个代码库。因此,没有一种真正的逻辑方式来说“所有A团队的代码都在这里,这些用户可以对其进行编写”,以及“所有B团队的代码都在这里,这些用户可以阅读它”,并将其保持分离。

我甚至不确定如何正确地提出问题 - 但我想象将移动到GIT会成为一个管理噩梦。

我们还使用ant脚本从CVS检出代码,进行构建并部署到服务器。我刚开始看,但我希望ant在这方面与GIT很好地配合。


你的直觉通常是正确的。 - Adam Dymitruk
3个回答

4
我建议使用git而不是svn,因为它速度更快,采用分布式版本控制模型,整体上做事情的方式更加明智。我们在工作中使用SVN几年了,与git相比真是让人头疼。我看到SVN唯一的优势是它与Windows的集成,例如TortoiseSVN。但这仅适用于你喜欢被GUI限制且不愿意学习更强大的命令行。

使用git时,您需要 gitolite来处理访问控制。使用此模型,您为每个项目设置不同的存储库。Gitolite配置文件允许您将开发人员分组为团队,然后可以针对每个存储库、分支或甚至工作树路径设置非常细粒度的访问控制。您可以按团队或个人指定权限,以最适合您的方式指定权限。

如果您需要代码审查,请检查gerrit是否是适合您的正确工具。您不需要同时使用两者,只需使用gitolite或gerrit即可。

有时人们觉得学习git很难。为此,我建议将开发人员引导到一本好书,例如this。它也可以印刷出来。

如果您喜欢,可以使用TortoiseGit。感谢您添加此答案。有些SVN疯子在那里。 :/ - Adam Dymitruk

0

如果您想查看团队A在多个项目中的所有代码,您可以创建一个包含所有存储库的远程仓库,然后只需使用git fetch --all命令,进行分析。

Gitolite使管理(包括自定义钩子)变得轻松。它让您控制谁可以读取或写入到分支。您甚至可以实现自己的git钩子来添加其他自定义安全措施,例如确保每个提交消息都包含票证引用。我已经使用它超过2年了,感觉非常棒。

我们从SVN转换到Git是因为冲突解决痛苦、速度和许多其他原因之一是Git的采用率。将解决方案存储在rerere中允许轻松混合和匹配功能。编写钩子很容易,我们可以强制执行某些包含代码合同的存储库上的OCP。在SVN中,所有这些都非常麻烦,甚至不可能。

就CI流程而言,git在命令行中运行良好,因此您可以在任何自动化构建工具中执行所需操作。现在,所有主要的工具都支持开箱即用。

这是我们在每个git存储库中遵循的流程:http://dymitruk.com/blog/2012/02/05/branch-per-feature/


你可以在这里看到SVN失败的地方:https://dev59.com/EnE95IYBdhLWcg3wDpqg#2486662 - Adam Dymitruk

0

Subversion可能是一种更顺畅的方式(至少在迁移和管理方面)。

“Merge Hell”是Git-boys和懒惰的不合格SVN用户所夸大的神话和妖怪。嗯,它确实存在于某些情况下(以任何质量团队的“重构地狱”的形式),你只需要检测一下,这个条件是否适用于你的工作流程。

关于现有的服务器操作系统和基础设施,你没有提到任何通用信息,在某些情况下它是很重要的。对于Win下的Git服务器和一些前端,这真的是噩梦和恐怖,例如,对于Linux方面,我无法找到像VisualSVN Server(企业版)这样紧凑且可用的Subversion http解决方案(从我的视角来看,UberSVN过于臃肿)。如果您的服务器上有Java,您可以考虑(针对您的团队规模和存储库数量)使用SCM-manager(支持来自盒子中的Git、SVN、Hg)。


http://programmers.stackexchange.com/questions/129890/is-there-a-difference-between-merges-in-svn-compared-to-git-or-mercurial - Adam Dymitruk
msysgit在Windows下使用非常愉快,可以提供Bash。现在您可以跨越OSX、Linux和Windows进行跨平台操作了。 - Adam Dymitruk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接