Вопрос по git – Лучшая практика для управления вариантами проекта в Git?

8

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

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

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

common code for both projects is developed in one place (Project1's development environment)

periodically this is merged into the development environment of the second project (Project2)

the variations are not easily encapsulated within apps. (eg. there are apps. such as "profiles" which vary between Project1 and Project2 but for which there's also an ongoing common evolution)

both Project1 and Project2 have public repositories, so that I can collaborate with others

similarly Project1 and Project2 ought to have development, demo, staging and production servers.

however, the public repository is not on the same server in both cases. So, for example, when I'm developing in Project1, I want to be able to "push" to my github server, but not have Project2 stuff going there.

there are files such as local_settings.py which are completely different between Project1 and Project2, but should be shared between multiple developers of each Project

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

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

Вы когда-нибудь находили решение для этого? Хотите попробовать и сделать что-то подобное сам? JDavies
Я ищу то же самое. Gerardo Buenrostro González

Ваш Ответ

5   ответов
4

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

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

Если вы идентифицируете некоторые действительно распространенные коды, они могут оказаться в третьем репо, который вы могли бы затем «объединить в поддерево». в репозитории project1 и project2 (значение стратегии слияния поддеревьевпроиллюстрировано в этом SO ответе)

2

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

4

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

Пожалуйста, приведите более подробные примеры того, что меняется. Я не знаком с приложениями Django.
Например, у нас может быть пользовательский «профиль». приложение, где шаблон профиля находится в / quot; /templates/profiles/profile.html" ;. Нам нужно сохранить небольшие различия между этим файлом в наших двух проектах. Но мы не хотим добавлять файл profile.html в .gitignore, потому что тогда изменения не будут распределены между разными разработчиками, работающими в этом проекте. interstar
Привет, Эско. Это не совсем библиотека. Это сайт Django / Pinax. Варианты обязательно разбросаны по нескольким различным приложениям. Нелегко инкапсулировать то, что обычно или что меняется, в пределах одного места. interstar
Дело в том, что различия в шаблонах могут зависеть от прихоти каждого проекта. Сегодня дизайнеры, клиенты и т. Д. Могут предпочесть, чтобы шаблон Project1 был разбит на три области с вкладками, тогда как Project2 показывает их как одну страницу прокрутки. Через месяц Project2 мог бы принять вкладки, но с другой библиотекой виджетов js. То, что меняется, может сильно отличаться. Константой является не то, что включает в себя шаблон, а то, что включает его. (И передает информацию в него.) interstar
Какие различия будет содержать шаблон profile.html? Какие способы предоставляет Django для абстрагирования этих различий в другой файл?
0

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

Я думаю, что ваша идея "отфильтрованной тяги" затруднит мантейн.

Похожие вопросы