[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] manual merge




-------- Original Message --------
Subject: manual merge
Date: Fri, 01 Jul 2005 06:40:11 -0400
From: Xen patchbot -unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Reply-To: xen-devel@xxxxxxxxxxxxxxxxxxx
To: James.Bulpin@xxxxxxxxxxxx

# HG changeset patch
# User kaf24@xxxxxxxxxxxxxxxxxxxx
# Node ID ef2adae89e4d33cc9f2db4d06ed075e1d17f6088
# Parent  0962f5989d2a75e9f89c889d1e81ab132ec04b0e

# Parent  a1b5af05f72e72753d93abed115f620bb8a97008
manual merge

diff -r 0962f5989d2a -r ef2adae89e4d docs/misc/hg-cheatsheet.txt
--- /dev/null   Fri Jul  1 10:15:25 2005
+++ b/docs/misc/hg-cheatsheet.txt       Fri Jul  1 10:28:14 2005
@@ -0,0 +1,422 @@
+
+Mercurial(hg) Cheatsheet for Xen
+================================
+
+Written by Andrew Warfield, extended by Michael Fetterman and Ian Pratt
+June 29, 2005
+
+Overview
+--------
+The Xen project has moved from BitKeeper to Mercurial for source
+control.  This note aims to provide a quick guide to getting up and
+running with the new tools as quickly as possible, and is written from
+the perspective of someone who has been using BK.
+
+For a more detailed exposition, see the mecurial tutorial:
+ http://www.serpentine.com/mercurial/index.cgi?Tutorial
+
+The Hg manpage is available at:
+ http://www.selenic.com/mercurial/hg.1.html
+
+There's also a very useful FAQ that explains the terminology:
+ http://www.selenic.com/mercurial/FAQ.html
+
+There's also a good README:
+ http://www.selenic.com/mercurial/README
+
+Necessary software
+------------------
+Mercurial is available at:
+  http://www.selenic.com/mercurial/
+
+You will also need a Python version >= 2.3
+
+How Mercurial is different from BK
+----------------------------------
+There are several pertinent differences between hg and bk.  This
+section aims to give an overview of the conceptual differences between
+the two SCMs -- if you just want examples to get going, skip ahead to
+"Getting Xen". The key differences are:
+
+  - No explicit per-file locking.  You do not need to explicitly
+    check a file out before editing it.
+  - No notion (currently) of file renames.
+  - A repository can have multiple active heads.
+  - Automatic merge support is currently inferior to BK's.
+  - No graphical tools.
+ - No per-file revision history, only per-changeset (we never really used this anyhow) + - Hg repositories tend to be rather bigger than Bk ones, but Hg does seem faster.
+
+Mercurial is based on the notion of changesets as complete, immutable,
+versions of the repository.  You make changes to a working version of
+the repository that is based on a particular changeset.  When you
+commit, you will generate a new child changeset with whatever changes
+you choose to apply.
+
+A major difference between Hg and BK is that you aren't forced to
+resolve conflicts immediately: BK forced you to resolve conflicts
+immediately on any merge, and it then immediately created a changeset
+with those conflicts' resolutions.  Frequently, you then had to add
+yet another changeset to fixup the things for which the automatic
+merge yielded bad results. Hg puts the results of the merge into your
+work directory, and remembers what you merged with (so that it can
+later record both of the merge parents, if you decide to make a
+changeset), but it doesn't immediately create a changeset.
+
+A further feature of Hg is that it allows a repository to have
+multiple heads. This means that you can have changesets with no common
+descendent in one repository -- something BK won't allow. This is
+actually pretty neat. For example, it would in principle enable you to
+have both the 2.0-testing and unstable trees in a single
+repository. We shyed away from doing this as we thought the risk of
+commiting to the wrong head was too great.
+
+One slightly confusing aspect of Hg is that many of the commands have
+aliases, and hence when looking things up in the man page its not
+always obvious what the underlying command is. For example 'co' is
+actually an alias for the 'update' command, but 'co' seems to make
+more sense, at least to RCS refugees like me.
+
+
+Getting Xen
+-----------
+
+The URL for the mainline Xen mercurial respository is:
+
+   http://xenbits.xensource.com/xen-unstable.hg
+   (similarly for xen-2.0 and xen-2.0-testing)
+
+You can point a browser and this and use Hg's web interface to view
+revision history, or use it as the nominated source when issuing
+"hg init" or "hg pull" commands.
+
+However, to avoid taxing the Mercurial server with a complete pull of
+the Xen repository, it is best to download a tarball of a seed
+repository from:
+
+ http://www.cl.cam.ac.uk/Research/SRG/netos/xen/downloads/xen-unstable.hg.tar.gz
+
+Untar the repository on your disk, cd into it, and then pull the most
+recent changes:
+
+  hg pull -u
+
+By default hg does not automatically checkout ('update') files from
+the repository as used to happen with bk. The above is equivalent to
+"hg pull; hg co"
+
+The repository parent is stored in a repository configuration file,
+.hg/hgrc, from the repository root.  If you look at this file, you
+will see:
+
+  |  [paths]
+  |  default = http://xenbits.xensource.com/xen-unstable.hg
+
+"default" specifies the appropriate parent repository for hg to pull
+from.  Hg allows you to pull additional repositories, for instance if
+you want to work between unstable and testing concurrently.
+
+The command "hg pull" simply adds changesets to your repository,
+without any merging of any kind.  "hg pull -u" implies merging with
+the current state of your working directory.  If you weren't already
+"updated" to your local repository's tip, you might be surprised to
+find yourself merging the results of the pull with a non-tip node in
+your local repository.
+
+
+Revision History
+----------------
+
+You can view the repository revision history with:
+
+   hg history
+
+In practice, you'll probably want to use pipe the output through
+'head' or 'more' as it prints the entire history.
+
+Looking at the first few lines of output, you can see the changeset at
+the head of the current branch, known as the 'tip' (the tip is
+automatically given a special tag to make it easy to refer to):
+
+   | changeset:   5599:6cbf9ec05cd9e05c0c46a85df7fc00262633cd3d
+   | tag:         tip
+   | user:        kaf24@xxxxxxxxxxxxxxxxxxxx
+   | date:        Tue Jun 28 18:47:14 2005
+ | summary: bitkeeper revision 1.1768 (42c18d2259NPELcGV7ohyZNh72ufSw)
+
+By default, Hg just shows the first line of the changset comments. You
+can find further information with "hg -v history".
+
+The changeset identifier has two parts, a _local_ monotonically
+increasing changeset id, 4792 above, and a _global_ hash, which
+follows the colon on the changeset line.  The hash uniquely identifies
+the changeset and its lineage back to the root of the changeset tree
+-- it is useful for distributed management and so on.  However, as it
+is a bit unruly, the local id will allow you to work easily with the
+local repo. Hg commands will take either identifier. Additionally, a
+tags mechanism lets you give common names to specific changesets.
+
+You should always use the global hash when referring to versions of
+the mainline Xen respoitory. With Bk you could often get away with
+using the shortform version, but with Hg the local ids are pretty much
+guaranteed to be different.
+
+
+Creating a child repository from an existing repository
+-------------------------------------------------------
+If you wanted to create additional local child repositories,
+
+   hg init [path or url]
+
+is effectively equivalent to bk clone.  The major difference is that
+it should be run from the root of your new repository.  So:
+
+   bk clone /foo/bar
+
+would be replaced with:
+
+   mkdir bar
+   cd bar
+   hg init /foo/bar
+
+NB: newer version of Hg support a 'clone' command that works in the
+same manner as bk.
+
+Editing files
+-------------
+
+Normal edits may be made in place.  File creation needs explicit
+marking, though deletes should be picked up automatically
+
+creation:
+
+   touch a (or otherwise created a file)
+   hg add a
+
+You can see what has changed using:
+
+   hg status
+
+   | C foo/foo.c
+   | R foo/bar.c
+   | ? a.txt
+
+This shows that in the current repo, foo.c has been changed, bar.c has
+been deleted, and a.txt is new, but has not been added.  '?' changes
+to 'A' after "hg add a.txt". There is a .hgignore file which contains
+regexps of files that should be ignored when scanning for new
+files. We try to ensure that all the generated files in a build are
+covered by the regexps.
+
+You can add all the new files in a repository with "hg addremove". If
+you discover that you've added a file you didn't want, you can remove
+it from the list of files to be included in the next commit using
+"hg forget".
+
+Committing changes
+-----------------
+
+After you've checked that hg knows about any new files you've created,
+you probably want to see a diff of what you're about to commit. You
+can do this with:
+
+   hg diff
+
+Once you're happy with what you have, invoke:
+
+   hg commit
+
+This will pop up an editor with a list of files to be committed to the
+repository.  It will look vaguely like this:
+
+   |
+   | HG: manifest hash 6397b04bd5c2a992482d973b685a7e5e498788e7
+   | HG: changed doc/thesis/new.tex
+   | HG: removed doc/2005-hotdep-protection/paper.tex
+
+Your comments can go anywhere in this file.  The first line is the
+most important, as it will show as the changeset description in
+non-verbose-mode history listings.
+
+You can do commits without the editor and of partial sets of files
+using command-line switches. See:
+
+   hg help commit
+
+You can use the -A (--addremove) flag to commit e.g. "hg -A commit" to
+ask mercurial to scan the tree looking for newly created files to add
+in to the changeset. This avoids having to explicitly use "hg add",
+but you probably want to be careful of adding any new generated files
+too.
+
+
+Generating a patch
+------------------
+Generating a patch is easy,
+
+   hg export [changeset]
+
+will generate a patch describing the diff between that changeset and
+its parent.
+
+Pushing changesets to a parent repository
+-----------------------------------------
+
+   hg push
+
+Pushes changes up to a parent. You can't push if you pulled the
+repository off the web interface. In fact, you can currently only push
+to an ssh target -- filesystem drectory targets don't work, but this
+will be fixed soon.
+
+
+Repository history
+------------------
+
+Here are a collection of common commands to get you started:
+
+   hg history | less
+
+shows the history of changesets, starting from the most recent.  You
+want to pipe it to some sort of pager.  For more complete details,
+
+   hg -v history | less
+
+will include files modified and full (not just first-line) comments.
+
+Additionally, you can see just the tip (head of the current
+branch) of the repository by typing:
+
+   hg [-v] tip
+
+
+Moving to a specific changeset
+------------------------------
+
+The co command lets you change the working version of the repository
+to a different changeset.
+
+   hg co [changeset]
+
+NB: 'co' is an alias for 'update'
+
+This command enables you to rewind the working repository to previous
+changesets, for example to isolate the changeset in which a bug is
+introduced.
+
+If you try and do a 'co' but have modified files in your repository Hg
+won't let you unless you ask it explicitly to merge the checked out
+version into the current tree using the "-m" option. The "-C"
+(--clean) option will force overwrite any locally modified files.
+
+Any commits that are made to non-head changesets will obviously fork
+the tree, creating a new head. You can see all the heads in a tree with
+"hg heads".
+
+In general, "hg co" does the right thing, although it doesn't
+currently seem to clean up unused directories that have been created
+by other checked-out versions. This can confuse the Xen build
+system. Hg will probably get fixed soon, but in the meantime you can
+cleanup with "find -depth -type d -print | xargs -r rmdir".
+
+You can return to the tip by ommiting an explicit changeset id.
+
+The manifest command lets you see the contents of the repository for
+the current changeset.
+
+   hg manifest
+
+This will print a bunch of records of the form:
+
+   | 98856c45c35a504bc6da06a62b7787ddfdfd1c8b 644 COPYING
+   | f28971eedc5b54e7a9b26dd18d52992955354981 644 Config.mk
+   | a3575cc4db59e50bbac8a039a0c74f081a8dfc4f 644 Makefile
+   | 7fc869aae2945a9f4626fad96552db3103e61cb9 644 README
+   | ...
+
+This lists the hash of each file, its 1-bit 'executable' atribute
+(either file permission mode 644 or 755), and the file name.  So, to
+determine the files that change across two changesets, you would dump
+the respective manifests to files, and use diff.
+
+
+Managing changeset tags
+-----------------------
+To create a tag to the current changeset:
+
+   hg tag tagname
+
+This will _immediately_ generate a changeset with a change to the file
+.hgtags in the repository root.   The new tag in this file will look
+something like:
+
+   | 35159ed4b30538e7a52c60ad0a63f7e9af156e4c tagname
+
+and may be used to identify that changeset throughout the repo.
+Storing tags in this file and generating changesets immediately
+forces people to merge and keep tags up to date across the repository.
+
+Note that tags are resolved by searching .hgtags in each of the
+repository heads, sequentially, and using the first match.  "hg heads"
+lists the current heads.
+
+The "hg tags" command, will lists all the currently valid tags.
+
+
+Hg server and source browser
+----------------------------
+
+   hg serve -p port
+
+Launches a web server on the specified port, serving a source browser
+for the repository.  This browser may be used to examine the
+changeset history, view annotated source files, generate diffs.
+Additionally "hg pull" may be run against it.
+
+Additional useful commands
+(that probably only need one-line descriptions)
+-----------------------------------------------
+
+(Slightly) more detail on all of these is available with
+
+  hg help [command]
+
+Shows the differences between whatever changeset you most recently
+checked out, and your current working directory:
+
+   hg diff
+
+View an annotated version of a source file:
+
+   hg annotate
+
+Get a historical version of a file:
+
+   hg cat
+
+ NB: Most commands accepting a version number want the changeset's
+ version number.  "hg cat" is different in that it wants the
+ *file*'s version number.
+
+Unadd a file to the current commit:
+
+   hg forget
+
+List all heads in the current repository:
+
+   hg heads
+
+Undo exactly one (and ONLY one) changeset:
+
+   hg undo
+
+Show the parents of a changeset:
+
+   hg parents
+
+ NB: Changesets have either one or two parent changesets. If your
+ working directory contains the uncommitted results of a merge, then
+ you have two parents.  Otherwise, the single parent is the changeset
+ which you most recently checked out.
+
+

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.