chiark / gitweb /
tg-export: New command for cleaning up history
[topgit.git] / README
diff --git a/README b/README
index 2626c892d031838ba6b91148cdd541b519fec80a..275043b2c2bd05060dd011a369e9739cce1cad07 100644 (file)
--- a/README
+++ b/README
@@ -86,9 +86,9 @@ SYNOPSIS
        $ ..hack..
        $ git commit
 
-       ## Create another topic branch on top of specified one and submit
+       ## Create another topic branch on top of master and submit
        ## the resulting patch upstream
-       $ tg create -d master t/revlist/author-fixed
+       $ tg create t/revlist/author-fixed master
        tg: Creating t/revlist/author-fixed base from master...
        $ ..hack..
        $ git commit
@@ -100,7 +100,7 @@ SYNOPSIS
        Subject: [PATCH] Fix broken revlist --author when --fixed-string
 
        ## Create another topic branch depending on two others non-trivially
-       $ tg create -d t/revlist/author-fixed,t/gitweb/nifty-links t/whatever
+       $ tg create t/whatever t/revlist/author-fixed t/gitweb/nifty-links
        tg: Creating t/whatever base from t/revlist/author-fixed...
        tg: Merging t/whatever base with t/gitweb/nifty-links...
        Merge failed!
@@ -199,11 +199,14 @@ tg create
 ~~~~~~~~~
        Create a new TopGit-controlled topic branch of a given name
        (required argument) and switch to it. If no dependencies
-       are specified using the '-d' paremeter, the current branch
-       is assumed to be the only dependency.
+       are specified (by extra arguments passed after the first one),
+       the current branch is assumed to be the only dependency.
 
        After `tg create`, you should insert the patch description
-       to the '.topmsg' file.
+       to the '.topmsg' file, which will already contain some
+       pre-filled bits. You can set topgit.to, topgit.cc and topgit.bcc
+       configuration variables in order to have `tg create`
+       add these headers with given default values to '.topmsg'.
 
        The main task of `tg create` is to set up the topic branch
        base from the dependencies. This may fail due to merge conflicts.
@@ -212,10 +215,6 @@ tg create
        it will detect that you are on a topic branch base ref and
        resume the topic branch creation operation.
 
-       '-d':
-               Manually specified dependencies. A comma- or
-               space-separated list of branch names.
-
 tg delete
 ~~~~~~~~~
        Remove a TopGit-controlled topic branch of given name
@@ -246,7 +245,7 @@ tg patch
 
        The patch is by default simply dumped to stdout. In the future,
        tg patch will be able to automatically send the patches by mail
-       or save them to files.
+       or save them to files. (TODO)
 
        TODO: tg patch -i to base at index instead of branch,
                -w for working tree
@@ -256,11 +255,56 @@ tg summary
        Show overview of all TopGit-tracked topic branches and their
        up-to-date status ('0' marks that it introduces no own changes,
        'D' marks that it is out-of-date wrt. its dependencies,
+       '!' marks that it has missing dependencies (even recursively),
        'B' marks that it is out-of-date wrt. its base).
 
        TODO: Speed up by an order of magnitude
        TODO: Graph view
 
+tg export
+~~~~~~~~~
+       Create a new branch containing tidied-up history
+       of the current topic branch and its dependencies,
+       suitable for pull by upstream - each topic branch
+       corresponds to a single commit in the cleaned up history
+       (corresponding basically exactly to `tg patch` output
+       for the topic branch).
+
+       You can use this collapsed structure either for providing
+       a pull source for upstream, or further linearization e.g.
+       for creation of a quilt series using git log:
+
+               git log --pretty=email -p --topo-order origin..exported
+
+       To better understand the function of `tg export`,
+       consider this dependency structure of topic branches:
+
+       origin/master - t/foo/blue - t/foo/red - master
+                    `- t/bar/good <,----------'
+                    `- t/baz      ------------'
+
+       (Where each of the branches may have hefty history.) Then
+
+       master$ tg export for-linus
+
+       will create this commit structure on branch for-linus:
+
+       origin/master - t/foo/blue -. merge - t/foo/red -.. merge - master
+                    `- t/bar/good <,-------------------'/
+                    `- t/baz      ---------------------'
+
+       The command works on the current topic branch
+       and requires one mandatory argument: the name of the branch
+       where the exported result shall be stored.
+       The branch will be silently overwritten if it exists already!
+       Use git reflog to recover in case of mistake.
+
+       Usage: tg export BRANCH
+
+       TODO: Make stripping of non-essential headers configurable
+       TODO: Make stripping of [PATCH] and other prefixes configurable
+       TODO: --quilt and --mbox options for other modes of operation
+
 tg update
 ~~~~~~~~~
        Update the current topic branch wrt. changes in the branches
@@ -277,6 +321,8 @@ tg update
 TODO: Some infrastructure for sharing topic branches between
        repositories easily
 TODO: tg depend for adding/removing dependencies smoothly
+TODO: tg collapse for creating a one-commit-per-patch tidied up
+       history (for pulling by upstream)
 
 
 IMPLEMENTATION
@@ -307,6 +353,8 @@ mail headers are inserted and the patch itself is appended.
 Thus, as your patches evolve, you can record nuances like whether
 the paricular patch should have To-list/Cc-maintainer or vice
 versa and similar nuances, if your project is into that.
+From is prefilled from your current GIT_AUTHOR_IDENT, other headers
+can be prefilled from various optional topgit.* config options.
 
        .topdeps: Contains the one-per-line list of branches
 your patch depends on, pre-seeded with `tg create`. (Continuously