Поддерживают ли GitHub и GitLab параметр --filter в git clone?

Я хочу использовать git's partialClone особенность. В этом ответе я увидел git clone --filter=tree:none <repo> команда.

Но при попытке выполнить на github, подсказка warning: filtering not recognized by server, ignoring, Это не работает.

Я хочу знать, не поддерживается ли он веб-сайтом GitHub, или есть проблема с моими настройками.

Я спросил мнение сотрудников GitHub и не получил ответ от техника.

1 ответ

Решение

Это почти наверняка еще не поддерживается GitHub или GitLab.

--filter Опция находится в стадии активной разработки и пока не готова для общего пользования. В блоге GitHub о выпуске Git 2.19 в сентябре 2018 года говорится

Обратите внимание, что большинство общедоступных серверов еще не поддерживают эту функцию, но вы можете играть с git clone --filter=blob:none против вашей локальной установки Git 2.19.

Как только эта функция станет более развитой, и хосты начнут ее поддерживать, я уверен, что они не будут делать это тихо. Насколько я знаю, ни один крупный облачный провайдер еще не сделал такого объявления.

Обновление от ОП 2019-03-21:

Не так давно я получил официальный ответ от github. Они думают, что --filter Параметр все еще является незрелой функцией и сопровождается некоторыми проблемами безопасности. Поэтому эта функция не будет поддерживаться в краткосрочной перспективе.

Это поддерживается GitLab 13.0 (май 2020 г.)

Исключение больших файлов с помощью частичного клонирования

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

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

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

При клонировании проекта используйте --filter=blob:none или --filer=blob:limit=1mчтобы исключить капли полностью или по размеру файла.
Обратите внимание: для частичного клонирования требуется как минимум Git 2.22.0.

(см. также " Что такоеgit clone --filterсинтаксис варианта?")

Подробнее читайте в нашем недавнем блоге Джеймса Рамзи " Как Git Partial Clone позволяет получать только нужный вам большой файл ".

См. Документацию и проблему.

Хотя я не могу найти официальный пост в блоге или новости о поддержке, GitHub действительно, похоже, развертывается--filterподдержка.

$ git clone --bare --single-branch --depth=1 https://github.com/torvalds/linux

В результате было загружено около 74 тыс. Объектов на 195,82 МБ.

$ git clone --bare --single-branch --depth=1 --filter=blob:none https://github.com/torvalds/linux

В результате было загружено около 4,7 тыс. Объектов на 2,15 МБ. Это на 91 раз меньше данных, если все, что вам нужно, это знать, какие файлы находятся в репо.

Поскольку вы упоминаете в tree:noneЯ тоже это проверял. Теперь это приводит кfatal: expected 'tree:<depth>' и мои последующие эксперименты показывают, что только tree:0работает, что приводит к загрузке 603 байта или около того в чистом репо. Если вы попытаетесь клонировать и оформить заказ, git постепенно определит, какие объекты ему нужны, и клонирует все репо. Числа больше 0 приводят к:fatal: remote error: filter 'tree' not supported (maximum depth: 0, but got: 1)

Что касается поддержки частичного клонирования / резервной проверки в GitLab:

Начиная с GitLab 12.4 (выпущенного 2019-10-22) частичное клонирование было добавлено в качестве дополнительной альфа-функции для автономных экземпляров. Вы можете включить его для всего экземпляра через api флагов функций:

curl --data "value=true" --header "PRIVATE-TOKEN: <your_access_token>" https://gitlab.example.com/api/v4/features/gitaly_upload_pack_filter

Вы можете получить больше информации об этом здесь:https://docs.gitlab.com/ee/topics/git/partial_clone.html

Чтобы быть ясным: вы не можете использовать эту функцию с репозиториями, размещенными на gitlab.com, во время последнего редактирования этого ответа.

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