我必须开发两个共享90%相同代码的Django项目,但在几个应用程序,模板和模型本身中有一些变化。
我正在使用Git进行分布式源代码控制。
我的要求是:
两个项目的通用代码都是在一个地方开发的(Project1的开发环境)
定期将其合并到第二个项目(Project2)的开发环境中
这些变体不容易封装在应用中。 (例如,有些应用程序。例如“个人资料”,它们在Project1和Project2之间有所不同,但也存在持续的共同演变)
Project1和Project2都有公共存储库,因此我可以与其他人协作
同样,Project1和Project2应该有开发,演示,登台和生产服务器。
但是,在这两种情况下,公共存储库都不在同一台服务器上。所以,例如,当我在Project1中开发时,我希望能够“推送”到我的github服务器,但没有Project2的东西去那里。
有一些文件,例如local_settings.py,它们在Project1和Project2之间完全不同,但应该在每个项目的多个开发者之间共享
那么管理这种情况的最佳方法是什么?
似乎理想的东西就像是“过滤拉”而不是.gitignore说“完全忽略这个文件”,我可以说“从那个回购中拉出来时忽略这个文件”我看不到任何东西非常喜欢文档中的内容,但可能有类似的内容吗?
答案 0 :(得分:4)
将公共代码移动到自己的库中,并使其成为这两个项目的依赖项。这不是版本控制的问题,而是代码重用,设计和消除重复的问题。
答案 1 :(得分:4)
考虑到它是一个Django / Pinax站点,变种散布在几个不同的应用程序中,我不建议使用子模块。
应该在project1 branch和project2分支中独立管理变体,无需“过滤”gitignore结果。
如果您确定了一些非常常见的代码,它们最终可能会在第三个仓库中“子树合并”到project1和project2存储库(子树合并策略的含义为illustrated in this SO answer)
答案 2 :(得分:2)
您可以使用两个不同的git分支进行开发。当你对另一个共同进行更改时,只需git-cherrypick就可以了。你也可以推送和拉出特定的分支,这样就不会有人知道你同时在这两个分支上工作。
答案 3 :(得分:1)
答案 4 :(得分:0)
我会在第三个回购中放置Projects共享的代码。然后Project1和Project2将拥有自己的回购,他们可以从“共享”第三个回购中获取。
我认为你对“过滤拉力”的想法会让人难以理解。