Похоже, что большинство (все?) ответов здесь опираются на некоторую форму git filter-branch --subdirectory-filter
и ее ilk. Это может работать «в большинстве случаев», однако для некоторых случаев, например, когда вы переименовали папку, например:
ABC/
/move_this_dir # did some work here, then renamed it to
ABC/
/move_this_dir_renamed
Если вы используете обычный стиль git-фильтра для извлечения «move_me_renamed», вы будете потерять историю изменений файла, которая произошла со спины, когда она была первоначально move_this_dir ( ref ).
Таким образом, кажется, что единственный способ действительно сохранить все история (если ваш случай подобен этому), по сути, копировать репозиторий (создать новое репо, установить его как начало), затем уничтожить все остальное и переименовать подкаталог родительскому элементу следующим образом:
git branch -a
git checkout --track origin/branchABC
cp -r oldmultimod simple
cd simple
git rm otherModule1 other2 other3
git mv moduleSubdir1/* .
rmdir moduleSubdir1
git status
git remote set-url origin http://mygithost:8080/git/our-splitted-module-repo
git remote -v
git push
git checkout branch2
Это следует за github doc «Разделение вложенной папки в новый репозиторий « шаги 6-11, чтобы подтолкнуть модуль к новому репо.
Это не сохранит ваше место в вашей папке .git, но оно сохранит всю историю изменений для этих файлов даже переименования. И это может не стоить того, если нет «большой» истории, потерянной и т. Д. Но по крайней мере вам гарантировано не потерять более старые коммиты!
Вы можете попробовать использовать встроенный шорткод - [related_products limit="5"]
, «предел» - это количество товаров для отображения.