如何处理依赖于单独框架或库的非编译项目的源代码管理设置?例如,项目A使用框架B.项目A是否还应在其存储库中包含来自框架B的代码?有没有办法从不同的存储库自动包含它,还是我必须手动更新它?这种情况通常采用哪些一般方法?假设我控制了项目A和框架B的存储库,并且没有编译两者的源代码。
非常感谢任何资源或建议。我目前正在使用Subversion(在一个非常基础的层面上),但我想切换到Mercurial,以便我可以用Fogbugz试用Kiln。
编辑:在Mercurial中,你会使用父存储库来实现这个功能吗?
答案 0 :(得分:2)
如果您想使用subversion并且需要包含来自不同存储库的代码,Subversion Externals可能是一个选项。
但是,如果您正在处理可编译代码,那么最好设置一个只获取所需二进制文件的构建过程。像Maven这样的构建工具可以帮助您。
答案 1 :(得分:1)
大多数时候,我尝试在subversion中包含构建项目所需的所有内容。这是使用C#和Visual Studio,因此我的大部分依赖项都是dll。约定在其他环境中可能会有所不同。
这通常是我布置新项目的方式:
这种方式可以由新开发人员检查和构建,而不会有太多麻烦。在过去,他们过去常常使用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中会更容易。