2009-07-05 3 views
5

Мне нужно разработать два проекта Django, которые делят 90% одного и того же кода, но имеют несколько вариантов в нескольких приложениях, шаблонах и в самой модели.Лучшая практика управления вариантами проекта в Git?

Я использую Git для распределенного управления источником.

Мои требования таковы:

  • общий код для обоих проектов разрабатывается в одном месте (среда разработки project1 в)

  • периодически это сливается в среду разработки второго проекта (project2)

  • варианты не легко инкапсулируются в приложениях. (Например, есть приложения. Такие, как «профили», которые различаются между Проект1 и Project2, но для которых есть также постоянная общая эволюция)

  • как Project1 и Проект2 имеют публичные репозитории, так что я могу сотрудничать с другими

  • Аналогично, Project1 и Project2 должны иметь серверы разработки, демонстрации, постановки и производства.

  • Однако публичный репозиторий не находится на одном сервере в обоих случаях. Так, например, когда я развиваюсь в Project1, я хочу иметь возможность «нажимать» на мой сервер github, но у меня нет материалов Project2.

  • есть файлы, такие как local_settings.py, которые полностью отличаются от Проект1 и Project2, но должны быть разделены между несколькими разработчиками каждого проекта

Так что самый лучший способ управления этой ситуацией?

Казалось бы, идеально было бы что-то вроде «отфильтрованного тяги», где вместо .gitignore, говорящего «игнорировать этот файл целиком», могу сказать «проигнорировать этот файл, когда вытаскиваете из этого репо», я не мог видеть что-то подобное в документации, но может быть что-то подобное?

ответ

0

Я бы сделал третье репо, где я бы разместил код, который разделяет проекты. Тогда Project1 и Project2 будут иметь свое собственное репо, и они могут вырваться из этого «общего» третьего репо.

Я думаю, что ваша идея «отфильтрованного притяжения» затруднит работу с mantein.

+0

Hi Macarse, я думал об общем репо, но я не думаю, что этого достаточно. (Как и в, мне все равно нужно разработать исправление ошибок в репозиториях Project1 и Project2 и захочет вернуть общие исправления обратно к общему репо. Проблема в том, что я хочу частично отступить, не оставляя git, думая, что Или это неправильно? – interstar

4

Переведите общий код в свою библиотеку и сделайте его зависимым от этих двух проектов. Это не вопрос контроля версий, а вопрос повторного использования кода, разработки и устранения дублирования.

+0

Привет, Esko. Это не библиотека. Это сайт Django/Pinax. Варианты обязательно разбросаны по нескольким различным приложениям. Непросто инкапсулировать либо то, что общий или то, что меняется, в одном месте. – interstar

+0

Пожалуйста, дайте более подробные примеры того, что меняется. Я не знаком с приложениями Django. –

+0

Например, у нас может быть приложение «профили» пользователя, где шаблон шаблона живет в «/templates/profiles/profile.html». Мы должны поддерживать незначительные различия между этим файлом в наших двух проектах. Но мы не хотим добавлять pro file.html в .gitignore, потому что изменения не будут использоваться между разными разработчиками, работающими в этом проекте. – interstar

4

Учитывая это сайт Django/Pinax, с вариантами, разбросанных в нескольких различных приложениях, я бы не рекомендовал использовать подмодули.

Варианты должны управляться независимо в ветке project1 и ветке project2, устраняя необходимость «фильтровать» результат gitignore.

Если определить некоторые действительно общие коды, они могут в конечном итоге в третьем репо вы могли бы «поддерево объединенном» в project1 и project2 хранилищ (смысл поддерево стратегии слияния является illustrated in this SO answer)

2

Вы можете использовать два разные ветви git для развития. Когда вы вносите изменения в один, который является общим для другого, просто git-cherrypick их. Вы можете нажимать и натягивать определенные ветви, чтобы никто не нуждался в том, чтобы вы одновременно работали над обоими из них.

Смежные вопросы