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


214

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


4
Считаете ли вы, чтобы отметить ответ @ SDRAM? Это правильный.
Ионика Бизэ

Ответы:


93

РЕДАКТИРОВАТЬ: git fetch --unshallow теперь вариант (спасибо Джек О'Коннор).

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


238
Теперь, когда он git fetch --unshallowсуществует (как в ответе @ sdram), этот ответ больше не является лучшим.
Джек О'Коннор

1
Ответ @ sdram у меня не сработал (git version 2.1.1), но этот ответ сработал.
Кей - SE это зло

2
Ни один ответ не работал для меня. Обе команды преуспели в получении всех отсутствующих коммитов, но когда я пытаюсь выдвинуть новые коммиты, я получаю сообщение об ошибке, когда сервер не знает о «мелких»
ссылках

3
git fetch --depth=2147483647это максимально возможная глубина, которую необходимо предоставить команде.
Clacke

5
Я использовал git fetch --unshallow, но он все еще не показывает все ветви.
Сид

674

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

git fetch --unshallow

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

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

36
Это не отменяет побочный эффект --single-branch. Чтобы сделать это, отредактируйте .git / config и измените fetch = + refs /heads / BRANCHNAME: refs / remotes / origin / BRANCHNAME, чтобы получить = + refs / heads / *: refs / remotes / origin / *
Питер Кордес,

3
Это не создает локальные ветви, отслеживающие удаленные ветви, поэтому вам все равно нужно проверить -b BRNAME origin / BRNAME, чтобы настроить это.
Питер Кордес

26
См. Также stackoverflow.com/questions/17714159/… : git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"; git fetch origin из ответа должно быть то же самое, что редактирование .git / config вручную
Питер Кордес

Это работает только если репо помечен как мелкий. Я не могу вспомнить, как это сделать, но бывают ситуации, когда вы можете закончить с неполным репо, не сделав явно мелкого клона. stackoverflow.com @ svick/a/6802238/260122 - это ответ, который работает каждый раз.
Clacke

git fetch --unshallow --update-head-ok origin '+refs/heads/*:refs/heads/*'у меня работали
гзарипов

19

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

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

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

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

--deepen=<depth>

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



0

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

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

git fetch --update-shallow

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

git fetch --depth=1000000

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

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

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

НТН


0

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

  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 = + ссылки / головы / мастера: ссылки / пульты / происхождение / мастер

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

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

g. git fetch -v

Это преобразует Shallow Clone в Deep Clone со всеми деталями истории и ветвления.


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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.