Как клонировать/извлекать репо, получая только историю

Можно ли загружать репозитарии, ветки и теги, исключая капли и деревья? Я хотел бы иметь возможность просматривать историю и многое другое без скачивания файлов (это для Chromium repo, который представляет собой несколько концертов). Очевидно, что я не смогу увидеть, какие файлы были затронуты фиксацией, но это прекрасно.

Ответы

Ответ 1

Нет, или, по крайней мере, не использовать обычный доступ. Некоторые сайты предлагают веб-доступ, благодаря которому вы можете получать содержимое каждого объекта фиксации, не получая также объекты tree и blob, но обычный процесс приема объектов или тонких пакетов либо усекается на уровне фиксации (через --depth), либо полный.

Разумеется, вы можете увидеть все видимые теги с помощью git ls-remote а также с помощью любого разумного веб-интерфейса (было бы странно предоставить что-то вроде GitHub fancy API, если бы вы не предоставили теги таким образом :-)).

Обратите внимание, что перемещение всех коммитов через веб-API может быть чрезвычайно медленным, либо из-за необходимости останавливаться и ждать (если вы программируете его синхронно, а не как потоковый процесс) или из-за программы ограничения скорости на хосте (GitHub и Bitbucket кажутся для ограничения скорости).

Ответ 2

Мы создаем ghuser.io (расширенные страницы профиля GitHub), и любой способ получить историю коммитов без файлов очень помог бы нам масштабироваться.

Затем вам необходимо настроить зеркальный сервер с поддержкой GVFS (Git Virtual File System)/VFS For Git.

С июня 2016 года (вопрос OP) и в настоящее время (4 квартал 2018 года) Microsoft предложила VFS For Git (так как проблема 72 скоро будет решена) (февраль 2017 года) и позволяет вам разрабатывать репозитории TeraBytes (!) без загрузки файлов.

Сам GitHub должен поддержать это скоро.

Смотрите больше на gvfs.io, хотя я подозреваю, что доменное имя, которое теперь переименовано, чтобы отразить новое имя "VFS For Git": https://vfsforgit.org.
( Microsoft/VFSForGit.WWW выпуск 9 закрыт, 28 ноября 2018 г.)

Ответ 3

Функция "Частичное клонирование" была добавлена в git 2.19.

Документация здесь: https://www.git-scm.com/docs/partial-clone

Для того, чтобы использовать это:

  • Вам нужен git> = 2.19 как на сервере, так и на клиенте
  • На сервере вам нужно включить функцию: git config --global uploadpack.allowFilter true
  • git clone --filter=tree:0 REMOTE_URL