Поддерживают ли 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, во время последнего редактирования этого ответа.