如何管理共享库?

时间:2008-10-07 15:22:21

标签: version-control

每次我创建一个项目时,我都会开发几个通用的例程/模块/库,我希望它能用于其他项目。

由于开发速度快,我不会花很多时间来完善这些模块 - 对于这个项目来说已经足够好了,并且有足够的记录和可隔离性,我可以很容易地将它们添加到另一个项目中。

到目前为止一切顺利。

现在,当我在另一个项目中使用它们时,我不可避免地要改进它们 - 要么添加新的功能/功能,修复bug,使它们更通用等等。

那时我有几个问题:

  • 我需要维护我正在处理的代码的模块中的更改
  • 我需要在中央“模块”存储库中维护相同的更改
  • 我需要确保更新的模块可用,但不能在旧项目中自动使用,有时甚至可用于我现在正在处理的现有项目。

你是如何管理的?当团队在不同项目中处理各种模块时,这些问题有何不同?

- 亚当

4 个答案:

答案 0 :(得分:11)

如果您对所有项目使用Subversion,则只需使用svn:externals:这允许一个存储库引用另一个存储库,可选择固定在特定修订版本中。例如,

svn://svn/shared
svn://svn/project1
  |- dir1
  |- dir2
  \- svn:externals "shared -r 3 svn://svn/shared"
svn://svn/project2
  |- dir3
  \- svn:externals "shared -r 5 svn://svn/shared"

将您的更改提交到svn://svn/shared,并在准备好后修改各个项目中的svn:externals属性。

否则,使用其他VCS,您可能只需在shared上保留一堆标记,每个项目使用shared一个,指向他们使用的版本。准备好后,将每个标签推进到更高版本。这需要手动更新每个项目的shared副本(让svn:externals很好的一件事就是它会自动发生)。

如果您为每个项目分配shared ......那么,这可行,但需要人力来维护和合并更改。

[编辑]

进一步参考:

请参阅External Definitions中的svn book获取有关svn:externals的详细信息,以及有关DVCS git-submodule tutorial中类似功能的git的详细信息。

答案 1 :(得分:1)

当然,正如PersistenceOfVision所说,使用版本控制,并保持每晚构建以确保您不会破坏旧项目。

答案 2 :(得分:0)

如果代码足够通用,你在多个项目中使用它,你是否有可能重新发明轮子?相反,如果您对现有库进行标准化,那么您将拥有经过充分测试和优化的代码,并且您将无需维护任何内容。

答案 3 :(得分:-1)

选择软件版本控制包...

例如:
SVN + TortoiseSVN是我们目前的解决方案。 (免费)
有些人更喜欢Visual Source Safe。 (不是免费的)