Git仓库结构和模块化(Git repository structure and modularit

2019-10-17 16:09发布

和我一起工作的团队决定搬走从SVN向Git的,这是我认为是一件好事。 我负责迁移和重新构造当前的svn布局。

我们目前在SVN是这样的:

/externals  (external libs copyed there like cunit, etc.)
/include    (public headers only)
    /libA
    /libB
    /libC
/source     (source and private headers)
    /libA
    /libB
    /libC
/tests      (tests projects)
    /libA
    /libB
    /libC

在做关于Git的一些研究,我发现了一个模块化的方法是首选。 所以,我想出了这个结构:

/externals      (repo externals.git)
/libA           (repo libA.git)
   /include
   /source
   /tests
/libB           (repo libB.git)
    ...

不过,我觉得这种断裂的模块化和具有不同的库, 如果他们互相依赖的点(libB需要力霸,LIBD需要力霸)和libc()。 你需要离开libB的范围力霸添加作为一个依赖。

然后,我应该添加一个“依赖”文件夹中的每一个库,并将其加为子模块存在,或者我应该保持原始的git的布局?

什么是这里的最佳方法?

谢谢

Answer 1:

更可靠的方法是让每个模块独立的项目生命周期。 此外,当你发布一个库,你应该保持的版本号。 依赖信息应该知道哪些模块和库版本,如libB:1.0.0需要力霸:1.2.5,LIBD:3.4.5需要力霸:1.3.7)和libc(:5.3.9。 有依赖关系管理系统,如maven在Java世界中, deb在linux distributives, nuget在C#。 它们允许跟踪确切的版本并查看版本号,比如冲突,如果你有一个对myApp:6.2.5这就需要libB:1.0.0和LIBD:3.4.5这意味着对myApp依赖于两个不同的(可能不兼容)版本力霸的 - 1.2.5和1.3.7。

当你可以有这将改变构建模块和重建相关性以及运行测试,以非常快的追捕兼容性问题Continious集成服务器。

换句话说,该版本依赖管理没有版本控制系统的任务,如混帐或svn,最好使用专用工具。 但是你可以使用git的子模块或SVN-的外部来处理它,但它并不能很好地工作。



文章来源: Git repository structure and modularity