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

214

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

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

Ответы:

93

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

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

svick
источник
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, за исключением того, что он указывает количество коммитов от текущей мелкой границы, а не от вершины истории каждой удаленной ветви.

Виктор Сергиенко
источник
1

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

git fetch --update-shallow
Алтынай
источник
0

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

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

git fetch --update-shallow

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

git fetch --depth=1000000

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

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

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

НТН

Gen.Stack
источник
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

Раджив Ранджан
источник