源控制依赖关系的最佳实践

时间:2010-03-07 21:53:52

标签: svn version-control mercurial dependencies

如何处理依赖于单独框架或库的非编译项目的源代码管理设置?例如,项目A使用框架B.项目A是否还应在其存储库中包含来自框架B的代码?有没有办法从不同的存储库自动包含它,还是我必须手动更新它?这种情况通常采用哪些一般方法?假设我控制了项目A和框架B的存储库,并且没有编译两者的源代码。

非常感谢任何资源或建议。我目前正在使用Subversion(在一个非常基础的层面上),但我想切换到Mercurial,以便我可以用Fogbugz试用Kiln。

编辑:在Mercurial中,你会使用父存储库来实现这个功能吗?

4 个答案:

答案 0 :(得分:2)

如果您想使用subversion并且需要包含来自不同存储库的代码,Subversion Externals可能是一个选项。

但是,如果您正在处理可编译代码,那么最好设置一个只获取所需二进制文件的构建过程。像Maven这样的构建工具可以帮助您。

答案 1 :(得分:1)

大多数时候,我尝试在subversion中包含构建项目所需的所有内容。这是使用C#和Visual Studio,因此我的大部分依赖项都是dll。约定在其他环境中可能会有所不同。

这通常是我布置新项目的方式:

  • REF
    • SomeOpenSourceProject.dll
    • SomePurchasedComponent.dll
  • MyProjectA
    • MyProjectA.csproj (引用.. \ ref \ SomeOpenSourceProject.dll)
  • MyProjectB
  • MyWeb (引用.. \ ref \ SomePurchasedComponent.dll)
  • MyApplication.sln

这种方式可以由新开发人员检查和构建,而不会有太多麻烦。在过去,他们过去常常使用dll的网络共享,但是由于不同的项目使用不同的版本,如果你想回到subversion或branch或者其他任何东西,那就很烦人了,很难跟踪。这种结构很好地解决了这些问题。

答案 2 :(得分:1)

我做的事与David Hogue非常相似,只是看起来像这样:

- lib (anything used IN the software)
    - purchased_component.dll
    - internal_library.dll
    - icon_set
        - icon1.ico...
- tools (anything used to BUILD the software)
    - nunit.framework.dll
    - settings.stylecop
    - settings.fxcop
- src (the software itself)
    - myapp.sln

此设置的大部分灵感来自tree surgeon(现在已经过时了)

答案 3 :(得分:0)

如果B是一个开源项目,并且你想用A编译它,我建议你试试vendor drop技术。这样你可以保留自己的补丁。

如果B是您公司的专有代码,并且您不想编译它,那么将已编译的二进制文件复制到A'repo中会更容易。