2009-07-05 53 views
5

我必须开发两个共享90%相同代码的Django项目,但在几个应用程序,模板和模型本身中有一些变化。在Git中管理项目变体的最佳实践?

我使用Git进行分布式源代码管理。

我的要求是:

  • 这两个项目

    共同的代码在一个地方(PROJECT1的开发环境)

  • 周期性,这是合并到第二个项目的开发环境(Project2的开发)

  • 变化不容易封装在应用程序中。 (例如,有应用程序。如“配置文件”,这PROJECT1和Project2中产生的,而是针对其改变这里还有一个持续的共同演进)

  • 两个PROJECT1和Project2的具有公共仓库,这样我就可以与他人

  • 合作
  • 同样,Project1和Project2应该有开发,演示,分段和生产服务器。

  • 但是,两种情况下公共存储库都不在同一台服务器上。所以,例如,当我在Project1中开发时,我希望能够“推送”到我的github服务器,但是没有Project2的东西去那里。

  • 有文件,如local_settings.py这是PROJECT1和Project2的之间完全不同,但应该多开发者之间共享的每个项目

那么什么是管理这种情况的最好方法?

看起来很理想的东西就像是“过滤拉”,而不是.gitignore说“完全忽略这个文件”,我可以说“从回购站拉时忽略此文件”我看不到任何非常类似于文档中的内容,但可能会有类似的东西?

回答

0

我会做第三次回购,我会放置项目共享的代码。然后,Project1和Project2将拥有自己的回购,并且可以从该“共享”第三个回购中拉出。

我认为你的“过滤拉”的想法会使人难以理解。

+0

您好,我想过一个常见的回购,但我认为这不足够。 (正如在我仍然需要在Project1和Project2仓库中开发(错误修复),并希望将常见修复推回到常见的仓库。问题是我想部分推回,而不会让git认为常见的回购已过期 或者这是错误的吗 – interstar 2009-07-05 16:12:20

4

将通用代码移到其自己的库中,并使其成为这两个项目的依赖项。这不是版本控制的问题,而是代码重用,设计和消除重复的问题。

+0

Hi Esko。这不是一个真正的库,它是一个Django/Pinax站点,这些变体必然分散在几个不同的应用程序中。常见的或者在一个地方有什么不同的地方 – interstar 2009-07-05 16:06:24

4

考虑到这是一个Django/Pinax网站,里面有几个不同的应用分散在各地的变种,我不建议使用的子模块。

变体应该在project1分支和project2分支中独立管理,不需要“过滤”gitignore结果。

如果您发现了一些非常常见的代码,他们可能会在你可以再“子树合并”到Project和项目2库(子树合并策略是illustrated in this SO answer的意思)第三回购结束

2

您可以使用两种不同的git分支进行开发。当你在另一个共同的变化中做出改变时,只需将它们翻过来。你也可以推拉特定的分支,这样就没有人需要知道你在同时处理两个分支。