我们有一个非常大的古老的扁平CVS仓库,格式示例如下。我已将每个子目录作为自己的git仓库导入,并保留了完整的历史记录。
.
├── liba
├── libb
├── libc
├── prog1
├── prog2
└── prog3
假设这三个程序使用库的方式如下:
.
├── prog1
│ ├── liba
│ └── libb
├── prog2
│ ├── libb
│ └── libc
└── prog3
├── liba
└── libc
由于CVS允许对树的部分进行标记,我们会使用版本标记来标记每个库和程序的发布。例如:
liba_4x23
,prog3_2x22
。我们还会在程序中标记其使用的每个库的所有版本,即
liba_3x19
libc_7x88
。如果我们发布一个新版本的程序没有附带库标记,则该标记将保留其所用最早版本程序的标记。
现在由于git导入的方式,它实际上会到达程序的最新版本(不太担心这一点)
Git子模块似乎是这个问题的非常好的解决方案-程序的某个版本可以被检出并将所有正确版本的库作为子模块引入。
现在由于所有当前程序都处于不同的库发布版本中,因此我需要在特定版本中重新装配子模块。
prog1
与libb_4x50
链接prog2
与libb_4x70
链接
libb_4x70
是最新版本,则prog2
的示例很容易。git checkout prog2
cd prog2
git submodule add libb
.... done
如何将版本为4x50的libb
添加到prog1
中?
如果您有更好的想法,欢迎提出其他建议 :-)
我们可能还想做的是回退程序的3个版本,并为每个版本设置适当的子模块。这样可以实现向后兼容,并向管理层展示其工作原理。