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