版本控制:管理公共组件源

Dat*_*onk 2 git version-control mercurial bazaar

如何管理DVCS中的公共库源?

目前,我的团队使用Perforce来管理我们的软件项目.使用Perforce的"工作区映射"功能,我能够轻松地将公共库源映射到开发应用程序目录,以保持源管理和开发项目工作之间的转换透明.例如,Repository看起来像这样:


SCM树结构

    • 应用
      • ForumSite
      • AdminTool中
    • 共同
      • event.logger
      • json.parser
    • D b
      • 用户
      • SiteConfiguration

由于漂亮的P4映射功能,我们的开发人员可以使用工作空间映射以最有意义的形式为他们所处理的项目提取一整套源代码.典型的dev项目文件夹可能如下所示:


DEV项目文件夹

/projects
    /FALL-2009
        /ForumSite
            /deps
                /event.logger
                /json.parser
        /AdminTool
            /deps
                /event.logger
                /json.parser
        /Users-db
        /SiteConfiguration-db
    /FALL-2009-PATCH-01
        /json.parser
        /SiteConfiguration-db
    /FALL-2009-PATCH-02
        /AdminTool
            /deps
                /event.logger
                /json.parser
        /SiteConfiguration-db
Run Code Online (Sandbox Code Playgroud)

当dev编辑任何他/她的组件或应用程序中的源时,更改将映射回正确版本点的右源控件目录.这对开发人员来说是透明的,降低了管理的复杂性和设置新项目的时间.

我正在研究Git,Bazaar和Mercurial作为Perforce的潜在替代品.任何人都可以深入了解DVCS世界中常见组件源的处理方式吗?

Bri*_*ell 6

在Git中,您将git submodule用于此目的.

Git子模块作为对来自另一个存储库的修订的引用存储,以及提供URL以查找其他存储库的文件.当您执行a时git submodule update,Git将克隆引用的存储库的副本(或者您可以将其配置为指向不同URL的同一存储库的不同副本,因为它是DVCS,因此任何包含该存储库的存储库的克隆引用的修订版也可以工作),然后查看引用的修订版.

可悲的是,它并不像人们希望的那样无缝.检查父存储库中的新修订版实际上并未检出子模块; 你需要明确git submodule update地做到这一点.我们尝试将包装git pull; git submodule update作为单个命令,但是还有许多其他命令(例如git rebase)涉及检出文件,这些命令可能会使您陷入混乱状态,因为它们也不会更新子模块.一旦你熟悉子模块的工作方式,它就会全部解决,但它会产生一些摩擦.