Differences between revisions 1 and 10 (spanning 9 versions)
Revision 1 as of 2005-08-26 00:57:54
Size: 304
Editor: waste
Comment:
Revision 10 as of 2008-01-13 20:58:52
Size: 2761
Editor: abuehl
Comment:
Deletions are marked like this. Additions are marked like this.
Line 3: Line 3:
The working directory is the top-level directory in a Repository, in which the plain versions of files are available to read, edit and build. Files in the working directory are usually from the ["Tip"], but may be from older revisions, or modified and not yet ["Commit"]ted. The '''working directory''' is the top-level directory in a [:Repository:repository], in which the plain versions of files are available to read, edit and build. Files in the working directory are usually from the [:Tip:tip], but may be from older [:Revision:revisions], or modified and not yet [:Commit:committed].

A working directory has one or two [:Parent:parent] revisions. The parent revision or revisions will become the parent revisions of the new revision which will eventually be created by a commit of the [:LocalModifications:local modifications]. An [:Update:update] will change the parent revision, whereas a [:Revert:revert] will only modify the content of the working directory.

A working directory will only have two parent revisions as the result of a [:Merge:merge].

A [:NamedBranches:branch name] can be set for the working directory.

It’s useful to think of the working directory as "the [:ChangeSet:changeset] I’m about to commit".


=== Tracking Working Directory State ===

Mercurial tracks various information about the working directory (the '''dirstate'''):

 * what revision(s) are currently checked out
 * what files have been copied or renamed
 * what files are controlled by Mercurial

For each file that Mercurial controls, we record the following information:

 * its size
 * its mode
 * its modification time
 * its "state"

The states that are tracked are:

 * n - normal
 * a - added
 * r - removed
 * m - 3-way merged

With this information, we can quickly determine what files in the working directory have changed.

Here's an example of the dirstate:

{{{
$ hg parents -q
1224:cc61d366bc3b
$ hg debugstate
n 644 168 08/19/05 17:42:17 .hgignore
n 644 412 08/20/05 01:46:57 .hgtags
n 644 1328 08/26/05 23:22:20 CONTRIBUTORS
n 644 17992 06/30/05 10:19:51 COPYING
n 644 459 08/24/05 00:38:20 MANIFEST.in
n 644 512 08/24/05 00:35:02 Makefile
n 644 232 06/30/05 10:19:51 PKG-INFO
n 644 2736 08/20/05 00:48:33 README
n 644 1676 06/30/05 10:19:51 comparison.txt
n 644 3711 12/31/69 15:59:59 contrib/bash_completion
n 711 1305 07/01/05 15:04:52 contrib/buildrpm
n 755 8300 08/16/05 16:03:59 contrib/convert-repo
n 644 69 06/30/05 10:19:51 contrib/git-viz/git-cat-file
n 644 69 06/30/05 10:19:51 contrib/git-viz/git-diff-tree
n 644 69 06/30/05 10:19:51 contrib/git-viz/git-rev-list
n 644 69 06/30/05 10:19:51 contrib/git-viz/git-rev-tree
n 644 457 06/30/05 10:19:51 contrib/git-viz/hg-viz
n 755 8039 08/16/05 16:03:59 contrib/hgit
n 755 40043 06/30/05 10:19:51 contrib/hgk
...
}}}

----
CategoryGlossary

Working directory

The working directory is the top-level directory in a [:Repository:repository], in which the plain versions of files are available to read, edit and build. Files in the working directory are usually from the [:Tip:tip], but may be from older [:Revision:revisions], or modified and not yet [:Commit:committed].

A working directory has one or two [:Parent:parent] revisions. The parent revision or revisions will become the parent revisions of the new revision which will eventually be created by a commit of the [:LocalModifications:local modifications]. An [:Update:update] will change the parent revision, whereas a [:Revert:revert] will only modify the content of the working directory.

A working directory will only have two parent revisions as the result of a [:Merge:merge].

A [:NamedBranches:branch name] can be set for the working directory.

It’s useful to think of the working directory as "the [:ChangeSet:changeset] I’m about to commit".

1. Tracking Working Directory State

Mercurial tracks various information about the working directory (the dirstate):

  • what revision(s) are currently checked out
  • what files have been copied or renamed
  • what files are controlled by Mercurial

For each file that Mercurial controls, we record the following information:

  • its size
  • its mode
  • its modification time
  • its "state"

The states that are tracked are:

  • n - normal
  • a - added
  • r - removed
  • m - 3-way merged

With this information, we can quickly determine what files in the working directory have changed.

Here's an example of the dirstate:

$ hg parents -q
1224:cc61d366bc3b
$ hg debugstate
n 644        168 08/19/05 17:42:17 .hgignore
n 644        412 08/20/05 01:46:57 .hgtags
n 644       1328 08/26/05 23:22:20 CONTRIBUTORS
n 644      17992 06/30/05 10:19:51 COPYING
n 644        459 08/24/05 00:38:20 MANIFEST.in
n 644        512 08/24/05 00:35:02 Makefile
n 644        232 06/30/05 10:19:51 PKG-INFO
n 644       2736 08/20/05 00:48:33 README
n 644       1676 06/30/05 10:19:51 comparison.txt
n 644       3711 12/31/69 15:59:59 contrib/bash_completion
n 711       1305 07/01/05 15:04:52 contrib/buildrpm
n 755       8300 08/16/05 16:03:59 contrib/convert-repo
n 644         69 06/30/05 10:19:51 contrib/git-viz/git-cat-file
n 644         69 06/30/05 10:19:51 contrib/git-viz/git-diff-tree
n 644         69 06/30/05 10:19:51 contrib/git-viz/git-rev-list
n 644         69 06/30/05 10:19:51 contrib/git-viz/git-rev-tree
n 644        457 06/30/05 10:19:51 contrib/git-viz/hg-viz
n 755       8039 08/16/05 16:03:59 contrib/hgit
n 755      40043 06/30/05 10:19:51 contrib/hgk
...


CategoryGlossary

WorkingDirectory (last edited 2012-11-06 16:23:25 by abuehl)