git - DVCS如何构建具有大型集成代码库、多个项目共享大量通用代码的?

标签 git mercurial cvs dvcs

我有一个 cvs 存储库,主要是 java 代码。每个包都位于它自己的顶级目录中,就像这样,源代码以典型的 Java 方式布局。

$CVSROOT/my.domain.module1/src/my/domain/module1
$CVSROOT/my.domain.module2/src/my.domain/module2
$CVSROOT/my.domain.share1/src/my/domain/share1

这意味着我们可以编写构建脚本,轻松地从存储库中提取任何包组合,以构建特定的可交付软件。

因此,如果我 check out my.domain.module1,该模块中的构建脚本也会引入 my.domain.share1。这确实促进了代码重用。

这种方法有优点也有缺点 - 今天对此并不真正感兴趣 - 只要考虑到这种方法在 mercurial 或 git 中复制是可能/明智的。

据我所知,您需要为每个包定义一个完整的存储库,或者每次都 check out 并提交整个存储库!

最佳答案

一般来说,对于 DVCS,每个组件一个 repo 是合适的大小。由于它们拥有各自组件的所有历史记录,因此任何组件只有一个存储库将无法很好地扩展。

Git 将使用 submodules ,Mercurial Hg 将使用 subrepos .

这个想法是定义一个 super 项目(本身就是一个 repo),它将:

  • 有自己的文件
  • 有一些自己的子目录是子模块组件的根目录对于给定的引用(SHA1,标签,标签)

如果您直接在其中一个子组件中对主项目进行一些修改,则必须首先提交这些子库,然后在您的主项目中提交该主项目(它不会包含 所有数据,只有它自己的数据,以及一些指向你之前提交的新子模块引用的指针)

关于git - DVCS如何构建具有大型集成代码库、多个项目共享大量通用代码的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2392404/

相关文章:

git - 使用 git,在命令行中临时从提交中排除已更改的跟踪文件

python - 在 Mac OS X 10.6 Snow Leopard 上安装 Mercurial

linux - 迁移到新的 cvs 服务器时没有这样的存储库

Git:如何在没有以前所有历史记录的情况下挑选提交

git - 使用 fork 的 git 存储库,除了我克隆了公共(public) repo URL,而不是私有(private) URL

git - 打断看似已挂断的 dcommit 调用是否安全?

mercurial - 仅通过复制整个目录来 "branch"本地 mercurial 存储库克隆是否安全?

mercurial - hgext.extdiff 默默地什么都不做

unix - 如何在 Unix 上使用 CVS

jenkins - 带有逗号v的cvs文件名