<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">\r
<head>\r
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />\r
-<meta name="generator" content="AsciiDoc 7.0.1" />\r
+<meta name="generator" content="AsciiDoc 7.0.2" />\r
<style type="text/css">\r
/* Debug borders */\r
p, li, dt, dd, div, pre, h1, h2, h3, h4, h5, h6 {\r
</p>\r
</dd>\r
<dt>\r
+<a id="ref_bare_repository"></a>bare repository\r
+</dt>\r
+<dd>\r
+<p>\r
+ A <a href="#ref_bare_repository">bare repository</a> is normally an appropriately\r
+ named <a href="#ref_directory">directory</a> with a <tt>.git</tt> suffix that does not\r
+ have a locally checked-out copy of any of the files under\r
+ <a href="#ref_revision">revision</a> control. That is, all of the <tt>git</tt>\r
+ administrative and control files that would normally be present in the\r
+ hidden <tt>.git</tt> sub-<a href="#ref_directory">directory</a> are directly present in\r
+ the <tt><a href="#ref_repository">repository</a>.git</tt> <a href="#ref_directory">directory</a>\r
+ instead, and no other files are present and checked out. Usually\r
+ publishers of public repositories make bare repositories available.\r
+</p>\r
+</dd>\r
+<dt>\r
<a id="ref_blob_object"></a>blob object\r
</dt>\r
<dd>\r
</p>\r
</dd>\r
<dt>\r
+<a id="ref_cherry-picking"></a>cherry-picking\r
+</dt>\r
+<dd>\r
+<p>\r
+ In <a href="#ref_SCM">SCM</a> jargon, "cherry pick" means to choose a subset of\r
+ changes out of a series of changes (typically commits) and record them\r
+ as a new series of changes on top of different codebase. In GIT, this is\r
+ performed by "git cherry-pick" command to extract the change introduced\r
+ by an existing <a href="#ref_commit">commit</a> and to record it based on the tip\r
+ of the current <a href="#ref_branch">branch</a> as a new <a href="#ref_commit">commit</a>.\r
+</p>\r
+</dd>\r
+<dt>\r
<a id="ref_clean"></a>clean\r
</dt>\r
<dd>\r
<p>\r
A <a href="#ref_working_tree">working tree</a> is <a href="#ref_clean">clean</a>, if it\r
corresponds to the <a href="#ref_revision">revision</a> referenced by the current\r
- <a href="#ref_head">head</a>.\r
+ <a href="#ref_head">head</a>. Also see "<a href="#ref_dirty">dirty</a>".\r
</p>\r
</dd>\r
<dt>\r
</p>\r
</dd>\r
<dt>\r
+<a id="ref_fast_forward"></a>fast forward\r
+</dt>\r
+<dd>\r
+<p>\r
+ A fast-forward is a special type of <a href="#ref_merge">merge</a> where you have a\r
+ <a href="#ref_revision">revision</a> and you are "merging" another\r
+ <a href="#ref_branch">branch</a>'s changes that happen to be a descendant of what\r
+ you have. In such these cases, you do not make a new <a href="#ref_merge">merge</a>\r
+ <a href="#ref_commit">commit</a> but instead just update to his\r
+ <a href="#ref_revision">revision</a>. This will happen frequently on a\r
+ <a href="#ref_tracking_branch">tracking branch</a> of a remote\r
+ <a href="#ref_repository">repository</a>.\r
+</p>\r
+</dd>\r
+<dt>\r
<a id="ref_fetch"></a>fetch\r
</dt>\r
<dd>\r
</p>\r
</dd>\r
<dt>\r
+<a id="ref_hook"></a>hook\r
+</dt>\r
+<dd>\r
+<p>\r
+ During the normal execution of several git commands, call-outs are made\r
+ to optional scripts that allow a developer to add functionality or\r
+ checking. Typically, the hooks allow for a command to be pre-verified\r
+ and potentially aborted, and allow for a post-notification after the\r
+ operation is done. The <a href="#ref_hook">hook</a> scripts are found in the\r
+ <tt>$GIT_DIR/hooks/</tt> <a href="#ref_directory">directory</a>, and are enabled by simply\r
+ making them executable.\r
+</p>\r
+</dd>\r
+<dt>\r
<a id="ref_index"></a>index\r
</dt>\r
<dd>\r
</dt>\r
<dd>\r
<p>\r
- The default <a href="#ref_branch">branch</a>. Whenever you create a git\r
+ The default development <a href="#ref_branch">branch</a>. Whenever you create a git\r
<a href="#ref_repository">repository</a>, a <a href="#ref_branch">branch</a> named\r
"<a href="#ref_master">master</a>" is created, and becomes the active\r
<a href="#ref_branch">branch</a>. In most cases, this contains the local\r
- development.\r
+ development, though that is purely conventional and not required.\r
</p>\r
</dd>\r
<dt>\r
</dt>\r
<dd>\r
<p>\r
- The default upstream <a href="#ref_branch">branch</a>. Most projects have one\r
- upstream project which they track, and by default\r
- <em><a href="#ref_origin">origin</a></em> is used for that purpose. New updates from\r
- upstream will be fetched into this <a href="#ref_branch">branch</a>; you should\r
- never <a href="#ref_commit">commit</a> to it yourself.\r
+ The default upstream <a href="#ref_tracking_branch">tracking branch</a>. Most\r
+ projects have at least one upstream project which they track. By default\r
+ <em><a href="#ref_origin">origin</a></em> is used for that purpose. New upstream updates\r
+ will be fetched into this <a href="#ref_branch">branch</a>; you should never\r
+ <a href="#ref_commit">commit</a> to it yourself.\r
</p>\r
</dd>\r
<dt>\r
</p>\r
</dd>\r
<dt>\r
+<a id="ref_pickaxe"></a>pickaxe\r
+</dt>\r
+<dd>\r
+<p>\r
+ The term <a href="#ref_pickaxe">pickaxe</a> refers to an option to the diffcore\r
+ routines that help select changes that add or delete a given text\r
+ string. With the —<a href="#ref_pickaxe">pickaxe</a>-all option, it can be used to\r
+ view the full <a href="#ref_changeset">changeset</a> that introduced or removed,\r
+ say, a particular line of text. See <a href="git-diff.html">git-diff(1)</a>.\r
+</p>\r
+</dd>\r
+<dt>\r
<a id="ref_plumbing"></a>plumbing\r
</dt>\r
<dd>\r
</dt>\r
<dd>\r
<p>\r
- A 40-byte hex representation of a <a href="#ref_SHA1">SHA1</a> pointing to a\r
- particular <a href="#ref_object">object</a>. These may be stored in\r
+ A 40-byte hex representation of a <a href="#ref_SHA1">SHA1</a> or a name that\r
+ denotes a particular <a href="#ref_object">object</a>. These may be stored in\r
<tt>$GIT_DIR/refs/</tt>.\r
</p>\r
</dd>\r
<dt>\r
+<a id="ref_refspec"></a>refspec\r
+</dt>\r
+<dd>\r
+<p>\r
+ A <a href="#ref_refspec">refspec</a> is used by <a href="#ref_fetch">fetch</a> and\r
+ <a href="#ref_push">push</a> to describe the mapping between remote <a href="#ref_ref">ref</a>\r
+ and local <a href="#ref_ref">ref</a>. They are combined with a colon in the format\r
+ <src>:<dst>, preceded by an optional plus sign, +. For example: <tt>git\r
+ <a href="#ref_fetch">fetch</a> $URL\r
+ refs/heads/<a href="#ref_master">master</a>:refs/heads/<a href="#ref_origin">origin</a></tt> means\r
+ "grab the <a href="#ref_master">master</a> <a href="#ref_branch">branch</a> <a href="#ref_head">head</a>\r
+ from the $URL and store it as my <a href="#ref_origin">origin</a>\r
+ <a href="#ref_branch">branch</a> <a href="#ref_head">head</a>". And <tt>git <a href="#ref_push">push</a>\r
+ $URL refs/heads/<a href="#ref_master">master</a>:refs/heads/to-upstream</tt> means\r
+ "publish my <a href="#ref_master">master</a> <a href="#ref_branch">branch</a>\r
+ <a href="#ref_head">head</a> as to-upstream <a href="#ref_master">master</a> <a href="#ref_head">head</a>\r
+ at $URL". See also <a href="git-push.html">git-push(1)</a>\r
+</p>\r
+</dd>\r
+<dt>\r
<a id="ref_repository"></a>repository\r
</dt>\r
<dd>\r
</p>\r
</dd>\r
<dt>\r
+<a id="ref_topic_branch"></a>topic branch\r
+</dt>\r
+<dd>\r
+<p>\r
+ A regular git <a href="#ref_branch">branch</a> that is used by a developer to\r
+ identify a conceptual line of development. Since branches are very easy\r
+ and inexpensive, it is often desirable to have several small branches\r
+ that each contain very well defined concepts or small incremental yet\r
+ related changes.\r
+</p>\r
+</dd>\r
+<dt>\r
+<a id="ref_tracking_branch"></a>tracking branch\r
+</dt>\r
+<dd>\r
+<p>\r
+ A regular git <a href="#ref_branch">branch</a> that is used to follow changes from\r
+ another <a href="#ref_repository">repository</a>. A <a href="#ref_tracking_branch">tracking branch</a> should not contain direct modifications or have local commits\r
+ made to it. A <a href="#ref_tracking_branch">tracking branch</a> can usually be\r
+ identified as the right-hand-side <a href="#ref_ref">ref</a> in a Pull:\r
+ <a href="#ref_refspec">refspec</a>.\r
+</p>\r
+</dd>\r
+<dt>\r
<a id="ref_tree"></a>tree\r
</dt>\r
<dd>\r
</div>\r
<div id="footer">\r
<div id="footer-text">\r
-Last updated 10-Jan-2006 16:53:50 PDT\r
+Last updated 04-May-2006 08:01:37 UTC\r
</div>\r
</div>\r
</body>\r
-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 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).
-
-SHA1::
- Synonym for object name.
-
-object identifier::
- Synonym for object name.
-
-hash::
- In git's context, synonym to object name.
+alternate object database::
+ Via the alternates mechanism, a repository can inherit part of its
+ object database from another object database, which is called
+ "alternate".
-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/`.
+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.
-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).
-
-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).
-
-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).
-
-unmerged index:
- An index which contains unmerged index entries.
+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.
-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.
-
-directory::
- The list you get with "ls" :-)
+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).
-revision::
- A particular state of files and directories which was stored in
- the object database. It is referenced by a commit object.
+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.
tree object which corresponds to the top directory of the
stored revision.
-parent::
- A commit object contains a (possibly empty) list of the logical
- predecessor(s) in the line of development, i.e. its parents.
+core git::
+ Fundamental data structures and utilities of git. Exposes only
+ limited source code management tools.
-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.
+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).
-clean::
- A working tree is clean, if it corresponds to the revision
- referenced by the current head.
+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.
-head::
- The top of a branch. It contains a ref to the corresponding
- commit object.
+directory::
+ The list you get with "ls" :-)
-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/`.
+ent::
+ Favorite synonym to "tree-ish" by some total geeks. See
+ `http://en.wikipedia.org/wiki/Ent_(Middle-earth)` for an in-depth
+ explanation.
-master::
- The default 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 development.
+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.
-origin::
- The default upstream branch. Most projects have one upstream
- project which they track, and by default 'origin' is used for
- that purpose. New updates from upstream will be fetched into
- this branch; you should never commit to it yourself.
+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.
-ref::
- A 40-byte hex representation of a SHA1 pointing to a particular
- object. These may be stored in `$GIT_DIR/refs/`.
+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).
+
+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/`.
-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.
+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.
-ent::
- Favorite synonym to "tree-ish" by some total geeks. See
- `http://en.wikipedia.org/wiki/Ent_(Middle-earth)` for an in-depth
- explanation.
+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.
-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".
+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).
-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.
+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
+ development, though that is purely conventional and not required.
merge::
To merge branches means to try to accumulate the changes since a
merge uses heuristics to accomplish that. Evidently, an automatic
merge can fail.
-octopus::
- To merge more than two branches. Also denotes an intelligent
- predator.
+object::
+ The unit of storage in git. It is uniquely identified by
+ the SHA1 of its contents. Consequently, an object can not
+ be changed.
-resolve::
- The action of fixing up manually what a failed automatic merge
- left behind.
+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/`.
-rewind::
- To throw away part of the development, i.e. to assign the head to
- an earlier revision.
+object identifier::
+ Synonym for object name.
-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.
+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).
-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.
+object type:
+ One of the identifiers "commit","tree","tag" and "blob" describing
+ the type of an object.
-git archive::
- Synonym for repository (for arch people).
+octopus::
+ To merge more than two branches. Also denotes an intelligent
+ predator.
-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.
+origin::
+ The default upstream tracking branch. Most projects have at
+ least one upstream project which they track. By default
+ 'origin' is used for that purpose. New upstream updates
+ will be fetched into this branch; you should never commit
+ to it yourself.
-alternate object database::
- Via the alternates mechanism, a repository can inherit part of its
- object database from another object database, which is called
- "alternate".
+pack::
+ A set of objects which have been compressed into one file (to save
+ space or to transmit them efficiently).
-reachable::
- An object is reachable from a ref/commit/tree/tag, if there is a
- chain leading from the latter to the former.
+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.
-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).
+parent::
+ A commit object contains a (possibly empty) list of the logical
+ predecessor(s) in the line of development, i.e. its parents.
-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.
+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.
the remote head ref. If the remote head is not an ancestor to the
local head, the push fails.
-pack::
- A set of objects which have been compressed into one file (to save
- space or to transmit them efficiently).
+reachable::
+ An object is reachable from a ref/commit/tree/tag, if there is a
+ chain leading from the latter to the former.
-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.
+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.
-core git::
- Fundamental data structures and utilities of git. Exposes only
- limited source code management tools.
+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 master head
+ at $URL". See also gitlink:git-push[1]
-plumbing::
- Cute name for core git.
+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.
-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.
+resolve::
+ The action of fixing up manually what a failed automatic merge
+ left behind.
-object type:
- One of the identifiers "commit","tree","tag" and "blob" describing
- the type of an object.
+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::
Source code management (tool).
-dircache::
- You are *waaaaay* behind.
+SHA1::
+ Synonym for object name.
+
+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.
+
+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.