项目中处理子项目的方法全解析
1. 背景与问题提出
在软件开发中,版本控制系统(VCS)起着至关重要的作用。像KDE(K Desktop Environment)项目,长期使用SVN进行版本管理,鼓励部分检出(partial checkouts)。然而,分布式版本控制系统如Git并不支持这种部分检出方式。因为在Git中,每次克隆都会下载所有文件的所有版本,每个Git仓库都是完整的副本。
目前,KDE项目正考虑从SVN迁移到Git,子模块成为争议焦点。将整个KDE仓库导入Git后体积仍然有数GB,每个贡献者即便只处理一个应用,也得拥有所有数据副本。而且,每个应用依赖多个KDE核心库,不能简单地为每个应用创建一个仓库。
2. 直接导入代码到项目的方法
- 优点
- 不会意外使用错误的库版本。
- 简单易懂,仅依赖日常Git功能。
- 无论外部库使用何种VCS管理,操作方式相同。
- 应用仓库自成一体,
git clone时包含应用所需的一切。 - 即使没有库仓库的提交权限,也能轻松对库应用特定补丁。
- 应用分支时,库也会相应分支。
- 使用
git pull -s subtree命令结合子树合并策略,更新库版本与更新项目其他部分一样简单。
- 缺点
- 每个导入相同库