Git: превращаем вложенный репозиторий в обычную директорию

Если скопировать один Git-проект внутрь другого и выполнить commit, Git сохранит вложенный проект как gitlink (режим 160000). В GitLab вместо содержимого директории будет отображаться ссылка на commit:
init-server @ 957c7776
Простое удаление вложенного .git не поможет: ссылка уже записана в индексе родительского репозитория.
Решение:

  1. Удаляем gitlink из индекса, сохраняя файлы на диске:
git rm --cached init-server
  1. Удаляем метаданные вложенного репозитория, если они ещё существуют:
rm -rf init-server/.git
  1. Добавляем содержимое как обычные файлы:
git add -A init-server/
  1. Проверяем:
git ls-files --stage init-server

Вместо записи с режимом 160000 должны появиться отдельные файлы с режимами 100644 или 100755.

  1. Фиксируем изменения:
git commit -m "Convert init-server to regular directory"
git push
Поделиться
Отправить