Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/25.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_Git_Version Control - Fatal编程技术网

Svn 在源代码管理系统中管理程序所有权的有效方法是什么?

Svn 在源代码管理系统中管理程序所有权的有效方法是什么?,svn,git,version-control,Svn,Git,Version Control,使用SVN或Git时,我想到了使用目录结构作为元数据占位符。每个团队在共享存储库中都有一个代码目录。我想得越多,想法就越糟糕。对我来说这似乎是个坏主意的原因是团队不是静态实体。团队可以消失、分裂、重组,甚至获得一个新名称。我知道我正在考虑使用一个唯一标识符,可能还有一个外部数据库。我甚至可能要面对一个每个团队的存储库来适当地管理访问权限。在一个有200个或更多团队的情况下,我最好是在一个外部数据库中保持所有权,还是有一些工具和实践可以向我学习?以下是我的经验。按照相关技术路线对齐目录结构。这可能

使用SVN或Git时,我想到了使用目录结构作为元数据占位符。每个团队在共享存储库中都有一个代码目录。我想得越多,想法就越糟糕。对我来说这似乎是个坏主意的原因是团队不是静态实体。团队可以消失、分裂、重组,甚至获得一个新名称。我知道我正在考虑使用一个唯一标识符,可能还有一个外部数据库。我甚至可能要面对一个每个团队的存储库来适当地管理访问权限。在一个有200个或更多团队的情况下,我最好是在一个外部数据库中保持所有权,还是有一些工具和实践可以向我学习?

以下是我的经验。按照相关技术路线对齐目录结构。这可能是基于团队的。使用数据库或其他工具将二进制文件或源文件映射到团队成员。然后,当事情发生变化时,您所要做的就是更新数据库


如果你把根弄得很宽,你以后要做的重组就比把它弄小要少

读了你的问题,我有了一个想法,可能对你有用,也可能对你没用,这只是突然出现在我脑海中的一个闪现的想法;-:

与linux“devtodo”工具一样,您可以在每个目录中为元数据创建一个文件。对于devtodo,文件名为“.todo” 该元数据文件可能是一个数据库文件,此时团队成员都在其中。 该元数据文件可能在控制版本中。 该元数据文件可以作为sql连接操作与其他文件(即团队中的所有成员)连接。 可以定义一组脚本或shell别名来编写更常用的nosql命令行。
几行:git或svn中的关系数据库文件与元数据;而且没有数据库服务器。

您要存储的元数据将用于保存有关文件和使用资源的团队成员的信息。假设您在存储库中拥有成熟的资源处理语义,如签入注释等,一种策略可能是识别您正在查看的元数据,并使用某种索引工具/api对其进行索引。存储库元数据中有大量可供检索和索引的信息。如果需要更精细的控制,可以使用定制的预提交挂钩强制团队成员在签入时放置所需的信息。您所拥有的元数据存储库将为查询/搜索用户和资源提供良好的控制。该索引可以由脚本每天/每周执行。

Git不具备很好的访问权限。要开始处理它,您需要使用gitosis,然后在git钩子中编写一些代码。关于这件事,我有个好主意

然后,正如您所说,您需要一个数据库来处理关于哪个用户可以访问哪个存储库的信息。也就是说,您需要在git中将这些内容拆分为单独的存储库,因为您无法保护git中的单个文件或目录。不久前我写了一篇关于这个的短文。超级项目在未来可能会有所帮助,但这一概念仍在建设中,没有很好的定义


在像RationalClearCase这样的高级和昂贵的SCM工具中,您有更好的工具来实现这一点。例如,您可以创建组件并定义每个组件的用户权限。不幸的是,即使是这些工具,如果情况发生很大变化,也需要手动进行大量更新。但是,如果用户权限是您所需要的全部,那么编写自己的工具比购买这些怪物要划算得多。

以下是我为您指明正确方向的最佳尝试。一般来说:

按照系统的组件以通常的方式组织源代码。确保每个组件都可以独立配置访问控制,例如在git中,这意味着每个组件都有单独的存储库,如Makis所说

目前,管理访问权限通常与LDAP结合使用。配置您的工具,以便以常规方式利用组织的LDAP目录。对于git,这通常是使用系统上的现有帐户来完成的,这些帐户可能由LDAP支持,也可能不由LDAP支持

以通常的方式使用版本控制系统的内置访问控制机制,允许每个团队根据需要读取或写入每个组件。如果此权限矩阵变得过于繁琐而无法手动管理,请构建一个自定义机制以在更高级别对其进行控制和/或自动化大规模更新


如果您没有组件体系结构、集中式用户帐户或VCS的访问控制,那么在解决更重要的问题之前,请放弃此问题。

为每个团队提供自己的存储库。

好的,如果我正确理解了您的问题,那么您就有了 1.骡子 iple计划 2.处理源代码的多个团队 3.需要跟踪哪些团队正在处理哪些代码

您不需要指定每次是在一个程序上工作,还是在该程序上工作 可以由多个团队协同工作

我不是GIT或SVN用户,我的主要经验是perforce,但我将尝试并概述一些适用于任何大型企业级SCM系统的最佳实践

有一个主线代码分支-这将是你的“干净”区域。 为每个团队创建一个沙箱分支 使用清晰的命名约定 每个团队的沙箱将只对该沙箱具有完全访问权限,而不对任何其他团队的沙箱具有完全访问权限

因此,在存储库布局方面,我们可以这样做

密码 主线 方案1 方案2 团队 teamA 方案1 团队B 方案2 然后,每个团队将他们想要使用的东西的代码分支到他们的团队沙箱中,并且可以自由地签入他们喜欢的任何东西。如果他们弄脏了自己的树枝,那就好了,这是他们自己的问题,他们需要在自己之间进行分类,并按照自己认为合适的方式运行

一旦一个团队感到满意,他们就有了一个好的下一次代码迭代,然后只有团队负责人 有权将变更升级并整合到主线

任何像样的SCM都会向您显示集成历史,因此对于提升到主线中的每个更改,您都会知道哪个团队集成了,以及何时集成

如果一个团队解散,那么如果您愿意,您可以放弃分支机构 如果团队名称更改,则为新团队创建一个新的sanbox分支,然后将旧团队沙箱中的更改集成到新沙箱中

在perforce上,你可以做一些时髦的事情,比如反向集成,这真的很好,因为你可以把主线拉到你的分支中,进行任何合并,然后集成回主线。只要代码上没有其他更改,那么集成就变成了一个直接副本。这样做的好处是将“断开的”主线向下推入沙箱,并保持主线清洁

总之,这是我的一些想法。SCM管理本身就是一个完整的领域,我相信很多其他人都会有更好的解决方案,但上面的方法对我很有效

有关此复杂领域的一些有用链接:

如果它是一个单独的项目,只需给它一个自己的存储库。

不清楚您在这里试图解决什么问题。我很清楚。。。我有90000个项目,我想把它们分配给团队。。。并存储元数据。团队改变。。。等等。为什么需要单独的存储库来管理权限?使用SVN,您可以在树中的任何位置分配权限,而不仅仅是在根级别。这个问题太广泛了,毫无意义。您可能会问,管理软件的有效方法是什么?如前所述,您的问题的答案是“在外部数据库中的所有权”或“是否有一些工具和做法”是肯定的。在文件共享而不是数据库中拥有数据会使读取和更新变得困难。。。我不认为这个想法可以很好地扩展。解决方案变得无法管理,因为不同版本的程序属于不同的团队,而这可能不是您想要的。我认为所有权必须在存储库之外。您刚才用该评论回答了自己的问题。使用目录作为元数据做同样的事情,所以如果这是一个问题,你唯一能做的就是将它保存到外部