Безопасно ли очищать клон с помощью --depth 1, создавать коммиты и снова получать обновления?
--depth 1
вариант в git clone
:
Создайте неглубокий клон с историей, усеченной до указанного количества ревизий. Мелкий репозиторий имеет ряд ограничений (вы не можете клонировать или извлекать из него, ни выдвигать из него, ни в него), но он подходит, если вас интересует только недавняя история большого проекта с длинной историей, и вы хотите отправить исправления в виде исправлений.
Но я успешно сделал мелкий клон, внес некоторые изменения и перенес эти изменения обратно в источник (голый клон).
Это имеет смысл для меня - я имею в виду, почему нет? когда клонированная ГОЛОВА идентифицируется в источнике, и мой коммит приходит поверх этого, нет никакой причины. Но в руководстве сказано иначе.
Мне нравится идея мелкого клона - например, ядра друпала: мне не нужно знать, что происходило в друпале 4, когда я начинал с 7. - но я не хочу стрелять себе в ногу.
Так безопасно ли обрабатывать клоны, разрабатывать коммиты в нем, тянуть снова, чтобы не отставать от обновлений от происхождения?
2 ответа
Обратите внимание, что Git 1.9/2.0 (первый квартал 2014 года) снял это ограничение.
Смотри коммит 82fba2b, от Нгуен Тай Нгук Дуй (pclouds
):
Теперь, когда git поддерживает передачу данных от или к мелкому клону, эти ограничения больше не верны.
--depth <depth>::
Создайте "мелкий" клон с историей, усеченной до указанного количества ревизий.
Это происходит из коммитов, таких как 0d7d285, f2c681c и c29a7b8, которые поддерживают клон, send-pack /receive-pack с / от мелких клонов.
smart-http теперь также поддерживает мелкую выборку / клонирование.
Все детали в " shallow.c
: 8 шагов для выбора новых коммитов для.git/shallow
".
Обновление от июня 2015: Git 2.5 даже позволитполучить один коммит!
(Абсолютный мелкий случай)
Обновление от января 2016: Git 2.8 (Mach 2016) официально документирует практику получения минимальной истории.
См. Коммит 99487cf, коммит 9cfde9e (30 декабря 2015 г.), коммит 9cfde9e(30 дек. 2015 г.), коммит bac5874(29 дек. 2015 г.) и коммит 1de2e44 (28 дек. 2015 г.). Автор Stephen P. Smith (``).
(Объединено Юнио С Хамано -gitster
- в комитете 7e3e80a, 20 января 2016 г.)
Это "Documentation/user-manual.txt
"
<<def_shallow_clone,shallow clone>>
создается путем указанияgit-clone --depth
переключатель.
Глубина может быть позже изменена с помощьюgit-fetch --depth
переключатель или полная история восстановлена с помощью--unshallow
,Слияние внутри
<<def_shallow_clone,shallow clone>>
будет работать до тех пор, пока база слияния находится в недавней истории.
В противном случае это будет похоже на объединение несвязанных историй и может привести к огромным конфликтам.
Это ограничение может сделать такое хранилище неподходящим для использования в рабочих процессах на основе слияния.
Для получения дополнительной информации о процессе обновления мелкого клона см. " Как обновить мерзкий клон git?".
Как прокомментировал Richard Michael:
чтобы засыпать историю:
git pull --unshallow
И Olle Härstedt добавляет в комментариях:
Чтобы заполнить часть истории:
git fetch --depth=100
,
Посмотрите некоторые ответы на мой похожий вопрос " почему-не могу-толкнуть-от-мелкого-клона" и ссылку на недавнюю ветку в списке мерзавцев.
В конечном счете, измерение "глубины" не согласуется между репозиториями, потому что они измеряют по их отдельным заголовкам, а не (а) вашей голове или (б) коммиту (ам), который вы клонировали / получили, или (в) что-то еще ты имел в виду.
Сложность заключается в том, чтобы правильно использовать свой Вариант использования (то есть самосогласованный), чтобы распределенные, и, следовательно, вероятно, расходящиеся репо все равно работали вместе.
Это выглядит как checkout --orphan
является правильным этапом "настройки", но все еще не хватает четкого (т. е. простой понятной однострочной команды) руководства по этапу "клонирования". Скорее похоже, что вы должны init
репо, настроить remote
отслеживание ветки (вы хотите только одну ветку?), а затем fetch
та единственная ветвь, которая чувствует себя долгое время с большим количеством возможностей для ошибок.
Изменить: для шага "клон" см. Этот ответ