Как проверить, является ли Git Repository мелким?

Когда я делаю локальный клон из репозитория, клон завершается ошибкой, если исходный репозиторий неглубокий.

git clone -l -- . target-dir

Так как это не всегда так, я хотел бы узнать предшествующий клон, но не знаю, как это сделать.

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

if ! git fetch --unshallow; then
    git fetch
fi

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

 hakre30 мая 2016 г., 20:19
@Whymarrh: «Как проверить, является ли репозиторий Git мелким?», Только что отредактированный, сначала использовал заголовок для встроенного поиска.
 Whymarrh30 мая 2016 г., 20:18
Какой вопрос?

Ответы на вопрос(1)

Решение Вопроса

Наверноеgit rev-parse, который выставляет несколько других предметов (--is-inside-git-dir, --is-inside-work-tree, а также--is-bare-repository),должен пройти тест на поверхностность (--is-shallow-repository).До Git версии 2.15это не так. Если ваш Git старше,1 просто проверить файлshallow в каталоге репозитория Git:

if [ -f $(git rev-parse --git-dir)/shallow ]; then
    echo this is a shallow repository;
else
    echo not a shallow repository;
fi

или (короче):

[ -f $(git rev-parse --git-dir)/shallow ] && echo true || echo false

1git --version напечатает номер текущей версии:

$ git --version
2.14.1

$ git --version
git version 2.7.4

и т. д. (на данный момент у меня есть несколько версий на разных виртуальных машинах / машинах.) Вы также можете запустить:

git rev-parse --is-shallow-repository

Если это просто печатает--is-shallow-repository, ваш Git до 2.15 и не имеет опции.

 hakre30 мая 2016 г., 22:32
Так что пока хранилище мелкое, естьshallow файл в git-dir, не так ли? Это испытание звучит многообещающе, спасибо за ваш ответ.
 hakre30 мая 2016 г., 23:05
Из тестов: удаление мелкого файла заставляет git думать, что он не мелкий и допускает локальные клоны. Кроме того, в текущей версии git я заметил, что --local игнорируется, если он обнаружен поверхностно и клонирован, но, тем не менее, возвращается к нелокальному. Код состояния выхода равен 0.
 hakre31 мая 2016 г., 07:08
@torken: я удалил его только для теста, так как хотел попробовать, что получится. Я делаю проверку и, если мелко, убираю ее через fetch.
 sschuberth16 янв. 2018 г., 18:19
К вашему сведениюgit-rev-parse делает есть--is-shallow-repository вариант.
 torek16 янв. 2018 г., 18:50
@sschuberth: это делаетсейчас (по состоянию на Git 2.15). :-) Я обновлю.
 torek31 мая 2016 г., 00:41
shallow файл не только маркер, он также содержит трансплантаты, которыеделать это неглубокое хранилище (вместо просто сломанного, если вы удалите файл). Как правило, не стоит просто удалять это: оставить этоfetch что успешно отмывает

Ваш ответ на вопрос