While the date format is indeed, for instance, YYYY-MM-DD, "git fetch --shallow-since=<cutoff>
" had a problem:
If you specify a cut-off point that is newer than the existing history, it used to end up grabbing the entire history.
Such a request now errors out with Git 2.19 (Q3 2018).
See commit e34de73 (26 May 2018) by Nguyễn Thái Ngọc Duy (pclouds
).
(Merged by Junio C Hamano -- gitster
-- in commit 208ee59, 25 Jun 2018)
upload-pack
: reject shallow requests that would return nothing
Shallow clones with --shallow-since
or --shalow-exclude
work by running rev-list to get all reachable commits, then draw a boundary between reachable and unreachable and send "shallow" requests based on that.
The code does miss one corner case: if rev-list
returns nothing, we'll have no border and we'll send no shallow requests back to the client (i.e. no history cuts).
This essentially means a full clone (or a full branch if the client requests just one branch).
One example is the oldest commit is older than what is specified by --shallow-since.
To avoid this, if rev-list
returns nothing, we abort the clone/fetch.
The user could adjust their request (e.g. --shallow-since
further back in the past) and retry.
Another possible option for this case is to fall back to a default
depth (like depth 1).
But I don't like too much magic that way because we may return something unexpected to the user. If they request "history since 2008" and we return a single depth at 2000, that might break stuff for them.
It is better to tell them that something is wrong and let them take the best course of action.