Переместить подпапку в новый репозиторий - PullRequest
0 голосов
/ 26 апреля 2018

Мне нужно переместить подпапку в новый репозиторий git, а затем повторно добавить ее как подмодуль в исходное хранилище и сохранить исходную структуру каталогов. Github help предлагают использовать

git filter-branch --prune-empty --subdirectory-filter FOLDER-NAME  BRANCH-NAME 

для фильтрации исходного репо, который сохраняет историю, связанную с этой папкой и т. Д. Однако этот подход не является полным, хорошо отфильтровать этот каталог и его историю из исходного репо и повторно добавить его в качестве субмодуля в тот момент, когда каталог в истории был создано.

У меня следующая структура каталогов:

/
  /lib
      /mylib
  /server
  /src
  /tests
  LICENSE
  README.md

Команда

git filter-branch --prune-empty --subdirectory-filter lib/mylib master

перемещает источники в корень нового репо, а это не то, что я хочу. То же самое для верхнего каталога:

git filter-branch --prune-empty --subdirectory-filter lib master

сохраняет mylib dir в отфильтрованном репо (но потенциально может захватить другие библиотеки - не в моем случае для счастливчиков) и работать немного лучше. Итак, каковы следующие шаги:

  1. Отфильтруйте /lib/mylib и его историю из исходного репо, чтобы уменьшить размер репо и улучшить его структуру (простой способ - просто удалить его и повторно добавить как подмодуль).
  2. Повторно добавить /lib/mylib репо в качестве подмодуля для сохранения структуры каталогов
  3. Хорошо бы повторно добавить 2-е место в истории, когда было создано /lib/mylib, чтобы сохранить целостность репо и возможность создания источников на любом этапе (или это не имеет смысла?).

Трудно сделать? Есть мысли?

1 Ответ

0 голосов
/ 09 мая 2018

Чтобы сохранить одинаковые пути, сделали следующее:

  1. git filter-branch --prune-empty --subdirectory-filter lib master
  2. Изменен удаленный URL для отфильтрованного репозитория, как упомянуто в Github manual .
  3. Отфильтрованный репо к новому источнику
  4. Убедился, что lib dir был удален в основном локальном репо с: git rm -r mylib
  5. Повторно добавить lib как подмодуль: git submodule add https://origin_repo/MyLib.git lib
...