Как управлять версиями нескольких зависимых проектов в одном каталоге (например, 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
  • Скопируйте и вставьте файлы из родительского проекта: я пытаюсь избежать этой ручной работы.

1 ответ

Решение

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

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