Это не особенно красиво:
A::A(const B& b) try : mB(b)
{
// constructor stuff
}
catch (/* exception type */)
{
// handle the exception
}
О самом процессе мелкого обновления клона см. 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 г.) sup>
shallow.c
Этот
paint_down()
является частью шага 6 58babff (shallow.c: 8 шагов для выбора новых коммитов для .git / shallow - 2013-12-05) .
Когда мы выбираем из мелкого репозитория, нам нужно знать, нужно ли одному из новых / обновленных ссылок новые «мелкие коммиты» в.git/shallow
(потому что у нас недостаточно истории этих ссылок) и какой.Вопрос на шаге 6 заключается в том, какие (новые) мелкие коммиты требуются в других, чтобы поддерживать достижимость по всему хранилищу без сокращения нашей истории?
1140 После того, как все прогулки пройдены, мы проверяем новые мелкие коммиты. Если мы не видели каких-либо новых ссылок, помеченных на новом мелком коммите, мы знаем, что все новые / обновленные ссылки достижимы, используя только нашу историю и
Чтобы ответить, мы отмечаем все коммиты достижимы из существующих ссылок с помощью UNINTERESTING ("rev-list --not --all
"), помечайте мелкие коммиты с помощью BOTTOM, затем для каждой новой / обновленной ссылки проходите по графику фиксации, пока мы не нажмем UNINTERESTING или BOTTOM, отмечая ссылку на коммит, как мы ходить..git/shallow
.
Рассматриваемый мелкий коммит не нужен и может быть отброшен.
Итак, код.
Цикл здесь (для обхода коммитов) в основном:
- получить один коммит из очереди
- игнорировать, если он ВИДЕТ или НЕИНТЕРЕСОВАН [
- пройти через всех родителей и ..
- 5.aa пометить его, если он никогда не был отмечен ранее
- 5.b положить его в очередь
Что мы делаем в этом патче шаг 5a, потому что в этом нет необходимости.
Коммит, отмеченный 5a, помещается обратно в очередь и будет отмечен на шаге 3 на следующей итерации. Единственный случай, когда он не будет помечен, это когда коммит уже помечен как UNINTERESTING (5a не проверяет это), что будет игнорироваться на шаге 2.