Как обновить git shallow клон?

Это не особенно красиво:

A::A(const B& b) try : mB(b) 
{ 
    // constructor stuff
}
catch (/* exception type */) 
{
    // handle the exception
}
24
задан Sachin Joseph 26 June 2019 в 10:26
поделиться

1 ответ

О самом процессе мелкого обновления клона см. commit 649b0c3 форма Git 2.12 (первый квартал 2017 года).
Этот коммит является частью:

Commit 649b0c3 , commit f2386c6 , commit 6bc3d8c , commit 0afd307 (06 Dec) 2016) Нгуен Тай Нгц Дуй (pclouds) . См. commit 1127b3c , commit 381aa8e (06.12.2016) by Расмус Виллемес (ravi-prevas) . (Объединено с Хунио С. Хамано - gitster - в commit 3c9979b , 21 декабря 2016 г.)

shallow.c

Этот paint_down() является частью шага 6 58babff (shallow.c: 8 шагов для выбора новых коммитов для .git / shallow - 2013-12-05) .
Когда мы выбираем из мелкого репозитория, нам нужно знать, нужно ли одному из новых / обновленных ссылок новые «мелкие коммиты» в .git/shallow (потому что у нас недостаточно истории этих ссылок) и какой.

Вопрос на шаге 6 заключается в том, какие (новые) мелкие коммиты требуются в других, чтобы поддерживать достижимость по всему хранилищу без сокращения нашей истории?
Чтобы ответить, мы отмечаем все коммиты достижимы из существующих ссылок с помощью UNINTERESTING ("rev-list --not --all"), помечайте мелкие коммиты с помощью BOTTOM, затем для каждой новой / обновленной ссылки проходите по графику фиксации, пока мы не нажмем UNINTERESTING или BOTTOM, отмечая ссылку на коммит, как мы ходить.

1140 После того, как все прогулки пройдены, мы проверяем новые мелкие коммиты. Если мы не видели каких-либо новых ссылок, помеченных на новом мелком коммите, мы знаем, что все новые / обновленные ссылки достижимы, используя только нашу историю и .git/shallow.
Рассматриваемый мелкий коммит не нужен и может быть отброшен.

Итак, код.

Цикл здесь (для обхода коммитов) в основном:

  1. получить один коммит из очереди
  2. игнорировать, если он ВИДЕТ или НЕИНТЕРЕСОВАН [
  3. пройти через всех родителей и ..
    • 5.aa пометить его, если он никогда не был отмечен ранее
    • 5.b положить его в очередь

Что мы делаем в этом патче шаг 5a, потому что в этом нет необходимости.
Коммит, отмеченный 5a, помещается обратно в очередь и будет отмечен на шаге 3 на следующей итерации. Единственный случай, когда он не будет помечен, это когда коммит уже помечен как UNINTERESTING (5a не проверяет это), что будет игнорироваться на шаге 2.

3
ответ дан VonC 26 June 2019 в 10:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: