2012-10-16 19:24:16 +02:00
|
|
|
Shallow commits
|
|
|
|
===============
|
|
|
|
|
|
|
|
.Definition
|
|
|
|
*********************************************************
|
|
|
|
Shallow commits do have parents, but not in the shallow
|
2007-03-20 03:41:11 +01:00
|
|
|
repo, and therefore grafts are introduced pretending that
|
|
|
|
these commits have no parents.
|
2012-10-16 19:24:16 +02:00
|
|
|
*********************************************************
|
2007-03-20 03:41:11 +01:00
|
|
|
|
|
|
|
The basic idea is to write the SHA1s of shallow commits into
|
|
|
|
$GIT_DIR/shallow, and handle its contents like the contents
|
|
|
|
of $GIT_DIR/info/grafts (with the difference that shallow
|
|
|
|
cannot contain parent information).
|
|
|
|
|
|
|
|
This information is stored in a new file instead of grafts, or
|
|
|
|
even the config, since the user should not touch that file
|
|
|
|
at all (even throughout development of the shallow clone, it
|
|
|
|
was never manually edited!).
|
|
|
|
|
|
|
|
Each line contains exactly one SHA1. When read, a commit_graft
|
|
|
|
will be constructed, which has nr_parent < 0 to make it easier
|
|
|
|
to discern from user provided grafts.
|
|
|
|
|
|
|
|
Since fsck-objects relies on the library to read the objects,
|
|
|
|
it honours shallow commits automatically.
|
|
|
|
|
|
|
|
There are some unfinished ends of the whole shallow business:
|
|
|
|
|
|
|
|
- maybe we have to force non-thin packs when fetching into a
|
|
|
|
shallow repo (ATM they are forced non-thin).
|
|
|
|
|
|
|
|
- A special handling of a shallow upstream is needed. At some
|
|
|
|
stage, upload-pack has to check if it sends a shallow commit,
|
|
|
|
and it should send that information early (or fail, if the
|
|
|
|
client does not support shallow repositories). There is no
|
|
|
|
support at all for this in this patch series.
|
|
|
|
|
|
|
|
- Instead of locking $GIT_DIR/shallow at the start, just
|
|
|
|
the timestamp of it is noted, and when it comes to writing it,
|
|
|
|
a check is performed if the mtime is still the same, dying if
|
|
|
|
it is not.
|
|
|
|
|
|
|
|
- It is unclear how "push into/from a shallow repo" should behave.
|
|
|
|
|
|
|
|
- If you deepen a history, you'd want to get the tags of the
|
|
|
|
newly stored (but older!) commits. This does not work right now.
|
|
|
|
|
|
|
|
To make a shallow clone, you can call "git-clone --depth 20 repo".
|
|
|
|
The result contains only commit chains with a length of at most 20.
|
|
|
|
It also writes an appropriate $GIT_DIR/shallow.
|
|
|
|
|
|
|
|
You can deepen a shallow repository with "git-fetch --depth 20
|
|
|
|
repo branch", which will fetch branch from repo, but stop at depth
|
|
|
|
20, updating $GIT_DIR/shallow.
|