Как объединить несколько репозиториев в один в Git?

Как можно перенести изменения из старого репозитория в новый в виде подмодуля со всей историей коммитов, оставляя часть изменений в старом репозитории? Попытки сделать это через добавление удаленного репозитория и чекаут оттуда приводят к ошибкам с неподтвержденными файлами. Есть ли другие способы, помимо использования cherry-pick?
  • 6 мая 2024 г. 8:50
Ответы на вопрос 2
Для объединения нескольких репозиториев в один в Git можно использовать подмодули. Для этого необходимо создать новый репозиторий, добавить в него подмодули, указав пути к другим репозиториям, и затем загрузить изменения из этих репозиториев в подмодули.

Чтобы перенести изменения из старого репозитория в новый в виде подмодуля со всей историей коммитов, можно использовать следующие шаги:

1. Добавьте старый репозиторий в качестве удаленного репозитория к новому репозиторию:

```bash
git remote add old_repo <URL_старого_репозитория>
```

2. Получите историю коммитов из старого репозитория:

```bash
git fetch old_repo
```

3. Создайте новую ветку для переноса изменений из старого репозитория:

```bash
git checkout -b new_branch old_repo/main
```

4. Перенесите изменения в новую ветку в виде подмодуля:

```bash
git submodule add <URL_старого_репозитория> path_to_submodule
```

5. Закоммитьте изменения и отправьте их в новый репозиторий:

```bash
git add .
git commit -m "Added old repository as submodule"
git push origin new_branch
```

6. После этого вы можете удалить старый репозиторий из удаленных:

```bash
git remote remove old_repo
```

Эти шаги позволят вам перенести изменения из старого репозитория в новый в виде подмодуля с сохранением истории коммитов. Если возникают проблемы с неподтвержденными файлами при чекауте удаленного репозитория, попробуйте использовать вышеописанный подход. Более сложные сценарии могут потребовать использования cherry-pick или других инструментов Git.
При помощи git-filter-repo можно растащить единую историю на историю подмодулей, будто с самого начала на подмодулях было. Придется повозиться, конечно, но оно стоит того, как по мне.
Похожие вопросы