Differences between revisions 26 and 30 (spanning 4 versions)
Revision 26 as of 2008-01-13 10:59:33
Size: 3752
Editor: abuehl
Comment: partial insert from Design page
Revision 30 as of 2008-01-16 12:48:32
Size: 3279
Editor: abuehl
Comment: trying to be more precise about manifest
Deletions are marked like this. Additions are marked like this.
Line 9: Line 9:
The act of creating a changeset is called a [:Commit:commit] or checkin. The information in a changeset includes The act of creating a changeset is called a [:Commit:commit] or checkin. The information in a changeset includes:
Line 11: Line 11:
 * changes to the contents of the files
 * added/removed/moved files
 * changes to file names or other external attributes (such as execute permissions)
 * the [:Nodeid:nodeid] of its [:Manifest:manifest]
 * the list of changed files
Line 21: Line 20:
Technically, the parent changesets of a changeset are retrieved from the revision history of the changelog file(s) in the repository (files {{{00changelog.i}}} and {{{00changelog.d}}} in {{{.hg/store}}}). Each changeset references a revision of the [:Manifest:manifest] (see ["Design"] for the technical details).
Line 25: Line 22:
Committing changes in the working directory creates a new revision in the manifest and a new changeset (a new revision in the changelog). The parent(s) of the working directory become the parents of the new changeset and the new changeset becomes the new parent of the working directory. Committing changes in the working directory creates a new revision in the manifest[[FootNote(In most cases a new manifest revision is created, for example when at least one tracked file has been changed its content. However, multiple changesets may refer the same manifest revision.)]] and a new changeset (a new revision in the [:Changelog:changelog]). The parent(s) of the working directory become the parents of the new changeset and the new changeset becomes the new parent of the working directory.
Line 32: Line 29:
A changeset lists all files changed in a checkin along with a change
description and metadata like user and date. It also contains a
nodeid of the associated manifest. Changesets are also stored in revlog (see the file
{{{.hg/store/00changelog.d}}}) and an associated index ({{{.hg/store/00changelog.i}}}).
Line 40: Line 32:
1102691ceab8c8f278edecd80f2e3916090082dd <- the corresponding manifest hash 1102691ceab8c8f278edecd80f2e3916090082dd <- the corresponding manifest nodeid
Line 53: Line 45:
See also: ["ChangeSetComments"] See also: ["ChangeSetComments"], ["Design"]

Changeset

(for a short intro of the basic concepts of Mercurial, see UnderstandingMercurial)

A changeset (sometimes abbreviated "cset") is an atomic collection of changes to files in a [:Repository:repository]. It contains all recorded [:LocalModifications:local modfication] that lead to a new [:Revision:revision] of the repository.

A changeset is identified uniquely by a [:ChangeSetID:changeset ID]. In a single repository, you can identify it using a [:RevisionNumber:revision number].

The act of creating a changeset is called a [:Commit:commit] or checkin. The information in a changeset includes:

  • the [:Nodeid:nodeid] of its [:Manifest:manifest]

  • the list of changed files
  • information about who made the change (the "committer"), why ("comments") and when (date/time, timezone)
  • the name of the branch ("default", if omitted or not set)

Each changeset has zero, one or two [:Parent:parent] changesets. It has two parent changesets, if the commit was a [:Merge:merge]. It has no parent, if the changeset is a root in the repository. There may be multiple roots in a repository (normally, there is only one), each representing the start of a branch.

If a changeset is not the [:Head:head] of a branch, it has one or more child changesets (it is then the parent of its child changesets).

The [:WorkingDirectory:working directory] can be [:Update:updated] to any commited changeset of the repository, which then becomes the parent of the working directory.

Committing changes in the working directory creates a new revision in the manifestFootNote(In most cases a new manifest revision is created, for example when at least one tracked file has been changed its content. However, multiple changesets may refer the same manifest revision.) and a new changeset (a new revision in the [:Changelog:changelog]). The parent(s) of the working directory become the parents of the new changeset and the new changeset becomes the new parent of the working directory.

"Updating" back to a changeset which already has a child, changeing files and then committing creates a new child changeset, thus starting a new branch. Branches can be [:NamedBranches:named].

  • Question: Is a changeset a particular state of the project (like a Subversion revision number), or is it a set of changes to files (like a Darcs patch)?

Here's what the internal representation of a changeset looks like:

$ hg debugdata .hg/00changelog.d 1208
1102691ceab8c8f278edecd80f2e3916090082dd <- the corresponding manifest nodeid
mpm@selenic.com <- the committer
1126146623 25200 <- the date, in seconds since the epoch, and seconds offset from UTC
mercurial/commands.py <- the list of changed files, followed by the commit message

Clean up local clone file list 

We now use an explicit list of files to copy during clone so that we
don't copy anything we shouldn't.

See also: ["ChangeSetComments"], ["Design"]


CategoryGlossary

ChangeSet (last edited 2018-02-03 04:31:09 by SangeetKumarMishra)