Технически они различны:
--shallow-since=<em>date</em>
получает коммиты, отметка времени фиксации которых позже (и, возможно, равна жестким aries границ) заданной отметки времени; --depth=<em>number</em>
получает коммиты, чья глубина счета из имен (имена веток, имена тегов и любые другие имена, которые вы скажете Git использовать) находится в пределах заданного количества шагов.
То есть рассмотрим хранилище Git со следующими коммитами:
A--B--C <-- master
\
D--E--F--G <-- develop
Предположим, что даты для C
, E
, F
и G
все в этом году и A
, B
и D
- все в предыдущем году. Если вы сделаете:
git clone --shallow-since=<this year> --no-single-branch
, вы получите коммиты C
и E-F-G
, например:
...--C <-- origin/master
...--E--F--G <-- origin/develop
Однако, если вы сделаете:
git clone --depth=2 --no-single-branch you will get:
...--B--C <-- origin/master
...--F--G <-- origin/develop
т.е. два коммита от каждого имени. (Нет связи между G
и B
, так как для этого требуется вернуться на четыре шага назад от G
, чтобы достичь D
, и мы сказали Git отключить вещи после двух шагов.)
Поскольку --depth
разрешает --single-branch
по умолчанию, эта особенность имеет тенденцию скрываться: если вы только говорите своему клону, чтобы он сделал origin/master
, не имеет значения, будет ли на той же глубине применяется друг к другу имя тоже. Добавление опции --no-single-branch
делает разницу намного яснее.
В любом случае, если у вас нет прямого доступа к серверу, очевидным способом вычисления глубины является полное заполнение (но, необязательно, single-branch) clone, затем проверьте даты коммиттера в репозитории, который вы теперь имеете локально. Затем вы можете посчитать ревизии с последней даты, которую вы хотите, до подсказки ветки, которая сообщает вам, сколько коммитов клонировано.
Конечно, к этому времени у вас есть полный клон, так что вы можете также просто используйте его.
Реальная альтернатива - сделать начальный клон с некоторым фиксированным --depth
. Затем проверьте метку времени коммиттера самого раннего коммита. Если эта дата наступает после вашего отсечения, используйте git fetch --deepen
(или --depth
снова), чтобы углубить мелкий клон. Повторяйте проверку и углубление до тех пор, пока хранилище не станет достаточно глубоким.
(Количество коммитов, которые нужно сначала клонировать, затем добавить в выборку, зависит от того, сколько времени потребуется для переноса каждой группы коммитов, против накладные расходы, связанные с настройкой еще одного раунда git fetch
, так что нет очевидного правильного номера для использования.)