LINUX.ORG.RU

git: запушить свой проект в подкаталог удаленного репозитория

 


0

1

Всех приветствую.
Я тут познаю чудный мир git. В связи с чем возник вопрос.
Я запилил небольшой служебный проект. Хранил его локально. Историю сохранял в git.
Теперь есть потребность запушить его в удаленный репозиторий вместе со всей моей историей коммитов. Причем запушить его нужно в некий подкаталог где и хранятся все такие служебные проекты. Совсем сломал мозг, как это можно сделать. Для примера:

localhost:/my_project - мой проект

remote:/mega_project - удаленный репозиторий
              /tools             - каталог для служебных проектов
                 /my_project - место куда должен попасть мой репозиторий
Как это можно сделать?

Хотя пока писал, подумалось только это в принципе невозможно.

★★★★

man git submodules.

1 проект - 1 репозиторий. Но если хочется их собрать все вместе, то есть submodules.

KivApple ★★★★★ ()

Если submodule выберешь, то твой проект придется хранить в отдельном репе и через submidule подключать.

Есть вуду магия под названием subtree merge

aol ★★★★★ ()
Последнее исправление: aol (всего исправлений: 1)

Про порочность этой идеи и правильный submodule уже написали, а вообще это делается просто - делаешь коммит в служебном проекте который перемещает всё в нужную поддиректорию (по вкусу можно вместо этого сделать filter-branch чтобы выглядело так как будно он всегда был в этой поддиректории), потом добавляешь этот репозиторий как remote в основном репозитории и делаешь merge --allow-unrelated-histories.

slovazap ★★★★★ ()
Последнее исправление: slovazap (всего исправлений: 1)
Ответ на: комментарий от yax123

Не понимаю страданий, если честно..

В склонированном локально основном репе делаешь git remote add foo урл твоего репа

Далее https://til.hashrocket.com/posts/babf63d378-use-git-subtree-to-merge-repositories-with-history

aol ★★★★★ ()
Последнее исправление: aol (всего исправлений: 1)
Ответ на: комментарий от aol

Страдание в том, что ничего не понятно. Что произойдет в результате этого действия? Как история моих коммитов будет соседствовать с историей исходной репы? Много вопросов.

Если делать submodules, то где будет хранится история?

yax123 ★★★★ ()
Ответ на: комментарий от yax123

submodule - это когда репозиторий со вспомогательным проектом остаётся отдельным репозиторием. А в основном появляется каталог который на него ссылается, на определённый коммит. Соответственно всё можно разрабатывать независимо, коммиты во вспомогательный проект пойдут в его репозиторий, а в основном будет видно только переключения submodule на новый коммит. Тогда и только тогда когда оно нужно, никаких лишних мержей и никакого смешения истории.

slovazap ★★★★★ ()
Ответ на: комментарий от yax123

В сабмодулях своя история, не связанная с основным репо.

Если тебе один раз слить и работать потом а основном, сделай сабтри мерж и забудь об этом.

aol ★★★★★ ()
Последнее исправление: aol (всего исправлений: 1)
Ответ на: комментарий от aol

В сабмодулях своя история, не связанная с основным репо

А где она физически будет хранится?

Мне бы хотелось чтобы история моих коммитов стала историей основной репы. Пусть даже в виде последовательности коммитов с одинаковым таймстемпом на момент мерджа.

yax123 ★★★★ ()
Ответ на: комментарий от aol

сделай сабтри мерж и забудь об этом.

как в этом случае будет выглядеть история коммитов основного репозитория?

yax123 ★★★★ ()
Ответ на: комментарий от yax123

Физически - в том репе, который ты подключаешь, как сабмодуль.

Это как «мягкие ссылки» в фс

aol ★★★★★ ()
Ответ на: комментарий от yax123

Выполни у себя на тачке эти действия, и увидишь. Рушить ничего не придется, чтобы увидеть результат. Гит лог наберёшь и увидишь всё

aol ★★★★★ ()
Ответ на: комментарий от yax123

Тогда мерж. История будет выглядеть так:

o merge commit
|\
| o история
| o влитого
| o проекта
| o ...
o история
o основного
o проекта
o ...
slovazap ★★★★★ ()

Самый быстрый способ - запилить скрипт, который по шагам воспроизведет историю твоего репозитория в другом. На баше пишеться за 2-3 часа.

trex6 ★★★★★ ()

Отвечу в назидание потомкам:

добавить стороннюю репу в текущую: git subtree add -P subproject ../subproject master

Проблемы: 1. в слаке по умолчанию не собирается инструмент git-subtree. Нужно править слакбилд, причем как в 14.2 так и в current

2. Нельзя вставлять в пустой репозиторий. Там должен быть хотя бы один commit. Скрипт subtree работает c HEAD.

Как итог, добавляется branch c подпроектом, который потом мерджится с master-ом.

yax123 ★★★★ ()
Ответ на: комментарий от anonymous

Как я понял делается это через создание бранча, добавление истории к этому бранчу и потом мердж обратно в мастер. То есть этот subtree всего лишь автоматизация того, что я описал. А так можно руками все сделать.

yax123 ★★★★ ()
Ответ на: комментарий от yax123

Теоретически, наверное - да: в отдельную ветку положить все, только относящееся к subtree и потом можно просто мерж сделать с целевой веткой.

anonymous ()

подумалось только это в принципе невозможно

Я хз конечно (не пробовал), но разве нельзя прикрутить в твою репу второй remote от основного проекта, сделать pull и всё сольётся в счастливом порыве.

no-such-file ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.