BFG Repo-Cleaner указывает, что мой репозиторий github не является допустимым репозиторием Git

Это дополнительный вопрос из предыдущего вопрос о Stackoverflow.

Я пытался удалить большие файлы из моей локальной истории git, но инструмент (BFG Repo-Cleaner) предложил в этом вопросе указано, что мой частный репозиторий GitHub не является действительным репозиторием git.

Я использую команду:

java -jar bfg-1.12.12.jar  --strip-blobs-bigger-than 99M https://github.com/name/repo.git

Что в конечном итоге приводит к:

Aborting : https://github.com/name/repo.git is not a valid Git repository.

Я не мог найти решение. Является ли инструмент несовместимым с частными репозиториями или репозиториями https GitHub? Как мне использовать альтернативный инструмент git-filter-branch, чтобы удалить все файлы размером более 99 МБ из моей локальной истории git?

Размер проекта составляет около 6 МБ, и на данный момент было сделано всего около 50 коммитов, и никто над ним не работает.


person boolean.is.null    schedule 17.07.2016    source источник


Ответы (3)


Укажите на локальную копию, а не на удаленную.

Вы предоставили инструменту URL-адрес GitHub, но раздел использование на их сайт говорит, что вы должны работать с локальной копией вашего репозитория:

Применение

Сначала клонируйте новую копию вашего репозитория, используя флаг --mirror:

$ git clone --mirror git://example.com/some-big-repo.git

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

Теперь вы можете запустить BFG, чтобы очистить ваш репозиторий:

$ java -jar bfg.jar --strip-blobs-bigger-than 100M some-big-repo.git

На этой странице много другого полезного контента; Я рекомендую вам прочитать все это, прежде чем пытаться снова.

person Chris    schedule 17.07.2016
comment
Спасибо за ваш отзыв! Как найти имя, например some-big-repo.git, локального репозитория git? Я указываю его на каталог .git? - person boolean.is.null; 18.07.2016
comment
@boolean.is.null, это просто имя папки, в которую вы клонировали репозиторий. По умолчанию это будет соответствовать тому, что используется на удаленном компьютере (some-big-repo.git в этом примере), но может отличаться, если вы добавите дополнительные параметры в git clone или переименуете элементы позже. Да, укажите на каталог .git/. Если вы используете не голый клон, я подозреваю, что вы также можете использовать его корень. - person Chris; 18.07.2016
comment
Вычистить файл из репо уже достаточно сложно. Зачем мне работать в зеркале? Теперь у меня будет в два раза больше проблем. - person leerssej; 28.08.2019
comment
@leerssej, потому что так работает инструмент. Скорее всего, следующим шагом будет --force-with-lease отправка обратно в ваш опубликованный репозиторий, хотя, конечно, это сопряжено со всеми неотъемлемыми проблемами, связанными с принудительной отправкой в ​​общий репозиторий. Требование локального репо добавляет очень мало сложности и согласуется с остальной частью экосистемы, где практически все, что вы можете сделать, происходит локально. Если вы хотите изменить удаленное репо, внесите изменения на своем компьютере, а затем нажмите. - person Chris; 28.08.2019
comment
@ Андрей, может быть, ты запутался в заданном вопросе? OP спрашивает о конкретном сообщении об ошибке, вызванном попыткой запустить BFG Repo Cleaner напрямую по URL-адресу GitHub. Мой ответ не просто цитирует документацию: он указывает на ошибку и цитирует документацию в качестве поддержки. - person Chris; 26.11.2020
comment
@Chris, но вполне допустимо поместить URL-адрес GitHub в строку git clone. Так что опять путаница. $ git clone --mirror github.com/user/projectname $ cd projectname.git $ java -jar path/bfg.jar --strip-blobs-bigger-than 100M Тот факт, что ОП пришлось комментировать в комментариях, является доказательством того, что ответ был недостаточно хорош. - person Andrew; 26.11.2020
comment
cd является необязательным. Вы можете указать путь к репозиторию local в качестве аргумента при запуске BFG, как я показал, или вы можете опустить его, и в этом случае используется текущий каталог, который вы предпочитаете. В этом случае вы должны быть в репозитории. Но это всегда локальный каталог. Это была проблема ОП, и это вопрос, на который я ответил. У вас может быть другой вопрос, и это нормально, но это не значит, что этот ответ неверен. Это просто ответ на другой вопрос к вашему. - person Chris; 26.11.2020
comment
@ Крис, я никогда не говорил, что это неправильно. Этого просто недостаточно, чтобы помочь решить проблему. Это неполное. ОП не получил от него ответа, как и я, и Дэйв. Нам пришлось прочитать ваш комментарий к ответу, чтобы добраться туда. Это подсказывает мне, что это должно быть частью ответа и сделать его более полным. - person Andrew; 26.11.2020

Я исправил это с помощью следующих команд:

ШАГ 1

cd some-big-repo.git

ШАГ 2

java -jar path/bfg.jar --strip-blobs-bigger-than 100M 

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

person varun vashishtha    schedule 19.02.2020

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

Итак, здесь вы должны указать путь к вашему локальному репозиторию...

person Philippe    schedule 17.07.2016
comment
Ключевая фраза здесь — local repository, что внутри папки, содержащей папку .git, означает, что я запустил: java -jar bfg -b 100M .git - person Nathan Dortman; 29.05.2017
comment
Размещение jar в той же папке, что и репо, и запуск его таким образом должно быть рекомендацией по умолчанию, я не мог заставить его работать по-другому. Благодарю вас! - person Sebastián Vansteenkiste; 13.06.2019