git/Documentation
Stefan Beller 644eb60bd0 builtin/describe.c: describe a blob
Sometimes users are given a hash of an object and they want to
identify it further (ex.: Use verify-pack to find the largest blobs,
but what are these? or [1])

When describing commits, we try to anchor them to tags or refs, as these
are conceptually on a higher level than the commit. And if there is no ref
or tag that matches exactly, we're out of luck.  So we employ a heuristic
to make up a name for the commit. These names are ambiguous, there might
be different tags or refs to anchor to, and there might be different
path in the DAG to travel to arrive at the commit precisely.

When describing a blob, we want to describe the blob from a higher layer
as well, which is a tuple of (commit, deep/path) as the tree objects
involved are rather uninteresting.  The same blob can be referenced by
multiple commits, so how we decide which commit to use?  This patch
implements a rather naive approach on this: As there are no back pointers
from blobs to commits in which the blob occurs, we'll start walking from
any tips available, listing the blobs in-order of the commit and once we
found the blob, we'll take the first commit that listed the blob. For
example

  git describe --tags v0.99:Makefile
  conversion-901-g7672db20c2:Makefile

tells us the Makefile as it was in v0.99 was introduced in commit 7672db20.

The walking is performed in reverse order to show the introduction of a
blob rather than its last occurrence.

[1] https://stackoverflow.com/questions/223678/which-commit-has-this-blob

Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2017-12-19 11:17:16 -08:00
..
RelNotes Hopefully final batch before 2.15 2017-10-28 10:20:30 +09:00
howto doc: use https links to avoid http redirect 2017-04-20 22:05:37 -07:00
technical Merge branch 'hn/string-list-doc' 2017-10-11 14:52:22 +09:00
.gitattributes
.gitignore
CodingGuidelines Merge branch 'ab/c-translators-comment-style' into maint 2017-06-05 09:03:10 +09:00
Makefile technical doc: add a design doc for hash function transition 2017-09-28 19:37:52 +09:00
SubmittingPatches Merge branch 'rg/doc-submittingpatches-wordfix' 2017-05-04 16:26:46 +09:00
asciidoc.conf
asciidoctor-extensions.rb Documentation: implement linkgit macro for Asciidoctor 2017-01-31 12:18:18 -08:00
blame-options.txt Merge branch 'bc/blame-doc-fix' 2017-02-24 10:48:08 -08:00
build-docdep.perl
cat-texi.perl Documentation: remove unneeded argument in cat-texi.perl 2017-01-23 10:56:47 -08:00
cmd-list.perl
config.txt Merge branch 'jk/ref-filter-colors-fix' 2017-10-18 10:19:08 +09:00
date-formats.txt Merge branch 'lr/doc-fix-cet' into maint 2017-01-17 15:19:08 -08:00
diff-config.txt doc: add missing values "none" and "default" for diff.wsErrorHighlight 2017-07-25 14:30:49 -07:00
diff-format.txt Documentation: improve description for core.quotePath 2017-03-02 11:40:51 -08:00
diff-generate-patch.txt Documentation: improve description for core.quotePath 2017-03-02 11:40:51 -08:00
diff-heuristic-options.txt diff: retire "compaction" heuristics 2016-12-23 12:32:22 -08:00
diff-options.txt Merge branch 'jt/diff-color-move-fix' 2017-08-26 22:55:04 -07:00
docbook-xsl.css
docbook.xsl
everyday.txto
fetch-options.txt Merge branch 'nd/shallow-deepen' 2016-10-10 14:03:50 -07:00
fix-texi.perl
fmt-merge-msg-config.txt
git-add.txt Merge branch 'mr/doc-negative-pathspec' into maint 2017-10-18 14:19:12 +09:00
git-am.txt Merge branch 'mm/doc-tt' 2016-07-13 11:24:14 -07:00
git-annotate.txt blame: honor the diff heuristic options and config 2016-09-19 10:25:11 -07:00
git-apply.txt treewide: correct several "up-to-date" to "up to date" 2017-08-23 12:17:22 -07:00
git-archimport.txt docs/archimport: quote sourcecontrol.net reference 2017-04-20 22:05:38 -07:00
git-archive.txt
git-bisect-lk2009.txt doc: replace more gmane links 2017-05-09 21:13:13 -07:00
git-bisect.txt git-bisect.txt: add missing word 2017-04-01 11:35:45 -07:00
git-blame.txt Merge branch 'jc/blame-reverse' 2016-10-10 14:03:51 -07:00
git-branch.txt Merge branch 'jc/branch-force-doc-readability-fix' 2017-10-19 14:45:45 +09:00
git-bundle.txt
git-cat-file.txt doc: fix minor typos (extra/duplicated words) 2017-09-14 15:09:02 +09:00
git-check-attr.txt
git-check-ignore.txt
git-check-mailmap.txt
git-check-ref-format.txt git-check-ref-format: clarify documentation for --normalize 2017-02-21 13:02:42 -08:00
git-checkout-index.txt
git-checkout.txt Merge branch 'jc/doc-checkout' into maint 2017-10-18 14:19:14 +09:00
git-cherry-pick.txt Merge branch 'mm/doc-tt' into maint 2016-07-28 11:25:54 -07:00
git-cherry.txt
git-citool.txt
git-clean.txt doc: typeset short command-line options as literal 2016-06-28 08:20:52 -07:00
git-clone.txt clone: add a --no-tags option to clone without tags 2017-05-01 11:09:44 +09:00
git-column.txt
git-commit-tree.txt Merge branch 'mm/doc-tt' into maint 2016-07-28 11:25:54 -07:00
git-commit.txt doc: reformat the paragraph containing the 'cut-line' 2017-07-18 15:04:49 -07:00
git-config.txt config doc: clarify "git config --path" example 2017-10-19 13:52:49 +09:00
git-count-objects.txt count-objects: report alternates via verbose mode 2016-10-10 13:52:37 -07:00
git-credential-cache--daemon.txt
git-credential-cache.txt credential-cache: use XDG_CACHE_HOME for socket 2017-03-17 11:19:40 -07:00
git-credential-store.txt doc: typeset long command-line options as literal 2016-06-28 08:36:45 -07:00
git-credential.txt
git-cvsexportcommit.txt
git-cvsimport.txt Merge branch 'jk/doc-cvs-update' into maint 2016-10-03 13:22:25 -07:00
git-cvsserver.txt treewide: correct several "up-to-date" to "up to date" 2017-08-23 12:17:22 -07:00
git-daemon.txt doc: typeset HEAD and variants as literal 2016-06-28 08:36:45 -07:00
git-describe.txt builtin/describe.c: describe a blob 2017-12-19 11:17:16 -08:00
git-diff-files.txt
git-diff-index.txt treewide: correct several "up-to-date" to "up to date" 2017-08-23 12:17:22 -07:00
git-diff-tree.txt doc: typeset long command-line options as literal 2016-06-28 08:36:45 -07:00
git-diff.txt diff-files: document --ours etc. 2017-04-13 16:15:25 -07:00
git-difftool.txt Document the --no-gui option in difftool 2017-02-08 13:30:28 -08:00
git-fast-export.txt
git-fast-import.txt fast-import: increase the default pack depth to 50 2017-06-12 09:50:33 -07:00
git-fetch-pack.txt upload-pack: optionally allow fetching any sha1 2016-11-18 13:06:14 -08:00
git-fetch.txt Merge branch 'mm/push-social-engineering-attack-doc' into maint 2017-01-17 15:19:10 -08:00
git-filter-branch.txt Merge branch 'dg/filter-branch-filter-order-doc' 2017-10-19 14:45:45 +09:00
git-fmt-merge-msg.txt Documentation/fmt-merge-msg: fix markup in example 2016-10-28 05:51:51 -07:00
git-for-each-ref.txt Merge branch 'jk/ref-filter-colors-fix' into maint 2017-10-18 14:20:43 +09:00
git-format-patch.txt format-patch: have progress option while generating patches 2017-08-14 14:09:45 -07:00
git-fsck-objects.txt
git-fsck.txt fsck: optionally show more helpful info for broken links 2016-07-18 15:15:59 -07:00
git-gc.txt docs/git-gc: fix default value for `--aggressiveDepth` 2017-02-24 09:59:12 -08:00
git-get-tar-commit-id.txt
git-grep.txt Merge branch 'mr/doc-negative-pathspec' into maint 2017-10-18 14:19:12 +09:00
git-gui.txt doc: git-gui browser does not default to HEAD 2017-01-13 12:23:28 -08:00
git-hash-object.txt
git-help.txt doc: typeset long command-line options as literal 2016-06-28 08:36:45 -07:00
git-http-backend.txt
git-http-fetch.txt
git-http-push.txt doc: typeset long command-line options as literal 2016-06-28 08:36:45 -07:00
git-imap-send.txt
git-index-pack.txt index-pack: add --max-input-size=<size> option 2016-08-24 12:31:05 -07:00
git-init-db.txt
git-init.txt init: document dotfiles exclusion on template copy 2017-02-17 15:57:21 -08:00
git-instaweb.txt
git-interpret-trailers.txt Merge branch 'jk/trailers-parse' 2017-08-26 22:55:04 -07:00
git-log.txt Merge branch 'mj/log-show-signature-conf' 2016-07-11 10:31:08 -07:00
git-ls-files.txt Merge branch 'mm/ls-files-s-doc' 2017-04-16 23:29:30 -07:00
git-ls-remote.txt
git-ls-tree.txt Documentation: improve description for core.quotePath 2017-03-02 11:40:51 -08:00
git-mailinfo.txt
git-mailsplit.txt
git-merge-base.txt doc: fix merge-base ASCII art tab spacing 2016-10-21 09:46:48 -07:00
git-merge-file.txt
git-merge-index.txt
git-merge-one-file.txt
git-merge-tree.txt
git-merge.txt Merge branch 'wk/merge-options-gpg-sign-doc' 2017-10-19 14:45:43 +09:00
git-mergetool--lib.txt
git-mergetool.txt mergetool: honor -O<orderfile> 2016-10-11 10:04:31 -07:00
git-mktag.txt
git-mktree.txt doc: typeset short command-line options as literal 2016-06-28 08:20:52 -07:00
git-mv.txt doc: typeset short command-line options as literal 2016-06-28 08:20:52 -07:00
git-name-rev.txt name-rev: add support to exclude refs by pattern match 2017-01-23 18:33:17 -08:00
git-notes.txt doc: fix minor typos (extra/duplicated words) 2017-09-14 15:09:02 +09:00
git-p4.txt Merge branch 'ls/p4-retry-thrice' 2017-01-18 15:12:12 -08:00
git-pack-objects.txt Doc: clarify that pack-objects makes packs, plural 2017-08-23 10:39:41 -07:00
git-pack-redundant.txt
git-pack-refs.txt
git-parse-remote.txt
git-patch-id.txt doc: remove unsupported parameter from patch-id 2017-07-28 14:41:32 -07:00
git-prune-packed.txt
git-prune.txt
git-pull.txt Merge branch 'sb/pull-rebase-submodule' 2017-07-13 16:14:54 -07:00
git-push.txt Merge branch 'ma/parse-maybe-bool' 2017-08-22 10:29:03 -07:00
git-quiltimport.txt
git-read-tree.txt Merge branch 'jk/doc-read-tree-table-asciidoctor-fix' into maint 2017-10-18 14:19:11 +09:00
git-rebase.txt Merge branch 'js/rebase-i-final' 2017-10-03 15:42:47 +09:00
git-receive-pack.txt refs: reject ref updates while GIT_QUARANTINE_PATH is set 2017-04-16 18:19:18 -07:00
git-reflog.txt
git-remote-ext.txt
git-remote-fd.txt Spelling fixes 2016-08-11 14:35:42 -07:00
git-remote-helpers.txto
git-remote-testgit.txt
git-remote.txt doc: typeset long command-line options as literal 2016-06-28 08:36:45 -07:00
git-repack.txt repack: accept --threads=<n> and pass it down to pack-objects 2017-04-27 08:09:25 +09:00
git-replace.txt
git-request-pull.txt
git-rerere.txt treewide: correct several "up-to-date" to "up to date" 2017-08-23 12:17:22 -07:00
git-reset.txt Spelling fixes 2017-06-27 10:35:49 -07:00
git-rev-list.txt
git-rev-parse.txt Merge branch 'sb/rev-parse-show-superproject-root' 2017-10-28 10:18:40 +09:00
git-revert.txt doc: typeset long command-line options as literal 2016-06-28 08:36:45 -07:00
git-rm.txt treewide: correct several "up-to-date" to "up to date" 2017-08-23 12:17:22 -07:00
git-send-email.txt Merge branch 'xz/send-email-batch-size' 2017-07-06 18:14:46 -07:00
git-send-pack.txt Merge branch 'ma/parse-maybe-bool' 2017-08-22 10:29:03 -07:00
git-sh-i18n--envsubst.txt
git-sh-i18n.txt
git-sh-setup.txt
git-shell.txt shell: drop git-cvsserver support by default 2017-09-12 11:05:58 +09:00
git-shortlog.txt shortlog: test and document --committer option 2016-12-16 09:39:10 -08:00
git-show-branch.txt doc: typeset long command-line options as literal 2016-06-28 08:36:45 -07:00
git-show-index.txt
git-show-ref.txt doc: typeset long command-line options as literal 2016-06-28 08:36:45 -07:00
git-show.txt
git-stage.txt
git-stash.txt stash: update documentation to use 'stash entry' 2017-06-18 22:16:36 -07:00
git-status.txt Merge branch 'mr/doc-negative-pathspec' into maint 2017-10-18 14:19:12 +09:00
git-stripspace.txt
git-submodule.txt Merge branch 'sb/submodule-doc' 2017-07-12 15:18:21 -07:00
git-svn.txt treewide: correct several "up-to-date" to "up to date" 2017-08-23 12:17:22 -07:00
git-symbolic-ref.txt
git-tag.txt Merge branch 'jk/ref-filter-colors-fix' into maint 2017-10-18 14:20:43 +09:00
git-tools.txt doc: replace or.cz gitwiki link with git.wiki.kernel.org 2017-04-20 22:05:37 -07:00
git-unpack-file.txt
git-unpack-objects.txt unpack-objects: add --max-input-size=<size> option 2016-08-24 12:31:05 -07:00
git-update-index.txt Merge branch 'ez/doc-duplicated-words-fix' 2017-09-25 15:24:06 +09:00
git-update-ref.txt
git-update-server-info.txt
git-upload-archive.txt
git-upload-pack.txt
git-var.txt
git-verify-commit.txt Merge branch 'dn/gpg-doc' into maint 2016-07-06 13:06:36 -07:00
git-verify-pack.txt
git-verify-tag.txt builtin/verify-tag: add --format to verify-tag 2017-01-17 16:10:22 -08:00
git-web--browse.txt doc: typeset long command-line options as literal 2016-06-28 08:36:45 -07:00
git-whatchanged.txt
git-worktree.txt worktree add: add --lock option 2017-04-20 17:59:02 -07:00
git-write-tree.txt
git.txt Merge branch 'ad/doc-markup-fix' 2017-10-03 15:42:50 +09:00
gitattributes.txt Documentation: mention that `eol` can change the dirty status of paths 2017-09-07 08:57:54 +09:00
gitcli.txt stash: update documentation to use 'stash entry' 2017-06-18 22:16:36 -07:00
gitcore-tutorial.txt treewide: correct several "up-to-date" to "up to date" 2017-08-23 12:17:22 -07:00
gitcredentials.txt credential doc: make multiple-helper behavior more prominent 2017-05-02 10:58:06 +09:00
gitcvs-migration.txt Merge branch 'sb/doc-unify-bottom' 2017-02-15 12:54:20 -08:00
gitdiffcore.txt docs/diffcore: unquote "Complete Rewrites" in headers 2017-02-28 11:34:38 -08:00
giteveryday.txt giteveryday: unbreak rendering with AsciiDoctor 2017-01-07 14:03:40 -08:00
gitglossary.txt Documentation: unify bottom "part of git suite" lines 2017-02-09 15:14:01 -08:00
githooks.txt Merge branch 'sb/merge-commit-msg-hook' 2017-09-29 11:23:42 +09:00
gitignore.txt
gitk.txt Merge branch 'sb/remove-gitview' 2017-01-18 15:12:18 -08:00
gitmodules.txt Merge branch 'ss/submodule-shallow-doc' 2017-04-26 15:39:07 +09:00
gitnamespaces.txt doc: mention transfer data leaks in more places 2016-11-14 11:23:07 -08:00
gitremote-helpers.txt fix minor typos 2017-05-01 11:01:52 +09:00
gitrepository-layout.txt treewide: correct several "up-to-date" to "up to date" 2017-08-23 12:17:22 -07:00
gitrevisions.txt doc: gitrevisions - clarify 'latter case' is revision walk 2016-08-13 19:36:44 -07:00
gitsubmodules.txt submodules: overhaul documentation 2017-06-22 15:25:25 -07:00
gittutorial-2.txt Documentation: unify bottom "part of git suite" lines 2017-02-09 15:14:01 -08:00
gittutorial.txt treewide: correct several "up-to-date" to "up to date" 2017-08-23 12:17:22 -07:00
gitweb.conf.txt doc: use https links to avoid http redirect 2017-04-20 22:05:37 -07:00
gitweb.txt doc: use https links to Wikipedia to avoid http redirects 2017-05-15 13:04:54 +09:00
gitworkflows.txt Documentation: unify bottom "part of git suite" lines 2017-02-09 15:14:01 -08:00
glossary-content.txt Merge branch 'mr/doc-negative-pathspec' into maint 2017-10-18 14:19:12 +09:00
howto-index.sh
i18n.txt doc: camelCase the i18n config variables to improve readability 2017-07-17 15:11:26 -07:00
install-doc-quick.sh
install-webdoc.sh
line-range-format.txt
lint-gitlink.perl
mailmap.txt
manpage-1.72.xsl
manpage-base-url.xsl.in
manpage-base.xsl
manpage-bold-literal.xsl
manpage-normal.xsl
manpage-quote-apos.xsl
manpage-suppress-sp.xsl
merge-config.txt
merge-options.txt Merge branch 'wk/merge-options-gpg-sign-doc' 2017-10-19 14:45:43 +09:00
merge-strategies.txt merge-strategies: avoid implying that "-s theirs" exists 2017-09-25 14:34:23 +09:00
pretty-formats.txt Merge branch 'jk/trailers-parse' 2017-08-26 22:55:04 -07:00
pretty-options.txt Merge branch 'tr/doc-tt' into maint 2016-07-06 13:06:34 -07:00
pull-fetch-param.txt fetch doc: src side of refspec could be full SHA-1 2017-10-18 05:59:34 +09:00
rev-list-options.txt revision.h: introduce blob/tree walking in order of the commits 2017-11-16 11:12:51 +09:00
revisions.txt Merge branch 'vn/revision-shorthand-for-side-branch-log' 2017-04-19 21:37:25 -07:00
sequencer.txt
texi.xsl Documentation: add XSLT to fix DocBook for Texinfo 2017-01-23 10:56:53 -08:00
transfer-data-leaks.txt doc: mention transfer data leaks in more places 2016-11-14 11:23:07 -08:00
urls-remotes.txt
urls.txt
user-manual.conf
user-manual.txt treewide: correct several "up-to-date" to "up to date" 2017-08-23 12:17:22 -07:00