Я должен запустить BFG на зеркальном репо или оригинале?
Я хочу удалить два файла из моего репозитория git, которых больше нет.
Я вставил их, попытался подтолкнуть, но они были слишком большими. Поэтому я вынул их и продолжал работать, потом совершил, попытался подтолкнуть, но это все равно дало мне ту же ошибку. Я полагал, что они все еще где-то в истории.
Я думаю, что усугубил проблему, потому что я продолжал работать в этой ветке и сделал еще 1 коммит. Затем я слил эту ветку обратно в главную ветку.
Поэтому я искал решение и нашел BFG.
Но инструкции на странице не имеют смысла для меня.
Прежде всего,
$ git clone --mirror git://example.com/some-big-repo.git
Откуда мне клонировать? В моем удаленном репо на github.com нет коммитов и слияний, которые я сделал с тех пор, как добавил большие файлы. Но из-за инструкций мне все равно кажется, что я должен получить их оттуда. (Я клонировал из моего местного репо.)
Следующий,
$ java -jar bfg.jar --strip-blobs-bigger-than 100M some-big-repo.git
Является some-big-repo.git
зеркальное репо или нормальное локальное репо?
(Я использовал зеркальное репо для этого.)
А потом я проверил, что моя история была обновлена и попробовал,
$ cd some-big-repo.git
$ git reflog expire --expire=now --all && git gc --prune=now --aggressive
(Я был в зеркальном клоне для этого) Я получил ошибку.
remote: error: refusing to update checked out branch: refs/heads/master
remote: error: By default, updating the current branch in a non-bare repository
remote: error: is denied, because it will make the index and work tree inconsistent
remote: error: with what you pushed, and will require 'git reset --hard' to match
remote: error: the work tree to HEAD.
remote: error:
remote: error: You can set 'receive.denyCurrentBranch' configuration variable to
remote: error: 'ignore' or 'warn' in the remote repository to allow pushing into
remote: error: its current branch; however, this is not recommended unless you
remote: error: arranged to update its work tree to match what you pushed in some
remote: error: other way.
remote: error:
remote: error: To squelch this message and still keep the default behaviour, set
remote: error: 'receive.denyCurrentBranch' configuration variable to 'refuse'.
To /home/cole/main_repo
+ 94b9a0d...c7c4317 work -> work (forced update)
! [remote rejected] master -> master (branch is currently checked out)
error: failed to push some refs to '/home/cole/main_repo'
Это имеет смысл для меня. Да у меня сейчас master
проверено. Но тогда, что еще я должен был сделать? Я могу видеть проблемы, только если попробую по-другому.
1 ответ
Вы должны клонировать / отразить репо, которое вы в конечном итоге планируете заменить коммитами, но есть основополагающее предположение, что это репо также является голым репо. Обычно это удаленное репо, но вы также можете клонировать локальное репо для экономии пропускной способности.
Основное предположение заключается в том, что репо, в котором вы в конечном итоге будете хранить очищенный репозиторий, также является чистым репо. Репозитории на основе сервера, например, GitHub, как правило, именно такие.
В вашем случае это звучит так, как будто вы клонировали локальное репозиторий (содержащий HEAD и рабочую копию) с непокрытой поверхностью, либо для экономии полосы пропускания, либо потому, что это репо содержит коммиты, которые вы хотите очистить. В любом случае, чтобы вернуться в не-голое репо, вы должны убедиться, что у вас нет никаких рефсов, которые вы хотите выдать, включая master.
Из вашего комментария похоже, что вы нашли решение, которое заключается в том, чтобы откатиться к возможному исходному репо, которое, скорее всего, будет голым репо.
Первые 3 шага с BFG:
- Загрузите BFG, используя следующую команду в терминале:
brew install bfg
Клонируйте свежую копию вашего репо, используя
--mirror
флаг.git clone --mirror git://example.com/some-big-repo.git
Флаг зеркалирования позволяет вам сделать полную копию базы данных Git без фактического копирования файлов репо.
bfg --the-options-you-want the-mirror-repo-you-just-cloned.git
Адаптировано из этого руководства инженером IBM. не cd
в репозиторий, как сказано в шаге 3, в противном случае вы получите сообщение об ошибке "the-mirror-repo-you-just-cloned.git не является допустимым Git-репозиторием".