Для интеграции внешнего репозитория с сохранением полной истории изменений и возможностью внесения локальных изменений, наиболее подходящим вариантом будет использование git subtree без опции --squash. Давайте разберем, почему именно этот подход наиболее эффективен и какие шаги необходимо предпринять для его реализации.
-
Сохранение полной истории изменений:
- Используя git subtree без опции --squash, вы интегрируете внешний репозиторий в свой проект, сохраняя всю историю коммитов. Это позволяет вам видеть, как развивался внешний проект и вносить изменения на основе этой истории.
-
Возможность внесения локальных изменений:
- С помощью git subtree вы можете вносить изменения в интегрированную часть проекта, не затрагивая основной репозиторий. Это важно, если вы хотите адаптировать внешний код под свои нужды, не влияя на его оригинальную структуру.
-
Процесс интеграции:
- Чтобы интегрировать внешний репозиторий с помощью git subtree, выполните следующие шаги:
- Сначала добавьте внешний репозиторий как удаленный:
git remote add -f external-repo
- Затем выполните команду для интеграции:
git subtree add --prefix=<папка_для_интеграции> external-repo <ветка> --squash
- Обратите внимание, что мы не используем опцию --squash, чтобы сохранить полную историю.
- Теперь вы можете вносить изменения в интегрированную папку, и они будут локальными.
Рассмотрим и другие предложенные варианты:
-
Копирование файлов вручную и добавление их в .gitignore:
- Этот подход не сохраняет историю изменений и требует постоянного ручного обновления, что неэффективно.
-
Использование git submodule с настройкой shallow clone:
- Shallow clone ограничивает историю, что противоречит требованиям сохранения полной истории изменений.
-
Использование git subtree с опцией --squash:
- Этот подход не сохраняет полную историю изменений, так как все коммиты сводятся в один, что не подходит для ваших требований.
-
Использование git submodule с последующим форком подмодуля:
- Форк подмодуля может быть сложным и не всегда удобным, особенно если вам нужно поддерживать связь с оригинальным проектом.
Таким образом, использование git subtree без опции --squash является наиболее подходящим и эффективным решением для вашей задачи.