使用 SONAME 的库的版本控制最佳实践
Version control best practices for libraries with SONAME
我正在为 Linux 创建包和库,其中在文件名 soname 中包含包或库版本。
使用版本控制处理此问题的当前最佳实践是什么?通常,版本控制将维护映射到用户工作区的版本化文件的存储库。
我们都知道歌舞:
//repo/myfile.txt#1 //ws/myfile.txt
但是当我使用版本库时,这会变得很麻烦。
//repo/libs/my-library.so.1.0#1 //ws/libs/my-library.so.1.0
//repo/libs/my-library.so.1.1#1 //ws/libs/my-library.so.1.1
. . .
//repo/libs/my-library.so.3.0#1 //ws/libs/my-library.so.3.0
当我在我的存储库上执行 get latest 时,我不一定需要包的每个版本,只是最新的。此外,版本控制系统的全部意义在于消除开发人员的这种麻烦。但是,用户在分发这些库时实际上需要版本文件名。
有没有办法告诉我的版本控制系统像这样执行映射?
//repo/libs/my-library.so#1 //ws/libs/my-library.so.1.0
//repo/libs/my-library.so#2 //ws/libs/my-library.so.1.1
. . .
//repo/libs/my-library.so#30 //ws/libs/my-library.so.3.0
在我特定的主观用例中,我使用 Perforce 进行版本控制。然而,我主要对一般的最佳实践感到好奇,而不仅仅是 Perforce 的 hack 来实现这一点,如果它完全是一种愚蠢的方法。
由于 soname 描述的是库接口的版本,而不是其实现,因此它大致对应于软件生命周期管理方面的“发布”。在大多数版本控制系统(包括 Perforce)中,这意味着您希望将其表示为某种形式的分支(每个分支可能具有对应于实现更改的任意数量的修订),而不是将每个单独的 revision/commit 映射到其自己的soname.
Perforce 的文件间分支系统使建模变得非常容易——当需要修改 soname 时,您将文件分支到它的新名称,就像您自然会使用 cp
一样,如果您没有使用版本控制。 (与 git 不同,您不必将整个存储库作为一个单元进行分支;如果需要,每个单独的文件都可以有自己的分支结构,并且变体在客户端文件系统和回购。)
如果您当前的项目需要一个特定的 soname 变体,并且您不想在同步时拉下所有其他变体,请将您的客户端视图设置为仅映射您想要的那个。
我正在为 Linux 创建包和库,其中在文件名 soname 中包含包或库版本。
使用版本控制处理此问题的当前最佳实践是什么?通常,版本控制将维护映射到用户工作区的版本化文件的存储库。
我们都知道歌舞:
//repo/myfile.txt#1 //ws/myfile.txt
但是当我使用版本库时,这会变得很麻烦。
//repo/libs/my-library.so.1.0#1 //ws/libs/my-library.so.1.0
//repo/libs/my-library.so.1.1#1 //ws/libs/my-library.so.1.1
. . .
//repo/libs/my-library.so.3.0#1 //ws/libs/my-library.so.3.0
当我在我的存储库上执行 get latest 时,我不一定需要包的每个版本,只是最新的。此外,版本控制系统的全部意义在于消除开发人员的这种麻烦。但是,用户在分发这些库时实际上需要版本文件名。
有没有办法告诉我的版本控制系统像这样执行映射?
//repo/libs/my-library.so#1 //ws/libs/my-library.so.1.0
//repo/libs/my-library.so#2 //ws/libs/my-library.so.1.1
. . .
//repo/libs/my-library.so#30 //ws/libs/my-library.so.3.0
在我特定的主观用例中,我使用 Perforce 进行版本控制。然而,我主要对一般的最佳实践感到好奇,而不仅仅是 Perforce 的 hack 来实现这一点,如果它完全是一种愚蠢的方法。
由于 soname 描述的是库接口的版本,而不是其实现,因此它大致对应于软件生命周期管理方面的“发布”。在大多数版本控制系统(包括 Perforce)中,这意味着您希望将其表示为某种形式的分支(每个分支可能具有对应于实现更改的任意数量的修订),而不是将每个单独的 revision/commit 映射到其自己的soname.
Perforce 的文件间分支系统使建模变得非常容易——当需要修改 soname 时,您将文件分支到它的新名称,就像您自然会使用 cp
一样,如果您没有使用版本控制。 (与 git 不同,您不必将整个存储库作为一个单元进行分支;如果需要,每个单独的文件都可以有自己的分支结构,并且变体在客户端文件系统和回购。)
如果您当前的项目需要一个特定的 soname 变体,并且您不想在同步时拉下所有其他变体,请将您的客户端视图设置为仅映射您想要的那个。