Есть ли более простой способ публикации из монорепозитория в их разные репозитории?

У меня есть монорепозиторий с рабочими пространствами пряжи (и lerna)

-package
--one
--two
-site

И скрипт, который берет каждый из них (один, два и сайт) и отправляет их в свои репозитории на github.

Я делаю это с чем-то вроде

git subtree split ... // from `one|two|site` folders create a new repo
git checkout ... // switch to the new repo
git tag ... // create a tag and push it to the new repo
git push -u url branch:master // push the content to the new repo
git checkout master // go back
git branch --delete // delete the created brancg

Это (пока) работает, хотя и медленно

Вопрос в том, правильно ли я делаю это или есть какое-то другое лучшее решение.


person GWorking    schedule 05.10.2019    source источник
comment
Вы рассматривали подмодули?   -  person VonC    schedule 06.10.2019
comment
Позвольте мне подтвердить мое понимание вашей структуры. На самом деле монорепозиторий — это репозиторий git для чтения и записи, где выполняется вся работа. В то время как один, два, три репозитория git доступны только для чтения, предположительно для распространения. Это правильно?   -  person sbat    schedule 06.10.2019
comment
@sbat да, верно   -  person GWorking    schedule 07.10.2019
comment
@VonC они работают лучше, чем поддерево? Я помню, я изучал это, но решил пойти с поддеревом (хотя не помню, почему)   -  person GWorking    schedule 07.10.2019
comment
Мне легче ими манипулировать. И пометить их все за один раз можно, как я предложил здесь: stackoverflow.com/a/58254305/6309   -  person VonC    schedule 07.10.2019
comment
Похоже, что Lerna оставляет это на усмотрение конечного пользователя, но неофициально благословляет github.com/splitsh/lite . См. обсуждение здесь github.com/lerna/lerna#git-hosted-dependencies.   -  person sbat    schedule 07.10.2019


Ответы (1)


Начальное разбиение поддерева выглядит нормально, но вы можете перепроверить пример 3.

Предположим, у вас есть исходный каталог с множеством файлов и подкаталогов, и вы хотите извлечь каталог lib в отдельный проект git. Вот краткий способ сделать это:

Во-первых, создайте новый репозиторий там, где хотите:

$ <go to the new location>    
$ git init --bare

Вернитесь в исходный каталог:

$ git subtree split --prefix=lib --annotate="(split)" -b split

Затем вставьте новую ветку в новый пустой репозиторий:

$ git push <new-repo> split:master

https://github.com/git/git/blob/master/contrib/subtree/git-subtree.txt

В любом случае, после этого, если этот монорепозиторий является репозиторием «записи», вы должны иметь возможность просто отправлять обновления в поддерево на удаленные устройства.

git subtree push --prefix package/one remote-one master

Существует некоторая суета по поводу того, что push-уведомления занимают все больше и больше времени (чем больше коммитов собирает репозиторий), поэтому здесь есть некоторая информация об использовании параметра повторного присоединения к вашему разделению.

Как уменьшить постоянно увеличивающееся время отправки поддерева?

person Anthony Mastrean    schedule 25.02.2020