/usr/share/doc/git/technical
Shallow commits =============== .Definition ********************************************************* Shallow commits do have parents, but not in the shallow repo, and therefore grafts are introduced pretending that these commits have no parents. ********************************************************* $GIT_DIR/shallow lists commit object names and tells Git to pretend as if they are root commits (e.g. "git log" traversal stops after showing them; "git fsck" does not complain saying the commits listed on their "parent" lines do not exist). Each line contains exactly one object name. When read, a commit_graft will be constructed, which has nr_parent < 0 to make it easier to discern from user provided grafts. Note that the shallow feature could not be changed easily to use replace refs: a commit containing a `mergetag` is not allowed to be replaced, not even by a root commit. Such a commit can be made shallow, though. Also, having a `shallow` file explicitly listing all the commits made shallow makes it a *lot* easier to do shallow-specific things such as to deepen the history. 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. The special depth 2147483647 (or 0x7fffffff, the largest positive number a signed 32-bit integer can contain) means infinite depth.
.
Edit
..
Edit
api-error-handling.html
Edit
api-error-handling.txt
Edit
api-index-skel.txt
Edit
api-index.html
Edit
api-index.sh
Edit
api-index.txt
Edit
api-merge.html
Edit
api-merge.txt
Edit
api-parse-options.html
Edit
api-parse-options.txt
Edit
api-simple-ipc.html
Edit
api-simple-ipc.txt
Edit
api-trace2.html
Edit
api-trace2.txt
Edit
bitmap-format.html
Edit
bitmap-format.txt
Edit
bundle-uri.html
Edit
bundle-uri.txt
Edit
commit-graph.txt
Edit
directory-rename-detection.txt
Edit
hash-function-transition.html
Edit
hash-function-transition.txt
Edit
long-running-process-protocol.html
Edit
long-running-process-protocol.txt
Edit
multi-pack-index.html
Edit
multi-pack-index.txt
Edit
pack-heuristics.html
Edit
pack-heuristics.txt
Edit
packfile-uri.txt
Edit
parallel-checkout.html
Edit
parallel-checkout.txt
Edit
partial-clone.html
Edit
partial-clone.txt
Edit
platform-support.html
Edit
platform-support.txt
Edit
racy-git.html
Edit
racy-git.txt
Edit
reftable.html
Edit
reftable.txt
Edit
remembering-renames.txt
Edit
repository-version.txt
Edit
rerere.txt
Edit
scalar.html
Edit
scalar.txt
Edit
send-pack-pipeline.html
Edit
send-pack-pipeline.txt
Edit
shallow.html
Edit
shallow.txt
Edit
sparse-checkout.txt
Edit
sparse-index.txt
Edit
trivial-merge.html
Edit
trivial-merge.txt
Edit
unit-tests.html
Edit
unit-tests.txt
Edit