Если я правильно понимаю, что вы хотите достичь, я думаю, вам следует попробовать --subdirectory-filter
команды filter-branch
:
git filter-branch -f --subdirectory-filter "src/" --prune-empty -- --all
Заменить src/
именем вашего подкаталога.Опция --all
выполнит действие для всех ветвей.
Надеюсь, это поможет.
EDIT: Команда изменит только корневой каталог ваших локальных ветвей.Если вы хотите изменить корневой каталог для всех удаленных веток, я предлагаю вам использовать этот трюк :
- , сначала вы клонируете удаленный репозиторий с опцией
--mirror
, которая приводитв голый локальный репозиторий со всеми ветвями - и затем вы делаете этот локальный репозиторий обычным.
Затем в этом недавно клонированном репозитории, который содержит все ветви, вы можете применить команду filter-branch
.
С опцией --subdirectory-filter
эта команда установит указанный подкаталог в качестве корня локального репозитория git.
Опция --prune-empty
отменить все пустые коммиты (поскольку они относятся исключительно к файлам вне подкаталога).
Важно понимать, что вся история git будет переписана так, как если бы подкаталог всегда был корнем git-репо.
Надеюсь, я помогу вам понять эту команду.