Commits

Junio C Hamano  committed fd2a759 Merge

Merge branch 'maint' of git://linux-nfs.org/~bfields/git into maint

* 'maint' of git://linux-nfs.org/~bfields/git:
user-manual: introduce "branch" and "branch head" differently
glossary: clean up cross-references
glossary: stop generating automatically
user-manual: Use def_ instead of ref_ for glossary references.
user-manual.txt: fix a tiny typo.
user-manual: run xsltproc without --nonet option

  • Participants
  • Parent commits cd67c8e, 81b6c95

Comments (0)

Files changed (4)

File Documentation/Makefile

 ARTICLES += hooks
 ARTICLES += everyday
 ARTICLES += git-tools
+ARTICLES += glossary
 # with their own formatting rules.
-SP_ARTICLES = glossary howto/revert-branch-rebase user-manual
+SP_ARTICLES = howto/revert-branch-rebase user-manual
 
 DOC_HTML += $(patsubst %,%.html,$(ARTICLES) $(SP_ARTICLES))
 
 	$(ASCIIDOC) -b docbook -d book $<
 
 XSLT = http://docbook.sourceforge.net/release/xsl/current/html/docbook.xsl
-XSLTOPTS = --nonet --xinclude --stringparam html.stylesheet docbook-xsl.css
+XSLTOPTS = --xinclude --stringparam html.stylesheet docbook-xsl.css
 
 user-manual.html: user-manual.xml
 	xsltproc $(XSLTOPTS) -o $@ $(XSLT) $<
 
-glossary.html : glossary.txt sort_glossary.pl
-	cat $< | \
-	perl sort_glossary.pl | \
-	$(ASCIIDOC) -b xhtml11 - > glossary.html
-
 howto-index.txt: howto-index.sh $(wildcard howto/*.txt)
 	rm -f $@+ $@
 	sh ./howto-index.sh $(wildcard howto/*.txt) >$@+

File Documentation/glossary.txt

-alternate object database::
-	Via the alternates mechanism, a repository can inherit part of its
-	object database from another object database, which is called
-	"alternate".
-
-bare repository::
-	A bare repository is normally an appropriately named
-	directory with a `.git` suffix that does not have a
-	locally checked-out copy of any of the files under revision
-	control.  That is, all of the `git` administrative and
-	control files that would normally be present in the
-	hidden `.git` sub-directory are directly present in
-	the `repository.git` directory instead, and no other files
-	are present and checked out.  Usually publishers of public
-	repositories make bare repositories available.
-
-blob object::
-	Untyped object, e.g. the contents of a file.
-
-branch::
-	A non-cyclical graph of revisions, i.e. the complete history of
-	a particular revision, which is called the branch head. The
-	branch heads are stored in `$GIT_DIR/refs/heads/`.
-
-cache::
-	Obsolete for: index.
-
-chain::
-	A list of objects, where each object in the list contains a
-	reference to its successor (for example, the successor of a commit
-	could be one of its parents).
-
-changeset::
-	BitKeeper/cvsps speak for "commit". Since git does not store
-	changes, but states, it really does not make sense to use
-	the term "changesets" with git.
-
-checkout::
-	The action of updating the working tree to a revision which was
-	stored in the object database.
-
-cherry-picking::
-	In SCM jargon, "cherry pick" means to choose a subset of
-	changes out of a series of changes (typically commits)
-	and record them as a new series of changes on top of
-	different codebase.  In GIT, this is performed by
-	"git cherry-pick" command to extract the change
-	introduced by an existing commit and to record it based
-	on the tip of the current branch as a new commit.
-
-clean::
-	A working tree is clean, if it corresponds to the revision
-	referenced by the current head.  Also see "dirty".
-
-commit::
-	As a verb: The action of storing the current state of the index in the
-	object database. The result is a revision.
-	As a noun: Short hand for commit object.
-
-commit object::
-	An object which contains the information about a particular
-	revision, such as parents, committer, author, date and the
-	tree object which corresponds to the top directory of the
-	stored revision.
-
-core git::
-	Fundamental data structures and utilities of git. Exposes only
-	limited source code management tools.
-
-DAG::
-	Directed acyclic graph. The commit objects form a directed acyclic
-	graph, because they have parents (directed), and the graph of commit
-	objects is acyclic (there is no chain which begins and ends with the
-	same object).
-
-dangling object::
-	An unreachable object which is not reachable even from other
-	unreachable objects; a dangling object has no references to it
-	from any reference or object in the repository.
-
-dircache::
+GIT Glossary
+============
+
+[[def_alternate_object_database]]alternate object database::
+	Via the alternates mechanism, a <<def_repository,repository>> can
+	inherit part of its <<def_object_database,object database>> from another
+	<<def_object_database,object database>>, which is called "alternate".
+
+[[def_bare_repository]]bare repository::
+	A <<def_bare_repository,bare repository>> is normally an appropriately
+	named <<def_directory,directory>> with a `.git` suffix that does not
+	have a locally checked-out copy of any of the files under
+	<<def_revision,revision>> control. That is, all of the `git`
+	administrative and control files that would normally be present in the
+	hidden `.git` sub-directory are directly present in the
+	`repository.git` directory instead,
+	and no other files are present and checked out. Usually publishers of
+	public repositories make bare repositories available.
+
+[[def_blob_object]]blob object::
+	Untyped <<def_object,object>>, e.g. the contents of a file.
+
+[[def_branch]]branch::
+	A non-cyclical graph of revisions, i.e. the complete history of a
+	particular <<def_revision,revision>>, which is called the
+	branch <<def_head,head>>. The heads
+	are stored in `$GIT_DIR/refs/heads/`.
+
+[[def_cache]]cache::
+	Obsolete for: <<def_index,index>>.
+
+[[def_chain]]chain::
+	A list of objects, where each <<def_object,object>> in the list contains
+	a reference to its successor (for example, the successor of a
+	<<def_commit,commit>> could be one of its parents).
+
+[[def_changeset]]changeset::
+	BitKeeper/cvsps speak for "<<def_commit,commit>>". Since git does not
+	store changes, but states, it really does not make sense to use the term
+	"changesets" with git.
+
+[[def_checkout]]checkout::
+	The action of updating the <<def_working_tree,working tree>> to a
+	<<def_revision,revision>> which was stored in the
+	<<def_object_database,object database>>.
+
+[[def_cherry-picking]]cherry-picking::
+	In <<def_SCM,SCM>> jargon, "cherry pick" means to choose a subset of
+	changes out of a series of changes (typically commits) and record them
+	as a new series of changes on top of different codebase. In GIT, this is
+	performed by "git cherry-pick" command to extract the change introduced
+	by an existing <<def_commit,commit>> and to record it based on the tip
+	of the current <<def_branch,branch>> as a new <<def_commit,commit>>.
+
+[[def_clean]]clean::
+	A <<def_working_tree,working tree>> is <<def_clean,clean>>, if it
+	corresponds to the <<def_revision,revision>> referenced by the current
+	<<def_head,head>>. Also see "<<def_dirty,dirty>>".
+
+[[def_commit]]commit::
+	As a verb: The action of storing the current state of the
+	<<def_index,index>> in the <<def_object_database,object database>>. The
+	result is a <<def_revision,revision>>. As a noun: Short hand for
+	<<def_commit_object,commit object>>.
+
+[[def_commit_object]]commit object::
+	An <<def_object,object>> which contains the information about a
+	particular <<def_revision,revision>>, such as parents, committer,
+	author, date and the <<def_tree_object,tree object>> which corresponds
+	to the top <<def_directory,directory>> of the stored
+	<<def_revision,revision>>.
+
+[[def_core_git]]core git::
+	Fundamental data structures and utilities of git. Exposes only limited
+	source code management tools.
+
+[[def_DAG]]DAG::
+	Directed acyclic graph. The <<def_commit,commit>> objects form a
+	directed acyclic graph, because they have parents (directed), and the
+	graph of <<def_commit,commit>> objects is acyclic (there is no
+	<<def_chain,chain>> which begins and ends with the same
+	<<def_object,object>>).
+
+[[def_dangling_object]]dangling object::
+	An <<def_unreachable_object,unreachable object>> which is not
+	<<def_reachable,reachable>> even from other unreachable objects; a
+	<<def_dangling_object,dangling object>> has no references to it from any
+	reference or <<def_object,object>> in the <<def_repository,repository>>.
+
+[[def_dircache]]dircache::
 	You are *waaaaay* behind.
 
-dirty::
-	A working tree is said to be dirty if it contains modifications
-	which have not been committed to the current branch.
-
-directory::
+[[def_directory]]directory::
 	The list you get with "ls" :-)
 
-ent::
-	Favorite synonym to "tree-ish" by some total geeks. See
+[[def_dirty]]dirty::
+	A <<def_working_tree,working tree>> is said to be <<def_dirty,dirty>> if
+	it contains modifications which have not been committed to the current
+	<<def_branch,branch>>.
+
+[[def_ent]]ent::
+	Favorite synonym to "<<def_tree-ish,tree-ish>>" by some total geeks. See
 	`http://en.wikipedia.org/wiki/Ent_(Middle-earth)` for an in-depth
-	explanation.  Avoid this term, not to confuse people.
-
-fast forward::
-	A fast-forward is a special type of merge where you have
-	a revision and you are "merging" another branch's changes
-	that happen to be a descendant of what you have.
-	In such these cases, you do not make a new merge commit but
-	instead just update to his revision. This will happen
-	frequently on a tracking branch of a remote repository.
-
-fetch::
-	Fetching a branch means to get the branch's head ref from a
-	remote repository, to find out which objects are missing from
-	the local object database, and to get them, too.
-
-file system::
-	Linus Torvalds originally designed git to be a user space file
-	system, i.e. the infrastructure to hold files and directories.
-	That ensured the efficiency and speed of git.
-
-git archive::
-	Synonym for repository (for arch people).
-
-grafts::
-	Grafts enables two otherwise different lines of development to be
-	joined together by recording fake ancestry information for commits.
-	This way you can make git pretend the set of parents a commit
-	has is different from what was recorded when the commit was created.
-	Configured via the `.git/info/grafts` file.
-
-hash::
-	In git's context, synonym to object name.
-
-head::
-	The top of a branch. It contains a ref to the corresponding
-	commit object.
-
-head ref::
-	A ref pointing to a head. Often, this is abbreviated to "head".
-	Head refs are stored in `$GIT_DIR/refs/heads/`.
-
-hook::
-	During the normal execution of several git commands,
-	call-outs are made to optional scripts that allow
-	a developer to add functionality or checking.
-	Typically, the hooks allow for a command to be pre-verified
-	and potentially aborted, and allow for a post-notification
-	after the operation is done.
-	The hook scripts are found in the `$GIT_DIR/hooks/` directory,
-	and are enabled by simply making them executable.
-
-index::
-	A collection of files with stat information, whose contents are
-	stored as objects. The index is a stored version of your working
-	tree. Truth be told, it can also contain a second, and even a third
-	version of a working tree, which are used when merging.
-
-index entry::
-	The information regarding a particular file, stored in the index.
-	An index entry can be unmerged, if a merge was started, but not
-	yet finished (i.e. if the index contains multiple versions of
-	that file).
-
-master::
-	The default development branch. Whenever you create a git
-	repository, a branch named "master" is created, and becomes
-	the active branch. In most cases, this contains the local
+	explanation. Avoid this term, not to confuse people.
+
+[[def_fast_forward]]fast forward::
+	A fast-forward is a special type of <<def_merge,merge>> where you have a
+	<<def_revision,revision>> and you are "merging" another
+	<<def_branch,branch>>'s changes that happen to be a descendant of what
+	you have. In such these cases, you do not make a new <<def_merge,merge>>
+	<<def_commit,commit>> but instead just update to his
+	<<def_revision,revision>>. This will happen frequently on a
+	<<def_tracking_branch,tracking branch>> of a remote
+	<<def_repository,repository>>.
+
+[[def_fetch]]fetch::
+	Fetching a <<def_branch,branch>> means to get the
+	<<def_branch,branch>>'s <<def_head_ref,head ref>> from a remote
+	<<def_repository,repository>>, to find out which objects are missing
+	from the local <<def_object_database,object database>>, and to get them,
+	too.
+
+[[def_file_system]]file system::
+	Linus Torvalds originally designed git to be a user space file system,
+	i.e. the infrastructure to hold files and directories. That ensured the
+	efficiency and speed of git.
+
+[[def_git_archive]]git archive::
+	Synonym for <<def_repository,repository>> (for arch people).
+
+[[def_grafts]]grafts::
+	Grafts enables two otherwise different lines of development to be joined
+	together by recording fake ancestry information for commits. This way
+	you can make git pretend the set of parents a <<def_commit,commit>> has
+	is different from what was recorded when the <<def_commit,commit>> was
+	created. Configured via the `.git/info/grafts` file.
+
+[[def_hash]]hash::
+	In git's context, synonym to <<def_object_name,object name>>.
+
+[[def_head]]head::
+	The top of a <<def_branch,branch>>. It contains a <<def_ref,ref>> to the
+	corresponding <<def_commit_object,commit object>>.
+
+[[def_head_ref]]head ref::
+	A <<def_ref,ref>> pointing to a <<def_head,head>>. Often, this is
+	abbreviated to "<<def_head,head>>". Head refs are stored in
+	`$GIT_DIR/refs/heads/`.
+
+[[def_hook]]hook::
+	During the normal execution of several git commands, call-outs are made
+	to optional scripts that allow a developer to add functionality or
+	checking. Typically, the hooks allow for a command to be pre-verified
+	and potentially aborted, and allow for a post-notification after the
+	operation is done. The <<def_hook,hook>> scripts are found in the
+	`$GIT_DIR/hooks/` <<def_directory,directory>>, and are enabled by simply
+	making them executable.
+
+[[def_index]]index::
+	A collection of files with stat information, whose contents are stored
+	as objects. The <<def_index,index>> is a stored version of your working
+	<<def_tree,tree>>. Truth be told, it can also contain a second, and even
+	a third version of a <<def_working_tree,working tree>>, which are used
+	when merging.
+
+[[def_index_entry]]index entry::
+	The information regarding a particular file, stored in the
+	<<def_index,index>>. An <<def_index_entry,index entry>> can be unmerged,
+	if a <<def_merge,merge>> was started, but not yet finished (i.e. if the
+	<<def_index,index>> contains multiple versions of that file).
+
+[[def_master]]master::
+	The default development <<def_branch,branch>>. Whenever you create a git
+	<<def_repository,repository>>, a <<def_branch,branch>> named
+	"<<def_master,master>>" is created, and becomes the active
+	<<def_branch,branch>>. In most cases, this contains the local
 	development, though that is purely conventional and not required.
 
-merge::
-	To merge branches means to try to accumulate the changes since a
-	common ancestor and apply them to the first branch. An automatic
-	merge uses heuristics to accomplish that. Evidently, an automatic
-	merge can fail.
-
-object::
-	The unit of storage in git. It is uniquely identified by
-	the SHA1 of its contents. Consequently, an object can not
-	be changed.
-
-object database::
-	Stores a set of "objects", and an individual object is identified
-	by its object name. The objects usually live in `$GIT_DIR/objects/`.
-
-object identifier::
-	Synonym for object name.
-
-object name::
-	The unique identifier of an object. The hash of the object's contents
-	using the Secure Hash Algorithm 1 and usually represented by the 40
-	character hexadecimal encoding of the hash of the object (possibly
-	followed by a white space).
-
-object type::
-	One of the identifiers "commit","tree","tag" and "blob" describing
-	the type of an object.
-
-octopus::
-	To merge more than two branches. Also denotes an intelligent
-	predator.
-
-origin::
-	The default upstream repository. Most projects have at
-	least one upstream project which they track. By default
-	'origin' is used for that purpose.  New upstream updates
+[[def_merge]]merge::
+	To <<def_merge,merge>> branches means to try to accumulate the changes
+	since a common ancestor and apply them to the first
+	<<def_branch,branch>>. An automatic <<def_merge,merge>> uses heuristics
+	to accomplish that. Evidently, an automatic <<def_merge,merge>> can
+	fail.
+
+[[def_object]]object::
+	The unit of storage in git. It is uniquely identified by the
+	<<def_SHA1,SHA1>> of its contents. Consequently, an
+	<<def_object,object>> can not be changed.
+
+[[def_object_database]]object database::
+	Stores a set of "objects", and an individual <<def_object,object>> is
+	identified by its <<def_object_name,object name>>. The objects usually
+	live in `$GIT_DIR/objects/`.
+
+[[def_object_identifier]]object identifier::
+	Synonym for <<def_object_name,object name>>.
+
+[[def_object_name]]object name::
+	The unique identifier of an <<def_object,object>>. The <<def_hash,hash>>
+	of the <<def_object,object>>'s contents using the Secure Hash Algorithm
+	1 and usually represented by the 40 character hexadecimal encoding of
+	the <<def_hash,hash>> of the <<def_object,object>> (possibly followed by
+	a white space).
+
+[[def_object_type]]object type::
+	One of the identifiers
+	"<<def_commit,commit>>","<<def_tree,tree>>","<<def_tag,tag>>" or "<<def_blob_object,blob>>"
+	describing the type of an <<def_object,object>>.
+
+[[def_octopus]]octopus::
+	To <<def_merge,merge>> more than two branches. Also denotes an
+	intelligent predator.
+
+[[def_origin]]origin::
+	The default upstream <<def_repository,repository>>. Most projects have
+	at least one upstream project which they track. By default
+	'<<def_origin,origin>>' is used for that purpose. New upstream updates
 	will be fetched into remote tracking branches named
 	origin/name-of-upstream-branch, which you can see using
-	"git branch -r".
+	"git <<def_branch,branch>> -r".
 
-pack::
-	A set of objects which have been compressed into one file (to save
-	space or to transmit them efficiently).
+[[def_pack]]pack::
+	A set of objects which have been compressed into one file (to save space
+	or to transmit them efficiently).
 
-pack index::
+[[def_pack_index]]pack index::
 	The list of identifiers, and other information, of the objects in a
-	pack, to assist in efficiently accessing the contents of a pack.
-
-parent::
-	A commit object contains a (possibly empty) list of the logical
-	predecessor(s) in the line of development, i.e. its parents.
-
-pickaxe::
-	The term pickaxe refers to an option to the diffcore routines
-	that help select changes that add or delete a given text string.
-	With the --pickaxe-all option, it can be used to view the
-	full changeset that introduced or removed, say, a particular
-	line of text.  See gitlink:git-diff[1].
-
-plumbing::
-	Cute name for core git.
-
-porcelain::
-	Cute name for programs and program suites depending on core git,
-	presenting a high level access to core git. Porcelains expose
-	more of a SCM interface than the plumbing.
-
-pull::
-	Pulling a branch means to fetch it and merge it.
-
-push::
-	Pushing a branch means to get the branch's head ref from a remote
-	repository, find out if it is an ancestor to the branch's local
-	head ref is a direct, and in that case, putting all objects, which
-	are reachable from the local head ref, and which are missing from
-	the remote repository, into the remote object database, and updating
-	the remote head ref. If the remote head is not an ancestor to the
-	local head, the push fails.
-
-reachable::
-	All of the ancestors of a given commit are said to be reachable from
-	that commit.  More generally, one object is reachable from another if
-	we can reach the one from the other by a chain that follows tags to
-	whatever they tag, commits to their parents or trees, and trees to the
-	trees or blobs that they contain.
-
-rebase::
-	To clean a branch by starting from the head of the main line of
-	development ("master"), and reapply the (possibly cherry-picked)
-	changes from that branch.
-
-ref::
-	A 40-byte hex representation of a SHA1 or a name that denotes
-	a particular object. These may be stored in `$GIT_DIR/refs/`.
-
-refspec::
-	A refspec is used by fetch and push to describe the mapping
-	between remote ref and local ref.  They are combined with
-	a colon in the format <src>:<dst>, preceded by an optional
-	plus sign, +.  For example:
-	`git fetch $URL refs/heads/master:refs/heads/origin`
-	means "grab the master branch head from the $URL and store
-	it as my origin branch head".
-	And `git push $URL refs/heads/master:refs/heads/to-upstream`
-	means "publish my master branch head as to-upstream branch
-	at $URL".   See also gitlink:git-push[1]
-
-repository::
-	A collection of refs together with an object database containing
-	all objects, which are reachable from the refs, possibly accompanied
-	by meta data from one or more porcelains. A repository can
-	share an object database with other repositories.
-
-resolve::
-	The action of fixing up manually what a failed automatic merge
-	left behind.
-
-revision::
-	A particular state of files and directories which was stored in
-	the object database. It is referenced by a commit object.
-
-rewind::
-	To throw away part of the development, i.e. to assign the head to
-	an earlier revision.
-
-SCM::
+	<<def_pack,pack>>, to assist in efficiently accessing the contents of a
+	<<def_pack,pack>>.
+
+[[def_parent]]parent::
+	A <<def_commit_object,commit object>> contains a (possibly empty) list
+	of the logical predecessor(s) in the line of development, i.e. its
+	parents.
+
+[[def_pickaxe]]pickaxe::
+	The term <<def_pickaxe,pickaxe>> refers to an option to the diffcore
+	routines that help select changes that add or delete a given text
+	string. With the --pickaxe-all option, it can be used to view the full
+	<<def_changeset,changeset>> that introduced or removed, say, a
+	particular line of text. See gitlink:git-diff[1].
+
+[[def_plumbing]]plumbing::
+	Cute name for <<def_core_git,core git>>.
+
+[[def_porcelain]]porcelain::
+	Cute name for programs and program suites depending on
+	<<def_core_git,core git>>, presenting a high level access to
+	<<def_core_git,core git>>. Porcelains expose more of a <<def_SCM,SCM>>
+	interface than the <<def_plumbing,plumbing>>.
+
+[[def_pull]]pull::
+	Pulling a <<def_branch,branch>> means to <<def_fetch,fetch>> it and
+	<<def_merge,merge>> it.
+
+[[def_push]]push::
+	Pushing a <<def_branch,branch>> means to get the <<def_branch,branch>>'s
+	<<def_head_ref,head ref>> from a remote <<def_repository,repository>>,
+	find out if it is an ancestor to the <<def_branch,branch>>'s local
+	<<def_head_ref,head ref>> is a direct, and in that case, putting all
+	objects, which are <<def_reachable,reachable>> from the local
+	<<def_head_ref,head ref>>, and which are missing from the remote
+	<<def_repository,repository>>, into the remote
+	<<def_object_database,object database>>, and updating the remote
+	<<def_head_ref,head ref>>. If the remote <<def_head,head>> is not an
+	ancestor to the local <<def_head,head>>, the <<def_push,push>> fails.
+
+[[def_reachable]]reachable::
+	All of the ancestors of a given <<def_commit,commit>> are said to be
+	<<def_reachable,reachable>> from that <<def_commit,commit>>. More
+	generally, one <<def_object,object>> is <<def_reachable,reachable>> from
+	another if we can reach the one from the other by a <<def_chain,chain>>
+	that follows <<def_tag,tags>> to whatever they tag,
+	<<def_commit_object,commits>> to their parents or trees, and
+	<<def_tree_object,trees>> to the trees or <<def_blob_object,blobs>>
+	that they contain.
+
+[[def_rebase]]rebase::
+	To reapply a series of changes from a <<def_branch,branch>> to a
+	different base, and reset the <<def_head,head>> of that branch
+	to the result.
+
+[[def_ref]]ref::
+	A 40-byte hex representation of a <<def_SHA1,SHA1>> or a name that
+	denotes a particular <<def_object,object>>. These may be stored in
+	`$GIT_DIR/refs/`.
+
+[[def_refspec]]refspec::
+	A <<def_refspec,refspec>> is used by <<def_fetch,fetch>> and
+	<<def_push,push>> to describe the mapping between remote <<def_ref,ref>>
+	and local <<def_ref,ref>>. They are combined with a colon in the format
+	<src>:<dst>, preceded by an optional plus sign, +. For example: `git
+	fetch $URL refs/heads/master:refs/heads/origin` means
+	"grab the master <<def_branch,branch>> <<def_head,head>>
+	from the $URL and store it as my origin
+	<<def_branch,branch>> <<def_head,head>>". And `git <<def_push,push>>
+	$URL refs/heads/master:refs/heads/to-upstream` means
+	"publish my master <<def_branch,branch>>
+	<<def_head,head>> as to-upstream <<def_branch,branch>> at $URL". See
+	also gitlink:git-push[1]
+
+[[def_repository]]repository::
+	A collection of refs together with an <<def_object_database,object
+	database>> containing all objects which are <<def_reachable,reachable>>
+	from the refs, possibly accompanied by meta data from one or more
+	porcelains. A <<def_repository,repository>> can share an
+	<<def_object_database,object database>> with other repositories.
+
+[[def_resolve]]resolve::
+	The action of fixing up manually what a failed automatic
+	<<def_merge,merge>> left behind.
+
+[[def_revision]]revision::
+	A particular state of files and directories which was stored in the
+	<<def_object_database,object database>>. It is referenced by a
+	<<def_commit_object,commit object>>.
+
+[[def_rewind]]rewind::
+	To throw away part of the development, i.e. to assign the
+	<<def_head,head>> to an earlier <<def_revision,revision>>.
+
+[[def_SCM]]SCM::
 	Source code management (tool).
 
-SHA1::
-	Synonym for object name.
-
-shallow repository::
-	A shallow repository has an incomplete history some of
-	whose commits have parents cauterized away (in other
-	words, git is told to pretend that these commits do not
-	have the parents, even though they are recorded in the
-	commit object).  This is sometimes useful when you are
-	interested only in the recent history of a project even
-	though the real history recorded in the upstream is
-	much larger.  A shallow repository is created by giving
-	`--depth` option to gitlink:git-clone[1], and its
-	history can be later deepened with gitlink:git-fetch[1].
-
-symref::
-	Symbolic reference: instead of containing the SHA1 id itself, it
-	is of the format 'ref: refs/some/thing' and when referenced, it
-	recursively dereferences to this reference. 'HEAD' is a prime
-	example of a symref. Symbolic references are manipulated with
-	the gitlink:git-symbolic-ref[1] command.
-
-topic branch::
-	A regular git branch that is used by a developer to
-	identify a conceptual line of development.  Since branches
-	are very easy and inexpensive, it is often desirable to
-	have several small branches that each contain very well
-	defined concepts or small incremental yet related changes.
-
-tracking branch::
-	A regular git branch that is used to follow changes from
-	another repository.  A tracking branch should not contain
-	direct modifications or have local commits made to it.
-	A tracking branch can usually be identified as the
-	right-hand-side ref in a Pull: refspec.
-
-tree object::
-	An object containing a list of file names and modes along with refs
-	to the associated blob and/or tree objects. A tree is equivalent
-	to a directory.
-
-tree::
-	Either a working tree, or a tree object together with the
-	dependent blob and tree objects (i.e. a stored representation
-	of a working tree).
-
-tree-ish::
-	A ref pointing to either a commit object, a tree object, or a
-	tag object pointing to a tag or commit or tree object.
-
-tag object::
-	An object containing a ref pointing to another object, which can
-	contain a message just like a commit object. It can also
-	contain a (PGP) signature, in which case it is called a "signed
-	tag object".
-
-tag::
-	A ref pointing to a tag or commit object. In contrast to a head,
-	a tag is not changed by a commit. Tags (not tag objects) are
-	stored in `$GIT_DIR/refs/tags/`. A git tag has nothing to do with
-	a Lisp tag (which is called object type in git's context).
-	A tag is most typically used to mark a particular point in the
-	commit ancestry chain.
-
-unmerged index::
-	An index which contains unmerged index entries.
-
-unreachable object::
-	An object which is not reachable from a branch, tag, or any
-	other reference.
-
-working tree::
-	The set of files and directories currently being worked on,
-	i.e. you can work in your working tree without using git at all.
-
+[[def_SHA1]]SHA1::
+	Synonym for <<def_object_name,object name>>.
+
+[[def_shallow_repository]]shallow repository::
+	A <<def_shallow_repository,shallow repository>> has an incomplete
+	history some of whose commits have parents cauterized away (in other
+	words, git is told to pretend that these commits do not have the
+	parents, even though they are recorded in the <<def_commit_object,commit
+	object>>). This is sometimes useful when you are interested only in the
+	recent history of a project even though the real history recorded in the
+	upstream is much larger. A <<def_shallow_repository,shallow repository>>
+	is created by giving the `--depth` option to gitlink:git-clone[1], and
+	its history can be later deepened with gitlink:git-fetch[1].
+
+[[def_symref]]symref::
+	Symbolic reference: instead of containing the <<def_SHA1,SHA1>> id
+	itself, it is of the format 'ref: refs/some/thing' and when
+	referenced, it recursively dereferences to this reference. 'HEAD' is a
+	prime example of a <<def_symref,symref>>. Symbolic references are
+	manipulated with the gitlink:git-symbolic-ref[1] command.
+
+[[def_tag]]tag::
+	A <<def_ref,ref>> pointing to a <<def_tag,tag>> or
+	<<def_commit_object,commit object>>. In contrast to a <<def_head,head>>,
+	a tag is not changed by a <<def_commit,commit>>. Tags (not
+	<<def_tag_object,tag objects>>) are stored in `$GIT_DIR/refs/tags/`. A
+	git tag has nothing to do with a Lisp tag (which would be
+	called an <<def_object_type,object type>> in git's context). A
+	tag is most typically used to mark a particular point in the
+	<<def_commit,commit>> ancestry <<def_chain,chain>>.
+
+[[def_tag_object]]tag object::
+	An <<def_object,object>> containing a <<def_ref,ref>> pointing to
+	another <<def_object,object>>, which can contain a message just like a
+	<<def_commit_object,commit object>>. It can also contain a (PGP)
+	signature, in which case it is called a "signed <<def_tag_object,tag
+	object>>".
+
+[[def_topic_branch]]topic branch::
+	A regular git <<def_branch,branch>> that is used by a developer to
+	identify a conceptual line of development. Since branches are very easy
+	and inexpensive, it is often desirable to have several small branches
+	that each contain very well defined concepts or small incremental yet
+	related changes.
+
+[[def_tracking_branch]]tracking branch::
+	A regular git <<def_branch,branch>> that is used to follow changes from
+	another <<def_repository,repository>>. A <<def_tracking_branch,tracking
+	branch>> should not contain direct modifications or have local commits
+	made to it. A <<def_tracking_branch,tracking branch>> can usually be
+	identified as the right-hand-side <<def_ref,ref>> in a Pull:
+	<<def_refspec,refspec>>.
+
+[[def_tree]]tree::
+	Either a <<def_working_tree,working tree>>, or a <<def_tree_object,tree
+	object>> together with the dependent blob and <<def_tree,tree>> objects
+	(i.e. a stored representation of a <<def_working_tree,working tree>>).
+
+[[def_tree_object]]tree object::
+	An <<def_object,object>> containing a list of file names and modes along
+	with refs to the associated blob and/or tree objects. A
+	<<def_tree,tree>> is equivalent to a <<def_directory,directory>>.
+
+[[def_tree-ish]]tree-ish::
+	A <<def_ref,ref>> pointing to either a <<def_commit_object,commit
+	object>>, a <<def_tree_object,tree object>>, or a <<def_tag_object,tag
+	object>> pointing to a <<def_tag,tag>> or <<def_commit,commit>> or
+	<<def_tree_object,tree object>>.
+
+[[def_unmerged_index]]unmerged index::
+	An <<def_index,index>> which contains unmerged
+	<<def_index_entry,index entries>>.
+
+[[def_unreachable_object]]unreachable object::
+	An <<def_object,object>> which is not <<def_reachable,reachable>> from a
+	<<def_branch,branch>>, <<def_tag,tag>>, or any other reference.
+
+[[def_working_tree]]working tree::
+	The set of files and directories currently being worked on, i.e. you can
+	work in your <<def_working_tree,working tree>> without using git at all.

File Documentation/sort_glossary.pl

-#!/usr/bin/perl
-
-%terms=();
-
-while(<>) {
-	if(/^(\S.*)::$/) {
-		my $term=$1;
-		if(defined($terms{$term})) {
-			die "$1 defined twice\n";
-		}
-		$terms{$term}="";
-		LOOP: while(<>) {
-			if(/^$/) {
-				last LOOP;
-			}
-			if(/^	\S/) {
-				$terms{$term}.=$_;
-			} else {
-				die "Error 1: $_";
-			}
-		}
-	}
-}
-
-sub format_tab_80 ($) {
-	my $text=$_[0];
-	my $result="";
-	$text=~s/\s+/ /g;
-	$text=~s/^\s+//;
-	while($text=~/^(.{1,72})(|\s+(\S.*)?)$/) {
-		$result.="	".$1."\n";
-		$text=$3;
-	}
-	return $result;
-}
-
-sub no_spaces ($) {
-	my $result=$_[0];
-	$result=~tr/ /_/;
-	return $result;
-}
-
-print 'GIT Glossary
-============
-
-This list is sorted alphabetically:
-
-';
-
-@keys=sort {uc($a) cmp uc($b)} keys %terms;
-$pattern='(\b(?<!link:git-)'.join('\b|\b(?<!-)',reverse @keys).'\b)';
-foreach $key (@keys) {
-	$terms{$key}=~s/$pattern/sprintf "<<ref_".no_spaces($1).",$1>>";/eg;
-	print '[[ref_'.no_spaces($key).']]'.$key."::\n"
-		.format_tab_80($terms{$key})."\n";
-}
-
-print '
-
-Author
-------
-Written by Johannes Schindelin <Johannes.Schindelin@gmx.de> and
-the git-list <git@vger.kernel.org>.
-
-GIT
----
-Part of the link:git.html[git] suite
-';
-

File Documentation/user-manual.txt

 collection of interrelated snapshots (versions) of the project's
 contents.
 
-A single git repository may contain multiple branches.  Each branch
-is a bookmark referencing a particular point in the project history.
-The gitlink:git-branch[1] command shows you the list of branches:
+A single git repository may contain multiple branches.  It keeps track
+of them by keeping a list of <<def_head,heads>> which reference the
+latest version on each branch; the gitlink:git-branch[1] command shows
+you the list of branch heads:
 
 ------------------------------------------------
 $ git branch
 * master
 ------------------------------------------------
 
-A freshly cloned repository contains a single branch, named "master",
-and the working directory contains the version of the project
-referred to by the master branch.
+A freshly cloned repository contains a single branch head, named
+"master", and working directory is initialized to the state of
+the project referred to by "master".
 
-Most projects also use tags.  Tags, like branches, are references
-into the project's history, and can be listed using the
+Most projects also use <<def_tag,tags>>.  Tags, like heads, are
+references into the project's history, and can be listed using the
 gitlink:git-tag[1] command:
 
 ------------------------------------------------
 ------------------------------------------------
 
 Tags are expected to always point at the same version of a project,
-while branches are expected to advance as development progresses.
+while heads are expected to advance as development progresses.
 
-Create a new branch pointing to one of these versions and check it
+Create a new branch head pointing to one of these versions and check it
 out using gitlink:git-checkout[1]:
 
 ------------------------------------------------
 $ git reset --hard v2.6.17
 ------------------------------------------------
 
-Note that if the current branch was your only reference to a
+Note that if the current branch head was your only reference to a
 particular point in history, then resetting that branch may leave you
-with no way to find the history it used to point to; so use this
-command carefully.
+with no way to find the history it used to point to; so use this command
+carefully.
 
 Understanding History: Commits
 ------------------------------
 Understanding history: What is a branch?
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-Though we've been using the word "branch" to mean a kind of reference
-to a particular commit, the word branch is also commonly used to
-refer to the line of commits leading up to that point.  In the
-example above, git may think of the branch named "A" as just a
-pointer to one particular commit, but we may refer informally to the
-line of three commits leading up to that point as all being part of
+When we need to be precise, we will use the word "branch" to mean a line
+of development, and "branch head" (or just "head") to mean a reference
+to the most recent commit on a branch.  In the example above, the branch
+head named "A" is a pointer to one particular commit, but we refer to
+the line of three commits leading up to that point as all being part of
 "branch A".
 
-If we need to make it clear that we're just talking about the most
-recent commit on the branch, we may refer to that commit as the
-"head" of the branch.
+However, when no confusion will result, we often just use the term
+"branch" both for branches and for branch heads.
 
 Manipulating branches
 ---------------------
 then you can just pull changes from each other's repositories
 directly; note that all of the commands (gitlink:git-clone[1],
 git-fetch[1], git-pull[1], etc.) that accept a URL as an argument
-will also accept a local file patch; so, for example, you can
+will also accept a local directory name; so, for example, you can
 use
 
 -------------------------------------------------
 contrast, running "git prune" while somebody is actively changing the 
 repository is a *BAD* idea).
 
-Glossary of git terms
-=====================
-
 include::glossary.txt[]
 
 Notes and todo list for this manual