<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
</div>\r
<h2>SYNOPSIS</h2>\r
<div class="sectionbody">\r
-<p><em>git-repo-config</em> name [value [value_regex]]\r
-<em>git-repo-config</em> --replace-all name [value [value_regex]]\r
-<em>git-repo-config</em> --get name [value_regex]\r
-<em>git-repo-config</em> --get-all name [value_regex]\r
-<em>git-repo-config</em> --unset name [value_regex]\r
-<em>git-repo-config</em> --unset-all name [value_regex]</p>\r
+<p><em>git-repo-config</em> [type] name [value [value_regex]]\r
+<em>git-repo-config</em> [type] --replace-all name [value [value_regex]]\r
+<em>git-repo-config</em> [type] --get name [value_regex]\r
+<em>git-repo-config</em> [type] --get-all name [value_regex]\r
+<em>git-repo-config</em> [type] --unset name [value_regex]\r
+<em>git-repo-config</em> [type] --unset-all name [value_regex]</p>\r
</div>\r
<h2>DESCRIPTION</h2>\r
<div class="sectionbody">\r
should provide a POSIX regex for the value. If you want to handle the lines\r
<strong>not</strong> matching the regex, just prepend a single exclamation mark in front\r
(see EXAMPLES).</p>\r
+<p>The type specifier can be either <em>--int</em> or <em>--bool</em>, which will make\r
+<em>git-repo-config</em> ensure that the variable(s) are of the given type and\r
+convert the value to the canonical form (simple decimal number for int,\r
+a "true" or "false" string for bool). If no type specifier is passed,\r
+no checks or transformations are performed on the value.</p>\r
<p>This command will fail if</p>\r
<ol>\r
<li>\r
</div>\r
<div id="footer">\r
<div id="footer-text">\r
-Last updated 06-Jan-2006 17:12:42 PDT\r
+Last updated 12-Feb-2006 13:31:35 UTC\r
</div>\r
</div>\r
</body>\r
SYNOPSIS
--------
-'git-repo-config' name [value [value_regex]]
-'git-repo-config' --replace-all name [value [value_regex]]
-'git-repo-config' --get name [value_regex]
-'git-repo-config' --get-all name [value_regex]
-'git-repo-config' --unset name [value_regex]
-'git-repo-config' --unset-all name [value_regex]
+'git-repo-config' [type] name [value [value_regex]]
+'git-repo-config' [type] --replace-all name [value [value_regex]]
+'git-repo-config' [type] --get name [value_regex]
+'git-repo-config' [type] --get-all name [value_regex]
+'git-repo-config' [type] --unset name [value_regex]
+'git-repo-config' [type] --unset-all name [value_regex]
DESCRIPTION
-----------
*not* matching the regex, just prepend a single exclamation mark in front
(see EXAMPLES).
+The type specifier can be either '--int' or '--bool', which will make
+'git-repo-config' ensure that the variable(s) are of the given type and
+convert the value to the canonical form (simple decimal number for int,
+a "true" or "false" string for bool). If no type specifier is passed,
+no checks or transformations are performed on the value.
+
This command will fail if
. .git/config is invalid,
<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
<ul>\r
<li>\r
<p>\r
+<a href="howto/separating-topic-branches.txt">separating-topic-branches</a> by Junio C Hamano <junkio@cox.net>\r
+</p>\r
+</li>\r
+</ul>\r
+<p>In this article, JC describes how to separate topic branches.</p>\r
+<ul>\r
+<li>\r
+<p>\r
<a href="howto/update-hook-example.txt">update-hook-example</a> by Junio C Hamano <junkio@cox.net> and Carl Baldwin <cnb@fc.hp.com>\r
</p>\r
</li>\r
</div>\r
<div id="footer">\r
<div id="footer-text">\r
-Last updated 20-Jan-2006 23:50:28 PDT\r
+Last updated 12-Feb-2006 13:31:35 UTC\r
</div>\r
</div>\r
</body>\r
and easier sanity checking.
+* link:howto/separating-topic-branches.txt[separating-topic-branches] by Junio C Hamano <junkio@cox.net>
+
+In this article, JC describes how to separate topic branches.
+
+
* link:howto/update-hook-example.txt[update-hook-example] by Junio C Hamano <junkio@cox.net> and Carl Baldwin <cnb@fc.hp.com>
An example hooks/update script is presented to
--- /dev/null
+From: Junio C Hamano <junkio@cox.net>
+Subject: Separating topic branches
+Abstract: In this article, JC describes how to separate topic branches.
+
+This text was originally a footnote to a discussion about the
+behaviour of the git diff commands.
+
+Often I find myself doing that [running diff against something other
+than HEAD] while rewriting messy development history. For example, I
+start doing some work without knowing exactly where it leads, and end
+up with a history like this:
+
+ "master"
+ o---o
+ \ "topic"
+ o---o---o---o---o---o
+
+At this point, "topic" contains something I know I want, but it
+contains two concepts that turned out to be completely independent.
+And often, one topic component is larger than the other. It may
+contain more than two topics.
+
+In order to rewrite this mess to be more manageable, I would first do
+"diff master..topic", to extract the changes into a single patch, start
+picking pieces from it to get logically self-contained units, and
+start building on top of "master":
+
+ $ git diff master..topic >P.diff
+ $ git checkout -b topicA master
+ ... pick and apply pieces from P.diff to build
+ ... commits on topicA branch.
+
+ o---o---o
+ / "topicA"
+ o---o"master"
+ \ "topic"
+ o---o---o---o---o---o
+
+Before doing each commit on "topicA" HEAD, I run "diff HEAD"
+before update-index the affected paths, or "diff --cached HEAD"
+after. Also I would run "diff --cached master" to make sure
+that the changes are only the ones related to "topicA". Usually
+I do this for smaller topics first.
+
+After that, I'd do the remainder of the original "topic", but
+for that, I do not start from the patchfile I extracted by
+comparing "master" and "topic" I used initially. Still on
+"topicA", I extract "diff topic", and use it to rebuild the
+other topic:
+
+ $ git diff -R topic >P.diff ;# --cached also would work fine
+ $ git checkout -b topicB master
+ ... pick and apply pieces from P.diff to build
+ ... commits on topicB branch.
+
+ "topicB"
+ o---o---o---o---o
+ /
+ /o---o---o
+ |/ "topicA"
+ o---o"master"
+ \ "topic"
+ o---o---o---o---o---o
+
+After I am done, I'd try a pretend-merge between "topicA" and
+"topicB" in order to make sure I have not missed anything:
+
+ $ git pull . topicA ;# merge it into current "topicB"
+ $ git diff topic
+ "topicB"
+ o---o---o---o---o---* (pretend merge)
+ / /
+ /o---o---o----------'
+ |/ "topicA"
+ o---o"master"
+ \ "topic"
+ o---o---o---o---o---o
+
+The last diff better not to show anything other than cleanups
+for crufts. Then I can finally clean things up:
+
+ $ git branch -D topic
+ $ git reset --hard HEAD^ ;# nuke pretend merge
+
+ "topicB"
+ o---o---o---o---o
+ /
+ /o---o---o
+ |/ "topicA"
+ o---o"master"
+