Как управлять версиями нескольких зависимых проектов в одном каталоге (например, web2py, django)

Я хотел бы получить несколько советов по лучшей обработке и управлению проектами, которые имеют следующую структуру:

Из родительского проекта (совместно используемого многими проектами) мне нужно получить заданную структуру каталогов и файлы, т.е.

.
|-- modules/
|    |-- file_1_parent.py
|
|-- controllers/
     |-- file_2_parent.py

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

Тогда ситуация может выглядеть следующим образом (в скобках указаны имена проектов, которым принадлежат файлы/каталоги)

.
|-- modules/                  (parent project)
|    |-- file_1_parent.py     (parent project)
|    |-- file_1_child.py      (child project)
|
|-- controllers/              (parent project)
     |-- file_2_parent.py     (parent project)
     |-- file_2_child.py      (child project)

Чтобы быть конкретным, в моем случае родительским проектом является проект web2py/django, из которого я хочу получить несколько подпроектов.

Вопрос в том,

  • Как контролировать версии каждого проекта?
  • Должен ли я иметь репозиторий для родительского и дочернего проектов отдельно?
  • Должен ли я относиться к родительскому проекту как к некоторому пакету/библиотеке?

Я думал о следующих подходах:

  • Используя git submodule или git subtrees: Это не работает, потому что мне нужна очень жесткая структура каталогов и файлов из родительского проекта.
  • Несколько git remotes в локальном проекте, то есть два git origins, один в родительский и один в дочерний проект: Против этого решения говорит то, что для того, чтобы где-то развернуть проект, я не могу просто запустить git clone, а должен вручную установить несколько git remote -v origin.
  • Отношение к родительскому проекту как к библиотеке, которую я устанавливаю через диспетчер пакетов, а затем либо версионирую установленные файлы в дочерних репозиториях, либо помещаю их в .gitignore: Возможно, это не решение, что не так уж плохо, но я не знаю инструмент для достижения этого. Возможно, существует инструмент, который может установить данную версию из репозитория github с помощью какой-либо команды, например some_paket_manager install path/to/git/repo==v.0.0.9
  • Скопируйте и вставьте файлы из родительского проекта: я пытаюсь избежать этой ручной работы.
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
269
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Просто выполняйте обычные слияния, единственное, что вам нужно помнить, это когда/если вы объединяете обратную работу с родительскими файлами, выполненную в дочерней ветке, чтобы удалить файлы, специфичные для дочернего проекта, и изменения из результата слияния. Git держит все в порядке, пока вы записываете, что вы на самом деле делаете. git diff --diff-filter=A --name-only @ покажет вам все файлы, добавленные во время полета, например. что-либо, внесенное слиянием без фиксации, так что сделайте слияние без фиксации, исправьте результаты, чтобы они включали только те изменения, которые вы хотите, зафиксируйте это, готово. Как только вы поймете, что нужно исправить, вы сможете многое автоматизировать, но это не всегда будет просто удаление каждого нового файла.

Итак, вы предлагаете иметь родительский и дочерний элементы в качестве ветвей в одном проекте? Но как я тогда смогу поделиться родительскими файлами, а также их изменениями между всеми проектами, которые зависят от родителя? Обновив родительские файлы в отдельной ветке, мне нужно будет обновить родительские файлы каждого проекта с помощью «копировать и вставить»? И большое спасибо за ответ!!

physicus 17.02.2019 20:08

вы можете нажимать и извлекать отдельные истории, имена и границы репо — все на ваше усмотрение. Таким образом, одним из способов было бы центральное репо только для родительской ветки, чей мастер вы извлекаете в «родительскую» ветку в репозитории каждого клиента, ветвление/слияние из него для клиентского проекта, как обычно, и любая родительская работа, которая в конечном итоге выполняется в клиентское репо извлекается, как показано в ответе здесь, возвращается в промежуточную ветку в родительском репо для тестирования и слияния с мастером.

jthill 17.02.2019 21:20

Другие вопросы по теме