Git сгладить подмодуль в родительском дереве чисто и сохранить историю фиксации

У меня есть репозиторий с двумя подмодулями, которые я хочу преобразовать в один проект. Многие ответы связаны с сценариями, и некоторые из них кажутся слишком сложными.

[submodule "site"]
    path = wp-content/themes/site
    url = https://[email protected]/ajf-/site.git
    fetchRecurseSubmodules = true
    ignore = all
[submodule "wpsite"]
    path = wp-content/themes/wpsite
    url = https://[email protected]/ajf-/wpsite.git
    fetchRecurseSubmodules = true
    ignore = all

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

Ответ 1

Лучший подход - это слияние поддерева.

Сначала удалите подмодули и соответствующую конфигурацию из вашего суперпроекта; Измените файл .gitmodules, чтобы удалить затронутые подмодули, или полностью удалить файл, если вы собираетесь объединить все подмодули. Удалите также подмодульные каталоги.

Затем добавьте репозитории подмодулей в качестве правильных пультов к вашему суперпроекту:

git remote add site https://[email protected]/ajf-/site.git
git remote add wpsite https://[email protected]/ajf-/wpsite.git

Затем извлеките пульт дистанционного управления:

git fetch --all

Теперь, проверьте ветки, которые вы хотите перенести в свой основной проект из каждого подпроекта:

git checkout -b site-branch site/some_branch
git checkout -b wpsite-branch wpsite/some_other_branch

Теперь вы готовы объединить эти ветки в виде поддеревьев с вашим основным проектом:

git read-tree --prefix=site/ -u site-branch
git read-tree --prefix=wpsite/ -u wpsite-branch

И все готово. Проверьте результат с помощью gitk --all.

Поскольку вы хотите конвертировать в один проект, вы не собираетесь обновлять подпроекты самостоятельно, поэтому я не буду описывать, как это работает.

Вы можете прочитать это в главе о слиянии поддерева с Pro Git