7

我们的开发使用了大量开源代码,我试图找出管理这些外部依赖项的最佳方法。

我们目前的配置:

  • 我们正在为 linux 和 windows 开发
  • 我们将 svn 用于我们自己的代码
  • 外部依赖项(boost、log4cpp 等)不存储在 svn 中。相反,我将它们放在 ./extern (或 Windows 上的 c:\extern )下。我不想将它们放在我们的存储库中,因为我无法以这种方式更新它们。其中一些正在不断更新。

我的问题

  • 如果我需要修改外部代码怎么办?目前我已经在我的 svn 存储库中创建了一个名为 extern_hacks 的文件夹,这就是我放置修改后的外部代码的地方。然后我将文件链接(或在 Windows 上复制)到外部目录结构中。这个解决方案是有问题的,因为很难跟踪复制文件,并且当文件位于两个存储库中时很难从 svn 更新(我的用于修改的文件,原始存储库说 sourceforge)

  • 如何管理外部依赖的版本?

我很想听听其他人如何处理这些问题。谢谢。

4

5 回答 5

6

我将它们保存在 svn 中,并将它们作为供应商分支进行管理。让它们在外部保持松散使得很难回到以前的构建,或者修复以前构建中的错误(特别是如果错误来自对外部依赖项的更改)

将它们保存在 svn 中为我省去了很多麻烦,还可以让您获得一个能够快速处理您的代码库的新工作站。

于 2008-10-07T16:47:56.170 回答
2

我不明白你为什么说

我不想将它们放在我们的存储库中,因为我无法以这种方式更新它们。其中一些正在不断更新。

你真的需要

  1. 在源代码管理中包含外部依赖项并定期更新它们,然后测试、测试、测试。

  2. 协调您的构建过程与外部依赖项的更新。

如果您的代码依赖于某些东西,那么您确实需要控制它何时更新/修改。在这些依赖项可以随时更新的空间中编码太痛苦了,因为您无疑会发现。我个人更喜欢选项1。

于 2008-10-07T16:45:20.183 回答
1

当我不得不做这样的事情时,我将外部源添加为外部,然后对其应用补丁。该补丁包含我对外部源的修改。所以,我实际上只对我的补丁进行版本控制。大多数情况下,如果外部代码没有“戏剧性”的变化,这是可行的。

于 2008-10-07T16:50:59.843 回答
0

你考虑过Maven吗?它是一个构建系统,对管理依赖项具有出色的支持。对于每个项目,您可以在 xml 文件中指定所需的依赖项作为该项目的一部分。外部库保存在依赖库(在我们的例子中为Artifactory)中,它与您的版本控制系统分开,可以只是一个网络驱动器。它还允许管理不同版本的项目。

于 2008-10-07T16:50:06.180 回答
0

我会谨慎考虑 Maven,因为:

  • 它是系统中的另一个存储库,您已经有一个带有当前版本控制系统的存储库;
  • 它(Maven)基于每个开发人员拥有的唯一“通用版本控制”,即文件系统(这意味着没有元数据或附加到文件的属性,没有关于谁修改了什么以及何时修改的适当历史)

现在,当与第三方打交道时,您可以考虑将它们放在您的版本控制系统中,但以打包的方式:即以非常紧凑的方式,压缩源和文档,以尽可能少地保存文件

这样,您将轻松管理那些(许多)第三方库的部署,因为要部署的文件数量很少。

另外,将它们置于源代码控制下允许您创建一个分支(例如,“hack”分支),您将在其中存储被破解库的打包(或压缩)版本。

您可以以外部方式存储的是代表这些库的未压缩的完整文件集,因为它们没有真正的开发,或者只是准时破解:通常,您的工作不是开发现有的库,而是使用它们(甚至有点修改)用于更快地实现项目的某些功能。

如果您需要在某些时候将某些破解版本与某些官方版本进行比较,您只需从 svn 中提取适当的“破解”版本号,解压缩并与官方(和外部存储)版本进行比较(使用 winmerge例如)

于 2008-10-07T21:51:17.603 回答