Git与ClearCase中的只读组件有什么相同之处?

jst*_*ker 5 git clearcase git-submodules

我的公司正在将我们的版本控制工具从Rational ClearCase更改为Git.我们有以下开发方案,我们很好奇Git是否有适当的模式来实现我们在ClearCase中的相​​同行为.

以下是关于我们情况的一些基本观点:

  1. 我们有许多独立的应用程序.我们称之为AppA,AppB和AppC.
  2. 我们还有一些所有项目共有的文件(构建脚本等).我们称之为工具.
  3. 对于AppA,AppB或AppC代码的任何给定剪切,我们需要特定的工具代码剪切.
  4. 我们的大多数开发人员从不修改工具代码.

对于ClearCase,我们这样建模:

组件:app_a,app_b,app_c,工具

项目:AppA,AppB,AppC,工具

Project AppA包括app_a作为读/写组件,工具作为只读组件.

Project AppB包括app_b作为读/写组件和工具作为只读组件.

Project AppC包括app_c作为读/写组件和工具作为只读组件.

项目工具包括作为读/写组件的工具.

App*项目的每个基线都引用app_*和工具组件的基线.当开发人员重新定义到建议的基线时,他们会从两个组件中获取更改.

对于Git,我们认为子模块可能是最接近正确答案的东西.但是,在提取/重新定位存储库时,听起来需要额外的步骤来更新子模块代码.理想情况下,我们希望透明.此外,我们不一定关心从父存储库的角度知道子模块中发生了什么变化; 我们只关心整个子模块的某个时间点.

Von*_*onC 4

首先,请务必了解 ClearCase 和 git 中(类似 UCM)配置之间的区别(请参阅“灵活分支与静态分支(GIT 与 Clearcase/Accurev) ”)。
在查看ClearCase 和 Git 之间的差异时,每个 UCM 组件必须在 Git 中表示为存储库。

子模块如果修改则需要额外的步骤,如“子模块的真实本质”中所述。
但它们记录了一个特定的 SHA1,这正是您拉取每个“ APP”时所需要的。
gitslave可以让您与 ' ' 保持Tools更紧密的联系Appx,但我认为它不适合您的场景。

请注意,使用子模块将:

  • 使 ' ' 成为 ' 'Tools的子目录APPx
  • 使其可修改。
    git 没有“只读”组件:如果您可以访问存储库,则可以推送/拉取。
    如果您确实需要强制执行读取访问,那么您需要添加一个额外的“授权层”,称为gitolite