Разветвить конкретный каталог из огромного репозитория

Я хотел бы разветвить огромный репозиторий (10 ГБ), отфильтровать его в определенный каталог и отправить отфильтрованную версию в новый репозиторий Github.

Я использовал инструкции эти для извлечения и фильтрации в свой каталог, и это работает. Но когда я пытаюсь отправить отфильтрованный репозиторий обратно в Github, я получаю эту ошибку:

$ git push origin master --force
Enumerating objects: 2292154, done.
Counting objects: 100% (2292154/2292154), done.
Delta compression using up to 8 threads
Compressing objects: 100% (562030/562030), done.
error: RPC failed; curl 55 SSL_write() returned SYSCALL, errno = 32
fatal: the remote end hung up unexpectedly
Writing objects: 100% (2292154/2292154), 7.03 GiB | 40.92 MiB/s, done.
Total 2292154 (delta 1726549), reused 2292154 (delta 1726549)
fatal: the remote end hung up unexpectedly
Everything up-to-date

Я пробовал решение, предложенное здесь, но ошибка сохраняется.

Есть ли способ разветвить конкретный каталог и уменьшить общий размер репо, чтобы упростить его управление?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
92
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Учитывая приведенные вами ссылки, проблема может быть связана с размером коммита. Возможно, может помочь фильтрация вашего репо только в этом каталоге, но сохранение коммитов, связанных с ним.

Из git filter-branch руководства:

To rewrite the repository to look as if foodir/ had been its project root, and discard all other history:

git filter-branch --subdirectory-filter foodir -- --all

Надеюсь, это поможет.

Оставить только этот каталог (и сохранить его в структуре) немного сложнее.

Судя по примеру из руководства git-filter-branch, это должно сработать:

git filter-branch --index-filter \
   'git ls-files -s foodir/ |
       GIT_INDEX_FILE=$GIT_INDEX_FILE.new \
       git update-index --index-info &&
       mv "$GIT_INDEX_FILE.new" "$GIT_INDEX_FILE"
   ' -- --all

Вкратце: вывод git ls-files -s foodir/ показывает содержимое индекса (дерево больших двоичных объектов и имя файла) только для файлов в foodir/; этот список файлов помещается обратно в индекс.

В любом случае, как я заметил в комментарии, вы не сможете просто слить его, так как коммиты теперь другие.

Спасибо! это работает. Есть ли способ сделать это, сохраняя мой каталог в его текущем местоположении (вместо корня)? Это упростит позднее слияние с восходящим потоком.

mbrg 10.04.2019 15:17

Вы можете попробовать с git filter-branch --index-filter. Извините за краткость, я подробно расскажу об этом, когда у меня будет больше времени. Обратите внимание, что git filter-branch перезаписывает историю, вы не сможете просто слить ее в исходный репозиторий.

Pierre-Olivier Vares 10.04.2019 16:23

Другие вопросы по теме