我一直想知道如何将两个或多个项目中使用的积极开发的公共库存储在版本控制中。我想它的处理方式可能与第三方库不同,因为内部库更有可能获得应该在版本控制中分发给许多项目的热修复。
是否应将其二进制文件导入到更新时使用它的项目(非常类似于第三方库),或者可以将其源代码与项目一起检出?是否可以在Subversion或其他版本控制系统中引用其他版本控制的路径?
我现在正在一个项目中工作,该项目具有驻留在Subversion其他地方的公共库(并在许多项目中使用),因此在项目中检查,因此在这个项目中对它们所做的任何更改都不会反映在它们的“真实”中库。我将建议对此进行一些更改,但我想了解处理这些公共库的最佳实践是什么。
答案 0 :(得分:6)
正如其他人已经提到的那样,SVN's externals是一个很好的方法。通过它们,您可以引用存储库的其他部分(或其他存储库,FTM)。项目可以引用其他(库)项目或某些分支或标记的头部。后两者用于稳定,前者用于始终与库最新。
我已经看到使用CVS的这些行的各种方案(这里没有外部,因此它是必须执行的签入脚本)和SVN。在我正在工作的公司中,我们为项目和共享库提供了不同的顶级文件夹。项目可以参考图书馆。在项目的主干上,这些外部引用通常是库的头部,标签和分支项目引用库的标签(或者有时是分支)。
答案 1 :(得分:1)
如果使用Subversion,我会使用svn:externals,它允许您创建一个Subversion repo与另一个的依赖关系。
答案 2 :(得分:1)
Subversion允许您通过使用svn:externals属性来引用其他路径。
也就是说,通常你会想要对项目状态进行更多的控制,而不仅仅是“采取共享库头中的任何东西”。在这种情况下,我建议将已编译的库二进制文件提交到使用它的每个其他项目中。这样,您就可以控制将库部署到每个客户端。
答案 3 :(得分:1)
是
将可重复使用的“子库”分开并提前分开。
看看开源实践:大多数事情都是拼凑在一起的许多小项目。
创建许多小项目。
避免签入二进制文件。再次,遵循开源实践。保持来源颠覆。
构建二进制文件并将它们放在与源不同的“项目共享”目录中。
答案 4 :(得分:1)
处理此问题的正确工具是Maven。最初是为Java开发的,它可以用于任何现有的编程语言。
Maven在您的计算机上创建一个存储库,其中包含所有模块。您还可以创建公共模块存储库,允许其他人从那里下载模块。
每个模块都有一个自动解析的依赖项列表(读取下载)。在项目的构建阶段,适合您的编程语言插件会将所有依赖项放在特定的位置,以使源代码看到它们。
Maven是一个很棒的多功能工具,但它很难掌握,它只是减去。
答案 5 :(得分:1)
我们将SVN中的公共库代码保存在自己的项目文件夹中。我们还将二进制文件提交到另一个名为Dependencies的“项目”文件夹。我们使用svn:externals将所需的引用带入项目中。
答案 6 :(得分:1)
我甚至不理解这个问题。如果foo依赖于libbar,为什么要在foo的VCS中保留libbar的源代码呢?您可以链接到libbar或导入条形模块(如果适用于该语言)。为什么要混淆项目的源代码树?我的“你好,世界!”项目取决于libc。我也是“你好,多莉!”项目。这两个项目都没有将libc源保留在其代码库中。这样做会很疯狂。为什么在这方面处理内部库与第三方库有什么不同?简而言之,最佳做法是:不要这样做。如果您的库具有需要传播到项目的热修复,则使用动态链接。