gpt4 book ai didi

git - 将 'CVS era' repo 转换为带有子模块的 git repo

转载 作者:太空狗 更新时间:2023-10-29 14:01:43 26 4
gpt4 key购买 nike

我们有一个非常大的古老的平面 CVS 存储库,其格式示例如下。我已将每个子目录导入为具有完整历史记录的自己的 git 存储库。

.
├── liba
├── libb
├── libc
├── prog1
├── prog2
└── prog3

假设这 3 个程序按以下方式使用库:

.
├── prog1
│   ├── liba
│   └── libb
├── prog2
│   ├── libb
│   └── libc
└── prog3
├── liba
└── libc

因为 CVS 允许标记树的一部分 - 我们用版本标签标记每个库和程序版本。例如 liba_4x23prog3_2x22

我们还用它在发布时使用的每个库版本标记程序(即 liba_3x19 libc_7x88)

如果我们发布一个没有库标签的程序的新版本——该标签将保留它所使用的程序的最早版本。
现在由于 git import 的工作方式 - 它实际上以最新版本的程序结束(不过不用担心)

Git 子模块似乎是一个非常好的解决方案 - 可以检查一个程序的版本,并将所有正确版本的库作为子模块引入。

现在由于所有当前程序都在不同版本的库中 - 我需要在特定版本上改进子模块。

  • prog1 链接到 libb_4x50
  • prog2 链接到 libb_4x70

假设 libb_4x70 是最新版本那么 prog2 的例子很简单

git checkout prog2
cd prog2
git submodule add libb
.... done

那么如何将标记有版本(未分支)4x50libb添加到prog1

如果您有更好的想法,其他建议将不胜感激:-)

我们可能还想做的是返回程序的第 3 个版本,并为每个版本设置适当的子模块。既可以向后兼容,也可以作为管理其工作方式的示例。

最佳答案

子模块(如 explained here)的想法是在父仓库中记录特定的提交。

所以您需要做的就是,在添加 libb 之后,检查正确的标签,然后在父仓库中记录新状态:

git checkout prog1
cd prog1
git submodule add libb
cd lib
git checkout libb_4x50 # make sure to make a branch
# if you want to do any modification
# based on libb_4x50,
cd ..
git add -A .
git commit -m "fix correct libb version"

(对于“分离的HEAD”注释,参见“git submodule update * deletes uncommitted files”)

关于git - 将 'CVS era' repo 转换为带有子模块的 git repo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9305293/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com