Як перетворити дрібний клон Git у повний клон?


214

Продовження цього запитання: якщо у мене є дрібний клон, як отримати всі старі зобов’язання, щоб зробити його повним клоном?


4
Чи вважаєте ви позначити відповідь @ sdram? Це правильно.
Ionică Bizău

Відповіді:


93

EDIT: git fetch --unshallow тепер це варіант (дякую Джеку О'Коннору).

Можна запустити git fetch --depth=1000000(якщо припустимо, що у сховищі менше одного мільйона комітів).


238
Тепер, що git fetch --unshallowіснує (як у відповіді @ sdram), ця відповідь вже не найкраща.
Джек О'Коннор

1
Відповідь @ sdram для мене не працювала (git версія 2.1.1), але ця відповідь так і зробила.
kay - SE зла

2
Жодна відповідь не працювала для мене. Обидві команди вдалося отримати всі відсутні документи, але коли я намагаюся натиснути нові коміти, я отримую помилку про те, що сервер не знає про «дрібні»
реф.

3
git fetch --depth=2147483647є найбільшою можливою глибиною для надання команді.
clacke

5
Я використовував git fetch --unshallow, але це все ще не показує всіх гілок.
Сид

674

Наведена нижче команда (git версія 1.8.3) перетворить дрібний клон у звичайний

git fetch --unshallow

Потім, щоб отримати доступ до всіх гілок за походженням (дякую @Peter у коментарях)

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

36
Це не скасовує побічний ефект --sele-гілка. Для цього відредагуйте .git / config та змініть fetch = + refs / heads / BRANCHNAME: refs / remotes / origin / BRANCHNAME для отримання = + refs / heads / *: refs / remotes / origin / *
Peter Cordes

3
Це не створює локальні гілки, які відстежують віддалені гілки, тому вам все-таки потрібно перевірити -b походження BRNAME / BRNAME, щоб налаштувати це налаштування.
Пітер Кордес

26
Дивіться також stackoverflow.com/questions/17714159/… : git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"; git fetch origin з відповіді повинно бути те саме, що редагувати .git / config вручну
Пітер Кордес

Це працює лише в тому випадку, якщо репо-маркер позначений як дрібний. Я не можу пригадати, як, але бувають ситуації, коли ти можеш закінчитись неповним репо, не зробивши явного дрібного клону. @ Svick в stackoverflow.com/a/6802238/260122 відповідь , який працює кожен раз.
клак

git fetch --unshallow --update-head-ok origin '+refs/heads/*:refs/heads/*'працював на мене
gzaripov

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

і робити з цим.

HTH

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.