我有一个 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/