tj.git-extras/man/git-feature.html
Austin Ziegler 49650eda62
git-feature: add configurable branch separator (#1072)
* git-feature: add configurable branch separator

Closes #1069

This allows the use of a separator other than `/` for feature or other
alias branches. While a command-line option has been provided (`-s` or
`--separator`), this will most often be used via
`git-extras.feature.separator`.

* Significant update to bin/git-feature

- Changed option parsing so that `--alias` requires an argument and will
  fail with an error unless provided. Applied the same logic to
  `--separator`.

- Changed `finish` parsing to capture it as a variable flag during
  argument parsing.

  This could be extended so that if `finish` is already true, a second
  `finish` results in the word being added to the argument list.

  ```console
  $ git feature -- finish remote
  $ git feature finish finish remote
  ```

  This has not been done because it is a bit of an inconsistent handling
  for documentation purposes.

- Add handling of `--` to permit options or `finish` to be made part of
  the feature branch name.

- Since `finish` is now a variable flag, simplify the name-building
  logic to always use `concatargs "${argv[@]}"`. This means that
  `git feature finish ...` and `git feature ...` behave the same in
  terms of feature branch name building.

- Basically rewrote the man page to include better descriptions of the
  options as well as adding a GIT CONFIG section and additional EXAMPLES
  for the new features/behaviour.
2023-09-19 11:10:59 +08:00

204 lines
8.5 KiB
HTML

<!DOCTYPE html>
<html>
<head>
<meta http-equiv='content-type' value='text/html;charset=utf8'>
<meta name='generator' value='Ronn/v0.7.3 (http://github.com/rtomayko/ronn/tree/0.7.3)'>
<title>git-feature(1) - Create/Merge feature branch</title>
<style type='text/css' media='all'>
/* style: man */
body#manpage {margin:0}
.mp {max-width:100ex;padding:0 9ex 1ex 4ex}
.mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}
.mp h2 {margin:10px 0 0 0}
.mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}
.mp h3 {margin:0 0 0 4ex}
.mp dt {margin:0;clear:left}
.mp dt.flush {float:left;width:8ex}
.mp dd {margin:0 0 0 9ex}
.mp h1,.mp h2,.mp h3,.mp h4 {clear:left}
.mp pre {margin-bottom:20px}
.mp pre+h2,.mp pre+h3 {margin-top:22px}
.mp h2+pre,.mp h3+pre {margin-top:5px}
.mp img {display:block;margin:auto}
.mp h1.man-title {display:none}
.mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}
.mp h2 {font-size:16px;line-height:1.25}
.mp h1 {font-size:20px;line-height:2}
.mp {text-align:justify;background:#fff}
.mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}
.mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}
.mp u {text-decoration:underline}
.mp code,.mp strong,.mp b {font-weight:bold;color:#131211}
.mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}
.mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}
.mp b.man-ref {font-weight:normal;color:#434241}
.mp pre {padding:0 4ex}
.mp pre code {font-weight:normal;color:#434241}
.mp h2+pre,h3+pre {padding-left:0}
ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}
ol.man-decor {width:100%}
ol.man-decor li.tl {text-align:left}
ol.man-decor li.tc {text-align:center;letter-spacing:4px}
ol.man-decor li.tr {text-align:right;float:right}
</style>
</head>
<!--
The following styles are deprecated and will be removed at some point:
div#man, div#man ol.man, div#man ol.head, div#man ol.man.
The .man-page, .man-decor, .man-head, .man-foot, .man-title, and
.man-navigation should be used instead.
-->
<body id='manpage'>
<div class='mp' id='man'>
<div class='man-navigation' style='display:none'>
<a href="#NAME">NAME</a>
<a href="#SYNOPSIS">SYNOPSIS</a>
<a href="#DESCRIPTION">DESCRIPTION</a>
<a href="#OPTIONS">OPTIONS</a>
<a href="#GIT-CONFIG">GIT CONFIG</a>
<a href="#EXAMPLES">EXAMPLES</a>
<a href="#AUTHOR">AUTHOR</a>
<a href="#REPORTING-BUGS">REPORTING BUGS</a>
<a href="#SEE-ALSO">SEE ALSO</a>
</div>
<ol class='man-decor man-head man head'>
<li class='tl'>git-feature(1)</li>
<li class='tc'>Git Extras</li>
<li class='tr'>git-feature(1)</li>
</ol>
<h2 id="NAME">NAME</h2>
<p class="man-name">
<code>git-feature</code> - <span class="man-whatis">Create/Merge feature branch</span>
</p>
<h2 id="SYNOPSIS">SYNOPSIS</h2>
<p><code>git-feature</code> [-a|--alias branch_prefix] [-s|--separator branch_separator] [-r|--remote [remote_name]] &lt;name&gt;<br />
<code>git-feature</code> [-a|--alias branch_prefix] [-s|--separator branch_separator] finish [--squash] &lt;name&gt;</p>
<h2 id="DESCRIPTION">DESCRIPTION</h2>
<p>Create/Merge the given feature branch.</p>
<p>The branch <code>name</code> may be specified as multiple words which will be joined with <code>-</code> characters. If any word should start with a <code>-</code>, the name should be preceded by <code>--</code>, which will signal that option parsing should be ignored.</p>
<h2 id="OPTIONS">OPTIONS</h2>
<p>&lt;-a|--alias branch_prefix&gt;</p>
<p>The branch prefix to use, or <code>feature</code> if not supplied.</p>
<p>&lt;-s|--separator branch_separator&gt;</p>
<p>The separator to use for joining the branch prefix and the branch name, or <code>/</code> if not supplied.</p>
<p>&lt;-r|--remote [remote_name]&gt;</p>
<p>Setup a remote tracking branch using <code>remote_name</code>. If <code>remote_name</code> is not supplied, use <code>origin</code> by default.</p>
<p>&lt;--from [start_point]&gt;</p>
<p>Setup a start point when the branch created. If <code>--from</code> is not supplied, use the current branch by default.</p>
<p>&lt;finish&gt;</p>
<p>Merge and delete the feature branch.</p>
<p>&lt;--squash&gt;</p>
<p>Run a squash merge.</p>
<p>&lt;name&gt;</p>
<p>The name of the feature branch.</p>
<h2 id="GIT-CONFIG">GIT CONFIG</h2>
<p>You can configure the default branch prefix and separator via git config options.</p>
<p> $ git config --global add git-extras.feature.prefix "branch_prefix"</p>
<p>The default <code>branch_prefix</code> is <code>feature</code>.</p>
<p> $ git config --global add git-extras.feature.separator "-"</p>
<p>The default <code>branch_separator</code> is <code>/</code>.</p>
<h2 id="EXAMPLES">EXAMPLES</h2>
<dl>
<dt>Start a new feature:</dt><dd><p></p>
<p>$ git feature dependencies<br />
...<br />
$ (feature/dependencies) git commit -m "Some changes"</p></dd>
<dt>Finish a feature with --no-ff merge:</dt><dd><p></p>
<p>$ (feature/dependencies) git checkout master<br />
$ git feature finish dependencies</p></dd>
<dt>Finish a feature with --squash merge:</dt><dd><p></p>
<p>$ (feature/dependencies) git checkout master<br />
$ git feature finish --squash dependencies</p></dd>
<dt>Publish a feature upstream:</dt><dd><p></p>
<p>$ git feature dependencies -r upstream</p></dd>
<dt>Use custom branch prefix:</dt><dd><p></p>
<p>$ git alias features "feature -a features"<br />
$ git features dependencies<br />
$ (features/dependencies) ...<br />
$ (features/dependencies) git checkout master<br />
$ git features finish dependencies</p></dd>
<dt>Use custom branch separator:</dt><dd><p></p>
<p>$ git feature -s - dependencies<br />
$ (feature-dependencies) ...<br />
$ (feature-dependencies) git checkout master<br />
$ git feature -s - finish dependencies</p></dd>
<dt>Use custom branch prefix and separator from git config with multiple words:</dt><dd><p></p>
<p>$ git config --global --add git-extras.feature.prefix "features"<br />
$ git config --global --add git-extras.feature.separator "."<br />
$ git feature dependency tracking<br />
$ (features.dependency-tracking) ...<br />
$ (features.dependency-tracking) git checkout master<br />
$ git feature finish dependency tracking</p></dd>
<dt>Use a <code>git-feature</code> option flag as part of a branch name:</dt><dd><p></p>
<p>$ git feature -- --remote<br />
...<br />
$ (feature/--remote) git commit -m "Some changes"</p></dd>
</dl>
<h2 id="AUTHOR">AUTHOR</h2>
<p>Written by Jesús Espino &lt;<a href="&#109;&#97;&#x69;&#x6c;&#x74;&#111;&#x3a;&#106;&#x65;&#115;&#x70;&#x69;&#110;&#x6f;&#x67;&#64;&#103;&#x6d;&#97;&#105;&#108;&#x2e;&#99;&#111;&#109;" data-bare-link="true">&#106;&#x65;&#115;&#112;&#x69;&#x6e;&#x6f;&#x67;&#x40;&#103;&#109;&#x61;&#x69;&#108;&#46;&#x63;&#x6f;&#x6d;</a>&gt;<br />
Modified by Mark Pitman &lt;<a href="&#109;&#97;&#x69;&#108;&#x74;&#111;&#x3a;&#x6d;&#97;&#114;&#x6b;&#46;&#x70;&#105;&#x74;&#x6d;&#97;&#110;&#64;&#x67;&#x6d;&#x61;&#105;&#108;&#46;&#x63;&#111;&#x6d;" data-bare-link="true">&#x6d;&#97;&#114;&#x6b;&#46;&#x70;&#x69;&#x74;&#x6d;&#97;&#x6e;&#x40;&#x67;&#109;&#x61;&#105;&#108;&#46;&#x63;&#x6f;&#109;</a>&gt;<br />
Modified by Carlos Prado &lt;<a href="&#x6d;&#97;&#105;&#x6c;&#116;&#111;&#x3a;&#99;&#97;&#114;&#x6c;&#111;&#x73;&#46;&#x70;&#114;&#x61;&#100;&#111;&#64;&#x63;&#x70;&#x72;&#97;&#x64;&#x6f;&#103;&#x2e;&#99;&#x6f;&#109;" data-bare-link="true">&#x63;&#97;&#114;&#108;&#111;&#115;&#46;&#112;&#114;&#97;&#x64;&#x6f;&#x40;&#x63;&#112;&#114;&#x61;&#100;&#111;&#x67;&#46;&#x63;&#111;&#109;</a>&gt;<br />
Modified by Austin Ziegler &lt;<a href="&#109;&#x61;&#105;&#108;&#x74;&#111;&#58;&#104;&#97;&#108;&#x6f;&#115;&#116;&#x61;&#x74;&#117;&#x65;&#64;&#x67;&#x6d;&#97;&#x69;&#x6c;&#x2e;&#99;&#x6f;&#109;" data-bare-link="true">&#104;&#97;&#108;&#111;&#x73;&#x74;&#97;&#x74;&#117;&#101;&#x40;&#103;&#109;&#x61;&#x69;&#x6c;&#x2e;&#99;&#111;&#x6d;</a>&gt;</p>
<h2 id="REPORTING-BUGS">REPORTING BUGS</h2>
<p>&lt;<a href="https://github.com/tj/git-extras/issues" data-bare-link="true">https://github.com/tj/git-extras/issues</a>&gt;</p>
<h2 id="SEE-ALSO">SEE ALSO</h2>
<p>&lt;<a href="https://github.com/tj/git-extras" data-bare-link="true">https://github.com/tj/git-extras</a>&gt;</p>
<ol class='man-decor man-foot man foot'>
<li class='tl'></li>
<li class='tc'>September 2023</li>
<li class='tr'>git-feature(1)</li>
</ol>
</div>
</body>
</html>