Как управлять версиями нескольких зависимых проектов в одном каталоге (например, web2py, django) - PullRequest
0 голосов
/ 16 февраля 2019

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

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

.
|-- 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, один наparent и one для дочернего проекта: что говорит против этого решения, так это то, что для развертывания проекта где-то я не могу просто запустить git clone, но должен вручную установить несколько git remote -v origin.
  • Лечениеродительский проект в виде библиотеки, которую я устанавливаю через менеджер пакетов, а затем либо устанавливаю версии установленных файлов в дочерних репозиториях, либо помещаю их в .gitignore: Возможно, это не решение, что не так уж и плохо, но я незнать инструмент для достижения этой цели.Возможно, существует инструмент, который может установить данную версию из репозитория github с помощью некоторой команды, такой как some_paket_manager install path/to/git/repo==v.0.0.9
  • Копирование и вставка файлов из родительского проекта: я пытаюсь избежать этой ручной работы.

1 Ответ

0 голосов
/ 16 февраля 2019

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

...