Как преобразовать мелкий клон Git в полный клон?

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

7 ответов

Решение

Вы можете запустить git fetch --depth=1000000 (при условии, что хранилище имеет менее миллиона коммитов).

Следующая команда (git version 1.8.3) преобразует мелкий клон в обычный

git fetch --unshallow

Затем, чтобы получить доступ ко всем веткам по происхождению (спасибо @Peter в комментариях)

git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"
git fetch origin

Мне нужно было углубить репо только до определенного коммита.

После прочтения man git-fetchЯ обнаружил, что нельзя указать коммит, но можно указать дату:

git fetch --shallow-since=15/11/2012

Для тех, кому нужно постепенное углубление, другое man цитата:

--deepen=<depth>

Аналогичен --depth, за исключением того, что он указывает количество коммитов от текущей мелкой границы, а не от кончика истории каждой удаленной ветви.

Два способа добиться от мелкого клонирования до глубокого клонирования.:

  1. Для загрузки ветки были выполнены следующие шаги: (Это загружает неглубокую копию ветки, а затем преобразует ее в полное клонирование, т.е. приносит полную ветку и ее историю).

    а. git clone -b ветка http://git.repository/customSP01.git --depth 1

При этом неглубокий клон (с параметром глубины) извлекает только одну единственную ветвь (на запрошенной вами глубине).

b. cd customSP01
c. git fetch –depth=100
d. get fetch –depth=500
....
e. git fetch –unshallow    

// Приведенная выше команда преобразует мелкий клон в обычный. Однако это не все ветви:

Затем, чтобы получить доступ ко всем веткам.

f. git remote set-branches origin '*'

[Этот шаг также можно выполнить вручную, отредактировав следующую строку в.git / config.

выборка = + ссылки / головы / мастер: ссылки / удаленные / происхождение / мастер

в (заменить мастер на *):

fetch = +refs / heads / *:refs / remotes / origin / *]

g. git fetch -v

Это преобразует мелкий клон в глубокий клон со всеми деталями истории и веток.


  1. Вы можете избежать шагов f и g, если будете использовать команду ниже вместо команды, представленной на шаге a. сделать мелкий клон:

    git clone -b branch --no-single-branch http://git.repository/customSP01.git --depth 1

Вы можете попробовать это:

git fetch --update-shallow

Ни одно из приведенных выше сообщений не помогло. Я пытаюсь работать с тегами git, начиная с мелкого клона.

Сначала я попробовал

git fetch --update-shallow

какой вид работал на полпути. Пока нет доступных тегов!

git fetch --depth=1000000

Эта последняя команда действительно выбрала теги, и я наконец смог выполнить

git checkout -b master-v1.1.0 tags/v1.1.0

и покончим с этим.

НТН

Конфигурации, которые помогли устранить ошибку: (В GitLab) Для каждого проекта:

  1. На верхней панели выберите Главное меню > Проекты и найдите свой проект.
  2. На левой боковой панели выберите «Настройки» > CI/CD. Разверните Общие трубопроводы.
  3. В разделе «Стратегия Git» выберите «git fetch», в разделе «Поверхностное клонирование Git» введите значение 1000, максимальное значение для GIT_DEPTH. Подробнее — https://gitlab.yourcompany.com/help/ci/pipelines/settings#limit-the-number . -изменений, полученных во время клонирования{}

В .gitlab-ci-yml (это следует сделать перед любой командой, вызывающей GitVersion.exe)

        before_script:
    - git fetch --prune --tags --unshallow  
Другие вопросы по тегам