Deployed 32d2a85 to v0.24.0 with MkDocs 1.6.1 and mike 2.1.3

This commit is contained in:
jj-docs[bot] 2024-12-04 20:48:11 +00:00
parent 83d9ac7f61
commit f8713719c3
129 changed files with 87155 additions and 1853 deletions

View File

@ -1143,27 +1143,6 @@
<li class="md-nav__item">
<a href="/jj/latest/roadmap/" class="md-nav__link">
<span class="md-ellipsis">
Roadmap
</span>
</a>
</li>
<li class="md-nav__item">
<a href="/jj/latest/design/git-submodules/" class="md-nav__link">
@ -1291,6 +1270,26 @@
<li class="md-nav__item">
<a href="/jj/latest/roadmap/" class="md-nav__link">
<span class="md-ellipsis">
Development Roadmap
</span>
</a>
</li>
</ul>
</nav>
</div>

View File

@ -468,6 +468,15 @@
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#can-i-monitor-how-jj-log-evolves" class="md-nav__link">
<span class="md-ellipsis">
Can I monitor how jj log evolves?
</span>
</a>
</li>
<li class="md-nav__item">
@ -549,6 +558,15 @@
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#why-are-most-merge-commits-marked-as-empty" class="md-nav__link">
<span class="md-ellipsis">
Why are most merge commits marked as "(empty)"?
</span>
</a>
</li>
<li class="md-nav__item">
@ -1347,27 +1365,6 @@
<li class="md-nav__item">
<a href="../roadmap/" class="md-nav__link">
<span class="md-ellipsis">
Roadmap
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../design/git-submodules/" class="md-nav__link">
@ -1495,6 +1492,26 @@
<li class="md-nav__item">
<a href="../roadmap/" class="md-nav__link">
<span class="md-ellipsis">
Development Roadmap
</span>
</a>
</li>
</ul>
</nav>
</div>
@ -1555,6 +1572,15 @@
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#can-i-monitor-how-jj-log-evolves" class="md-nav__link">
<span class="md-ellipsis">
Can I monitor how jj log evolves?
</span>
</a>
</li>
<li class="md-nav__item">
@ -1636,6 +1662,15 @@
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#why-are-most-merge-commits-marked-as-empty" class="md-nav__link">
<span class="md-ellipsis">
Why are most merge commits marked as "(empty)"?
</span>
</a>
</li>
<li class="md-nav__item">
@ -1716,6 +1751,16 @@ revision visible again.</p>
<p>See <a href="../revsets/">revsets</a> and <a href="../templates/">templates</a> for further guidance.</p>
<h3 id="how-can-i-get-jj-log-to-show-me-what-git-log-would-show-me">How can I get <code>jj log</code> to show me what <code>git log</code> would show me?<a class="headerlink" href="#how-can-i-get-jj-log-to-show-me-what-git-log-would-show-me" title="Permanent link">&para;</a></h3>
<p>Use <code>jj log -r ..</code>. The <code>..</code> <a href="../revsets/#operators">operator</a> lists all visible commits in the repo, excluding the root (which is never interesting and is shared by all repos).</p>
<h3 id="can-i-monitor-how-jj-log-evolves">Can I monitor how <code>jj log</code> evolves?<a class="headerlink" href="#can-i-monitor-how-jj-log-evolves" title="Permanent link">&para;</a></h3>
<p>The simplest way to monitor how the history as shown by <code>jj log</code> evolves is by using the <a href="https://man7.org/linux/man-pages/man1/watch.1.html">watch(1)</a> command (or <a href="https://github.com/blacknon/hwatch?tab=readme-ov-file#configuration">hwatch</a> or <a href="https://github.com/sachaos/viddy">viddy</a>).
For example:</p>
<div class="highlight"><pre><span></span><code>watch<span class="w"> </span>--color<span class="w"> </span>jj<span class="w"> </span>--ignore-working-copy<span class="w"> </span>log<span class="w"> </span>--color<span class="o">=</span>always
</code></pre></div>
<p>This will continuously update the (colored) log output in the terminal.
The <code>--ignore-working-copy</code> option avoids conflicts with manual operations during the creation of snapshots.
Martin used watch in a <a href="https://github.com/tmux/tmux/wiki">tmux</a> pane during his presentation <a href="https://www.youtube.com/watch?v=LV0JzI8IcCY">Jujutsu - A Git-compatible VCS</a>.</p>
<p>Alternatively, you can use <a href="https://github.com/tim-janik/jj-fzf">jj-fzf</a>, where the central piece is the <code>jj log</code> view and common operations can be carried out via key bindings while the log view updates.</p>
<p>The wiki lists additional TUIs and GUIs beyond the terminal: <a href="https://github.com/martinvonz/jj/wiki/GUI-and-TUI">GUI-and-TUI</a></p>
<h3 id="should-i-co-locate-my-repository">Should I co-locate my repository?<a class="headerlink" href="#should-i-co-locate-my-repository" title="Permanent link">&para;</a></h3>
<p>Co-locating a Jujutsu repository allows you to use both Jujutsu and Git in the
same working copy. The benefits of doing so are:</p>
@ -1904,6 +1949,21 @@ your state without realising.</p>
your edits, then use <code>jj squash</code> to update the earlier revision with those edits.
For when you would use git stashing, use <code>jj edit &lt;rev&gt;</code> for expected behaviour.
Other workflows may prefer <code>jj edit</code> as well.</p>
<h3 id="why-are-most-merge-commits-marked-as-empty">Why are most merge commits marked as "(empty)"?<a class="headerlink" href="#why-are-most-merge-commits-marked-as-empty" title="Permanent link">&para;</a></h3>
<p>Jujutsu, like Git, is a snapshot-based VCS. That means that each commit
logically records the state of all current files in the repo. The changes in a
commit are not recorded but are instead calculated when needed by comparing the
commit's state to the parent commit's state. Jujutsu defines the changes in a
commit to be relative to the auto-merged parents (if there's only one parent,
then that merge is trivial - it's the parent commit's state). As a result, a
merge commit that was a clean merge (no conflict resolution, no additional
changes) is considered empty. Conversely, if the merge commit contains conflict
resolutions or additional changes, then it will be considered non-empty.</p>
<p>This definition of the changes in a commit is used throughout Jujutsu. It's
used by <code>jj diff -r</code> and <code>jj log -p</code> to show the changes in a commit. It's used
by <code>jj rebase</code> to rebase the changes in a commit. It's used in <code>jj log</code> to
indicate which commits are empty. It's used in the <code>files()</code> revset function
(and by <code>jj log &lt;path&gt;</code>) to find commits that modify a certain path. And so on.</p>
<h3 id="how-do-i-deal-with-divergent-changes-after-the-change-id">How do I deal with divergent changes ('??' after the <a href="../glossary/#change-id">change ID</a>)?<a class="headerlink" href="#how-do-i-deal-with-divergent-changes-after-the-change-id" title="Permanent link">&para;</a></h3>
<p>A <a href="../glossary/#divergent-change">divergent change</a> represents a change that has two
or more visible commits associated with it. To refer to such commits, you must
@ -1938,7 +1998,7 @@ directory.</p>
<li>Using <code>jj-lib</code> avoids parsing command output and makes error handling easier.</li>
<li><code>jj-lib</code> is not a stable API, so you may have to make changes to your tool
when the API changes.</li>
<li>The CLI is not stable either, so you may need to make your tool detect the
<li>The CLI is not stable either, so you may need to make your tool detect the
different versions and call the right command.</li>
<li>Using the CLI means that your tool will work with custom-built <code>jj</code> binaries,
like the one at Google (if you're using the library, you will not be able to

View File

@ -1310,27 +1310,6 @@
<li class="md-nav__item">
<a href="../roadmap/" class="md-nav__link">
<span class="md-ellipsis">
Roadmap
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../design/git-submodules/" class="md-nav__link">
@ -1458,6 +1437,26 @@
<li class="md-nav__item">
<a href="../roadmap/" class="md-nav__link">
<span class="md-ellipsis">
Development Roadmap
</span>
</a>
</li>
</ul>
</nav>
</div>
@ -1663,7 +1662,7 @@ remote. If a local bookmark also exists on some remote but points to a different
target there, <code>jj log</code> will show the bookmark name with an asterisk suffix (e.g.
<code>main*</code>). That is meant to remind you that you may want to push the bookmark to
some remote.</p>
<p>If you want to know the internals of bookmark tracking, consult the
<p>If you want to know the internals of bookmark tracking, consult the
<a href="../design/tracking-branches/">Design Doc</a>.</p>
<h3 id="terminology-summary">Terminology summary<a class="headerlink" href="#terminology-summary" title="Permanent link">&para;</a></h3>
<ul>
@ -1686,9 +1685,9 @@ some remote.</p>
bookmarks on multiple remotes, and the names of the local and remote bookmarks
must match.</p>
<h3 id="manually-tracking-a-bookmark">Manually tracking a bookmark<a class="headerlink" href="#manually-tracking-a-bookmark" title="Permanent link">&para;</a></h3>
<p>To track a bookmark permanently use <code>jj bookmark track &lt;bookmark name&gt;@&lt;remote name&gt;</code>.
<p>To track a bookmark permanently use <code>jj bookmark track &lt;bookmark name&gt;@&lt;remote name&gt;</code>.
It will now be imported as a local bookmark until you untrack it or it is deleted
on the remote. </p>
on the remote.</p>
<p>Example:</p>
<div class="highlight"><pre><span></span><code>$<span class="w"> </span><span class="c1"># List all available bookmarks, as we want our colleague&#39;s bookmark.</span>
$<span class="w"> </span>jj<span class="w"> </span>bookmark<span class="w"> </span>list<span class="w"> </span>--all
@ -1705,7 +1704,7 @@ $<span class="w"> </span>jj<span class="w"> </span>new<span class="w"> </span>&l
<p>To stop following a remote bookmark, you can <code>jj bookmark untrack</code> it. After that,
subsequent fetches of that remote will no longer move the local bookmark to match
the position of the remote bookmark.</p>
<p>Example: </p>
<p>Example:</p>
<div class="highlight"><pre><span></span><code>$<span class="w"> </span><span class="c1"># List all local and remote bookmarks.</span>
$<span class="w"> </span>jj<span class="w"> </span>bookmark<span class="w"> </span>list<span class="w"> </span>--all
$<span class="w"> </span><span class="c1"># Find the bookmark we no longer want to track.</span>
@ -1727,7 +1726,7 @@ tracked. When you push a local bookmark, the newly created bookmark on the remot
marked as tracked.</p>
<p>By default, every other remote bookmark is marked as "not tracked" when it's
fetched. If desired, you need to manually <code>jj bookmark track</code> them. This works
well for repositories where multiple people work on a large number of bookmarks. </p>
well for repositories where multiple people work on a large number of bookmarks.</p>
<p>The default can be changed by setting the config <code>git.auto-local-bookmark = true</code>.
Then, <code>jj git fetch</code> tracks every <em>newly fetched</em> bookmark with a local bookmark.
Branches that already existed before the <code>jj git fetch</code> are not affected. This
@ -1737,13 +1736,13 @@ bookmarks) by default.</p>
<p>Currently Jujutsu automatically moves local bookmarks when these conditions are
met:</p>
<ul>
<li>When a commit has been rewritten (e.g, when you rebase) bookmarks and the<br />
<li>When a commit has been rewritten (e.g, when you rebase) bookmarks and the
working-copy will move along with it.</li>
<li>When a commit has been abandoned, all associated bookmarks will be moved
<li>When a commit has been abandoned, all associated bookmarks will be moved
to its parent(s). If a working copy was pointing to the abandoned commit,
then a new working-copy commit will be created on top of the parent(s).</li>
</ul>
<p>You could describe the movement as following along the change-id of the
<p>You could describe the movement as following along the change-id of the
current bookmark commit, even if it isn't entirely accurate.</p>
<h2 id="pushing-bookmarks-safety-checks">Pushing bookmarks: Safety checks<a class="headerlink" href="#pushing-bookmarks-safety-checks" title="Permanent link">&para;</a></h2>
<p>Before <code>jj git push</code> actually moves, creates, or deletes a remote bookmark, it
@ -1775,8 +1774,8 @@ makes several safety checks.</p>
<li>
<p>If the remote bookmark already exists on the remote, it must be
<a href="#remotes-and-tracked-bookmarks">tracked</a>. If the bookmark does not already
exist on the remote, there is no problem; <code>jj git push</code> will create the
remote bookmark and mark it as tracked.</p>
exist on the remote, there is no problem; <code>jj git push --allow-new</code> will
create the remote bookmark and mark it as tracked.</p>
</li>
</ol>
<h2 id="conflicts">Conflicts<a class="headerlink" href="#conflicts" title="Permanent link">&para;</a></h2>

View File

@ -5,11 +5,10 @@
<meta charset="utf-8">
<title>Redirecting...</title>
<link rel="canonical" href="../bookmarks/">
<meta name="robots" content="noindex">
<script>var anchor=window.location.hash.substr(1);location.href="../bookmarks/"+(anchor?"#"+anchor:"")</script>
<meta http-equiv="refresh" content="0; url=../bookmarks/">
</head>
<body>
Redirecting...
You're being redirected to a <a href="../bookmarks/">new destination</a>.
</body>
</html>

File diff suppressed because it is too large Load Diff

View File

@ -1301,27 +1301,6 @@
<li class="md-nav__item">
<a href="../roadmap/" class="md-nav__link">
<span class="md-ellipsis">
Roadmap
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../design/git-submodules/" class="md-nav__link">
@ -1449,6 +1428,26 @@
<li class="md-nav__item">
<a href="../roadmap/" class="md-nav__link">
<span class="md-ellipsis">
Development Roadmap
</span>
</a>
</li>
</ul>
</nav>
</div>

View File

@ -522,9 +522,9 @@
</li>
<li class="md-nav__item">
<a href="#lazyjj" class="md-nav__link">
<a href="#jj-fzf" class="md-nav__link">
<span class="md-ellipsis">
LazyJJ
JJ-FZF
</span>
</a>
@ -537,6 +537,15 @@
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#lazyjj" class="md-nav__link">
<span class="md-ellipsis">
LazyJJ
</span>
</a>
</li>
<li class="md-nav__item">
@ -1266,27 +1275,6 @@
<li class="md-nav__item">
<a href="../roadmap/" class="md-nav__link">
<span class="md-ellipsis">
Roadmap
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../design/git-submodules/" class="md-nav__link">
@ -1414,6 +1402,26 @@
<li class="md-nav__item">
<a href="../roadmap/" class="md-nav__link">
<span class="md-ellipsis">
Development Roadmap
</span>
</a>
</li>
</ul>
</nav>
</div>
@ -1468,9 +1476,9 @@
</li>
<li class="md-nav__item">
<a href="#lazyjj" class="md-nav__link">
<a href="#jj-fzf" class="md-nav__link">
<span class="md-ellipsis">
LazyJJ
JJ-FZF
</span>
</a>
@ -1483,6 +1491,15 @@
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#lazyjj" class="md-nav__link">
<span class="md-ellipsis">
LazyJJ
</span>
</a>
</li>
<li class="md-nav__item">
@ -1542,13 +1559,18 @@ workflows quite easy. Take a look at its README.md as it quite descriptive.</p>
<p>Hunk.nvim is a Neovim based diff-editor for Jujutsu which can be used as an
alternative to the default <code>:builtin</code> diff-editor.</p>
<p>Find it <a href="https://github.com/julienvincent/hunk.nvim">here</a>.</p>
<h2 id="lazyjj">LazyJJ<a class="headerlink" href="#lazyjj" title="Permanent link">&para;</a></h2>
<p>lazyjj is a lazygit inspired TUI for Jujutsu.</p>
<p>Find it <a href="https://github.com/Cretezy/lazyjj">here</a>.</p>
<h2 id="jj-fzf">JJ-FZF<a class="headerlink" href="#jj-fzf" title="Permanent link">&para;</a></h2>
<p>Centered around the <code>jj log</code> graph view, jj-fzf provides previews of diffs, the
evolution-log, browses the op log and offers a large number of key bindings for
commonly used <code>jj</code> operations from rebase to undo, and helps with divergent commits.</p>
<p>Find it <a href="https://github.com/tim-janik/jj-fzf">here</a>.</p>
<h2 id="jj-tui">JJ TUI<a class="headerlink" href="#jj-tui" title="Permanent link">&para;</a></h2>
<p>This is TUI for Jujutsu built in Ocaml, it is unopiniated and its creator is
open to feedback.</p>
<p>Find it <a href="https://github.com/faldor20/jj_tui">here</a>.</p>
<h2 id="lazyjj">LazyJJ<a class="headerlink" href="#lazyjj" title="Permanent link">&para;</a></h2>
<p>lazyjj is a lazygit inspired TUI for Jujutsu.</p>
<p>Find it <a href="https://github.com/Cretezy/lazyjj">here</a>.</p>
<h2 id="visual-jujutsu">Visual Jujutsu<a class="headerlink" href="#visual-jujutsu" title="Permanent link">&para;</a></h2>
<p>VJJ is a fzf (fuzzy finder) wrapper for Jujutsu, which is meant to be used
interactively in the terminal.</p>

View File

@ -826,6 +826,15 @@
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#conflict-marker-style" class="md-nav__link">
<span class="md-ellipsis">
Conflict marker style
</span>
</a>
</li>
<li class="md-nav__item">
@ -1784,27 +1793,6 @@
<li class="md-nav__item">
<a href="../roadmap/" class="md-nav__link">
<span class="md-ellipsis">
Roadmap
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../design/git-submodules/" class="md-nav__link">
@ -1932,6 +1920,26 @@
<li class="md-nav__item">
<a href="../roadmap/" class="md-nav__link">
<span class="md-ellipsis">
Development Roadmap
</span>
</a>
</li>
</ul>
</nav>
</div>
@ -2086,6 +2094,15 @@
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#conflict-marker-style" class="md-nav__link">
<span class="md-ellipsis">
Conflict marker style
</span>
</a>
</li>
<li class="md-nav__item">
@ -2609,15 +2626,16 @@ right of the <code>=</code> sign) should be surrounded in quotes if it's a strin
<span class="k">[colors]</span>
<span class="s2">&quot;commit_id prefix&quot;</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="n">bold</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="kc">true</span><span class="w"> </span><span class="p">}</span>
</code></pre></div>
<p>Jujutsu favors the dotted style in these instructions, if only because it's
easier to write down in an unconfusing way. If you are confident with TOML
<p>The docs below refer to keys in text using dotted notation, but example
blocks will use heading notation to be unambiguous. If you are confident with TOML
then use whichever suits you in your config. If you mix dotted keys and headings,
<strong>put the dotted keys before the first heading</strong>.</p>
<strong>you must put the dotted keys before the first heading</strong>.</p>
<p>That's probably enough TOML to keep you out of trouble but the <a href="https://toml.io/en/v1.0.0">syntax guide</a> is
very short if you ever need to check.</p>
<h2 id="user-settings">User settings<a class="headerlink" href="#user-settings" title="Permanent link">&para;</a></h2>
<div class="highlight"><pre><span></span><code><span class="n">user</span><span class="p">.</span><span class="n">name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;YOUR NAME&quot;</span>
<span class="n">user</span><span class="p">.</span><span class="n">email</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;YOUR_EMAIL@example.com&quot;</span>
<div class="highlight"><pre><span></span><code><span class="k">[user]</span>
<span class="n">name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;YOUR NAME&quot;</span>
<span class="n">email</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;YOUR_EMAIL@example.com&quot;</span>
</code></pre></div>
<p>Don't forget to change these to your own details!</p>
<h2 id="ui-settings">UI settings<a class="headerlink" href="#ui-settings" title="Permanent link">&para;</a></h2>
@ -2626,11 +2644,13 @@ very short if you ever need to check.</p>
<code>auto</code> will use color only when writing to a terminal. <code>debug</code> will print the
active labels alongside the regular colorized output.</p>
<p>This setting overrides the <code>NO_COLOR</code> environment variable (if set).</p>
<div class="highlight"><pre><span></span><code><span class="n">ui</span><span class="p">.</span><span class="n">color</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;never&quot;</span><span class="w"> </span><span class="c1"># Turn off color</span>
<div class="highlight"><pre><span></span><code><span class="k">[ui]</span>
<span class="n">color</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;never&quot;</span><span class="w"> </span><span class="c1"># Turn off color</span>
</code></pre></div>
<h3 id="custom-colors-and-styles">Custom colors and styles<a class="headerlink" href="#custom-colors-and-styles" title="Permanent link">&para;</a></h3>
<p>You can customize the colors used for various elements of the UI. For example:</p>
<div class="highlight"><pre><span></span><code><span class="n">colors</span><span class="p">.</span><span class="n">commit_id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;green&quot;</span>
<div class="highlight"><pre><span></span><code><span class="k">[colors]</span>
<span class="n">commit_id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;green&quot;</span>
</code></pre></div>
<p>The following colors are available:</p>
<ul>
@ -2648,20 +2668,23 @@ active labels alongside the regular colorized output.</p>
"default" color can be used to override a color defined by a parent style
(explained below).</p>
<p>You can also use a 6-digit hex code for more control over the exact color used:</p>
<div class="highlight"><pre><span></span><code><span class="n">colors</span><span class="p">.</span><span class="n">change_id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;#ff1525&quot;</span>
<div class="highlight"><pre><span></span><code><span class="k">[colors]</span>
<span class="n">change_id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;#ff1525&quot;</span>
</code></pre></div>
<p>If you use a string value for a color, as in the examples above, it will be used
for the foreground color. You can also set the background color, or make the
text bold or underlined. For that, you need to use a table:</p>
<div class="highlight"><pre><span></span><code><span class="n">colors</span><span class="p">.</span><span class="n">commit_id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="n">fg</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="s2">&quot;green&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">bg</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="s2">&quot;#ff1525&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">bold</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w"> </span><span class="n">underline</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="kc">true</span><span class="w"> </span><span class="p">}</span>
<div class="highlight"><pre><span></span><code><span class="k">[colors]</span>
<span class="n">commit_id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="n">fg</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="s2">&quot;green&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">bg</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="s2">&quot;#ff1525&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">bold</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w"> </span><span class="n">underline</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="kc">true</span><span class="w"> </span><span class="p">}</span>
</code></pre></div>
<p>The key names are called "labels". The above used <code>commit_id</code> as label. You can
also create rules combining multiple labels. The rules work a bit like CSS
selectors. For example, if you want to color commit IDs green in general but
make the commit ID of the working-copy commit also be underlined, you can do
this:</p>
<div class="highlight"><pre><span></span><code><span class="n">colors</span><span class="p">.</span><span class="n">commit_id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;green&quot;</span>
<span class="n">colors</span><span class="p">.</span><span class="s2">&quot;working_copy commit_id&quot;</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="n">underline</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="kc">true</span><span class="w"> </span><span class="p">}</span>
<div class="highlight"><pre><span></span><code><span class="k">[colors]</span>
<span class="n">commit_id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;green&quot;</span>
<span class="s2">&quot;working_copy commit_id&quot;</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="n">underline</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="kc">true</span><span class="w"> </span><span class="p">}</span>
</code></pre></div>
<p>Parts of the style that are not overridden - such as the foreground color in the
example above - are inherited from the parent style.</p>
@ -2672,7 +2695,8 @@ for some examples of what's possible.</p>
<p>When <code>jj</code> is run with no explicit subcommand, the value of the
<code>ui.default-command</code> setting will be used instead. Possible values are any valid
subcommand name, subcommand alias, or user-defined alias (defaults to <code>"log"</code>).</p>
<div class="highlight"><pre><span></span><code><span class="n">ui</span><span class="p">.</span><span class="n">default-command</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="s2">&quot;log&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;--reversed&quot;</span><span class="p">]</span>
<div class="highlight"><pre><span></span><code><span class="k">[ui]</span>
<span class="n">default-command</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="s2">&quot;log&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;--reversed&quot;</span><span class="p">]</span>
</code></pre></div>
<h3 id="default-description">Default description<a class="headerlink" href="#default-description" title="Permanent link">&para;</a></h3>
<p>The editor content of a commit description can be populated by the
@ -2690,7 +2714,8 @@ subcommand name, subcommand alias, or user-defined alias (defaults to <code>"log
</code></pre></div>
<p>The value of the <code>ui.default-description</code> setting can also be used in order to
fill in things like BUG=, TESTED= etc.</p>
<div class="highlight"><pre><span></span><code><span class="n">ui</span><span class="p">.</span><span class="n">default-description</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;</span><span class="se">\n\n</span><span class="s2">TESTED=TODO&quot;</span>
<div class="highlight"><pre><span></span><code><span class="k">[ui]</span>
<span class="n">default-description</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;</span><span class="se">\n\n</span><span class="s2">TESTED=TODO&quot;</span>
</code></pre></div>
<h3 id="diff-colors-and-styles">Diff colors and styles<a class="headerlink" href="#diff-colors-and-styles" title="Permanent link">&para;</a></h3>
<p>In color-words and git diffs, word-level hunks are rendered with underline. You
@ -2701,8 +2726,9 @@ can override the default style with the following keys:</p>
<span class="s2">&quot;diff added token&quot;</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="n">bg</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="s2">&quot;#002200&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">underline</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="kc">false</span><span class="w"> </span><span class="p">}</span>
</code></pre></div>
<h3 id="diff-format">Diff format<a class="headerlink" href="#diff-format" title="Permanent link">&para;</a></h3>
<div class="highlight"><pre><span></span><code><span class="c1"># Possible values: &quot;color-words&quot; (default), &quot;git&quot;, &quot;summary&quot;</span>
<span class="n">ui</span><span class="p">.</span><span class="n">diff</span><span class="p">.</span><span class="n">format</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;git&quot;</span>
<div class="highlight"><pre><span></span><code><span class="k">[ui]</span>
<span class="c1"># Possible values: &quot;color-words&quot; (default), &quot;git&quot;, &quot;summary&quot;</span>
<span class="n">diff</span><span class="p">.</span><span class="n">format</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;git&quot;</span>
</code></pre></div>
<h4 id="color-words-diff-options">Color-words diff options<a class="headerlink" href="#color-words-diff-options" title="Permanent link">&para;</a></h4>
<p>In color-words diffs, changed words are displayed inline by default. Because
@ -2768,26 +2794,42 @@ invocations as follows:</p>
<span class="k">[merge-tools.vimdiff]</span>
<span class="n">diff-invocation-mode</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;file-by-file&quot;</span>
</code></pre></div>
<h3 id="conflict-marker-style">Conflict marker style<a class="headerlink" href="#conflict-marker-style" title="Permanent link">&para;</a></h3>
<p>You can configure which style of conflict markers to use when materializing
conflicts:</p>
<div class="highlight"><pre><span></span><code><span class="k">[ui]</span>
<span class="c1"># Shows a single snapshot and one or more diffs to apply to it</span>
<span class="n">conflict-marker-style</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;diff&quot;</span>
<span class="c1"># Shows a snapshot for each side and base of the conflict</span>
<span class="n">conflict-marker-style</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;snapshot&quot;</span>
<span class="c1"># Uses Git&#39;s &quot;diff3&quot; conflict markers to support tools that depend on it</span>
<span class="n">conflict-marker-style</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;git&quot;</span>
</code></pre></div>
<p>For more details about these conflict marker styles, see the <a href="../conflicts/#conflict-markers">conflicts
page</a>.</p>
<h3 id="set-of-immutable-commits">Set of immutable commits<a class="headerlink" href="#set-of-immutable-commits" title="Permanent link">&para;</a></h3>
<p>You can configure the set of immutable commits via
<code>revset-aliases."immutable_heads()"</code>. The default set of immutable heads is
<code>builtin_immutable_heads()</code>, which in turn is defined as
<code>present(trunk()) | tags() | untracked_remote_bookmarks()</code>. For example, to
also consider the <code>release@origin</code> bookmark immutable:</p>
<div class="highlight"><pre><span></span><code><span class="n">revset-aliases</span><span class="p">.</span><span class="s2">&quot;immutable_heads()&quot;</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;builtin_immutable_heads() | release@origin&quot;</span>
<div class="highlight"><pre><span></span><code><span class="k">[revset-aliases]</span>
<span class="s2">&quot;immutable_heads()&quot;</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;builtin_immutable_heads() | release@origin&quot;</span>
</code></pre></div>
<p>To prevent rewriting commits authored by other users:</p>
<div class="highlight"><pre><span></span><code><span class="c1"># The `trunk().. &amp;` bit is an optimization to scan for non-`mine()` commits</span>
<span class="c1"># only among commits that are not in `trunk()`.</span>
<span class="n">revset-aliases</span><span class="p">.</span><span class="s2">&quot;immutable_heads()&quot;</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;builtin_immutable_heads() | (trunk().. &amp; ~mine())&quot;</span>
<span class="k">[revset-aliases]</span>
<span class="s2">&quot;immutable_heads()&quot;</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;builtin_immutable_heads() | (trunk().. &amp; ~mine())&quot;</span>
</code></pre></div>
<p>Ancestors of the configured set are also immutable. The root commit is always
immutable even if the set is empty.</p>
<h2 id="log">Log<a class="headerlink" href="#log" title="Permanent link">&para;</a></h2>
<h3 id="default-revisions">Default revisions<a class="headerlink" href="#default-revisions" title="Permanent link">&para;</a></h3>
<p>You can configure the revisions <code>jj log</code> would show when neither <code>-r</code> nor any paths are specified.</p>
<div class="highlight"><pre><span></span><code><span class="c1"># Show commits that are not in `main@origin`</span>
<span class="n">revsets</span><span class="p">.</span><span class="n">log</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;main@origin..&quot;</span>
<div class="highlight"><pre><span></span><code><span class="k">[revsets]</span>
<span class="c1"># Show commits that are not in `main@origin`</span>
<span class="n">log</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;main@origin..&quot;</span>
</code></pre></div>
<p>The default value for <code>revsets.log</code> is
<code>'present(@) | ancestors(immutable_heads().., 2) | present(trunk())'</code>.</p>
@ -2812,8 +2854,9 @@ your config:</p>
<span class="n">log</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;builtin_log_compact_full_description&quot;</span>
</code></pre></div>
<h3 id="graph-style">Graph style<a class="headerlink" href="#graph-style" title="Permanent link">&para;</a></h3>
<div class="highlight"><pre><span></span><code><span class="c1"># Possible values: &quot;curved&quot; (default), &quot;square&quot;, &quot;ascii&quot;, &quot;ascii-large&quot;</span>
<span class="n">ui</span><span class="p">.</span><span class="n">graph</span><span class="p">.</span><span class="n">style</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;square&quot;</span>
<div class="highlight"><pre><span></span><code><span class="k">[ui]</span>
<span class="c1"># Possible values: &quot;curved&quot; (default), &quot;square&quot;, &quot;ascii&quot;, &quot;ascii-large&quot;</span>
<span class="n">graph</span><span class="p">.</span><span class="n">style</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;square&quot;</span>
</code></pre></div>
<h4 id="node-style">Node style<a class="headerlink" href="#node-style" title="Permanent link">&para;</a></h4>
<p>The symbols used to represent commits or operations can be customized via
@ -2837,7 +2880,8 @@ templates.</p>
<h3 id="wrap-log-content">Wrap log content<a class="headerlink" href="#wrap-log-content" title="Permanent link">&para;</a></h3>
<p>If enabled, <code>log</code>/<code>evolog</code>/<code>op log</code> content will be wrapped based on
the terminal width.</p>
<div class="highlight"><pre><span></span><code><span class="n">ui</span><span class="p">.</span><span class="n">log-word-wrap</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">true</span>
<div class="highlight"><pre><span></span><code><span class="k">[ui]</span>
<span class="n">log-word-wrap</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">true</span>
</code></pre></div>
<h3 id="display-of-commit-and-change-ids">Display of commit and change ids<a class="headerlink" href="#display-of-commit-and-change-ids" title="Permanent link">&para;</a></h3>
<p>Can be customized by the <code>format_short_id()</code> template alias.</p>
@ -2858,8 +2902,9 @@ the terminal width.</p>
<span class="s1">&#39;format_short_change_id(id)&#39;</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s1">&#39;format_short_id(id).upper()&#39;</span>
</code></pre></div>
<p>To get shorter prefixes for certain revisions, set <code>revsets.short-prefixes</code>:</p>
<div class="highlight"><pre><span></span><code><span class="c1"># Prioritize the current bookmark</span>
<span class="n">revsets</span><span class="p">.</span><span class="n">short-prefixes</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;(main..@)::&quot;</span>
<div class="highlight"><pre><span></span><code><span class="k">[revsets]</span>
<span class="c1"># Prioritize the current bookmark</span>
<span class="n">short-prefixes</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;(main..@)::&quot;</span>
</code></pre></div>
<h3 id="relative-timestamps">Relative timestamps<a class="headerlink" href="#relative-timestamps" title="Permanent link">&para;</a></h3>
<p>Can be customized by the <code>format_timestamp()</code> template alias.</p>
@ -2893,8 +2938,9 @@ modifier</a>.</p>
<p>Another way you can override this check is by setting
<code>ui.always-allow-large-revsets</code> to <code>true</code>. Then, <code>jj</code> will allow every one of
the revset arguments of such commands to expand to any number of revisions.</p>
<div class="highlight"><pre><span></span><code><span class="c1"># Assume `all:` prefix before revsets whenever it would make a difference</span>
<span class="n">ui</span><span class="p">.</span><span class="n">always-allow-large-revsets</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">true</span>
<div class="highlight"><pre><span></span><code><span class="k">[ui]</span>
<span class="c1"># Assume `all:` prefix before revsets whenever it would make a difference</span>
<span class="n">always-allow-large-revsets</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">true</span>
</code></pre></div>
<h2 id="pager">Pager<a class="headerlink" href="#pager" title="Permanent link">&para;</a></h2>
<p>The default pager is can be set via <code>ui.pager</code> or the <code>PAGER</code> environment
@ -2914,17 +2960,19 @@ bindings and some more details.</p>
<p>It is possible the default will change to <code>:builtin</code> for all platforms in the
future.</p>
<p>Additionally, paging behavior can be toggled via <code>ui.paginate</code> like so:</p>
<div class="highlight"><pre><span></span><code><span class="c1"># Enable pagination for commands that support it (default)</span>
<span class="n">ui</span><span class="p">.</span><span class="n">paginate</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;auto&quot;</span>
<div class="highlight"><pre><span></span><code><span class="k">[ui]</span>
<span class="c1"># Enable pagination for commands that support it (default)</span>
<span class="n">paginate</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;auto&quot;</span>
<span class="c1"># Disable all pagination, equivalent to using --no-pager</span>
<span class="n">ui</span><span class="p">.</span><span class="n">paginate</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;never&quot;</span>
<span class="n">paginate</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;never&quot;</span>
</code></pre></div>
<h3 id="processing-contents-to-be-paged">Processing contents to be paged<a class="headerlink" href="#processing-contents-to-be-paged" title="Permanent link">&para;</a></h3>
<p>If you'd like to pass the output through a formatter e.g.
<a href="https://github.com/so-fancy/diff-so-fancy"><code>diff-so-fancy</code></a> before piping it
through a pager you must do it using a subshell as, unlike <code>git</code> or <code>hg</code>, the
command will be executed directly. For example:</p>
<div class="highlight"><pre><span></span><code><span class="n">ui</span><span class="p">.</span><span class="n">pager</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="s2">&quot;sh&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;-c&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;diff-so-fancy | less -RFX&quot;</span><span class="p">]</span>
<div class="highlight"><pre><span></span><code><span class="k">[ui]</span>
<span class="n">pager</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="s2">&quot;sh&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;-c&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;diff-so-fancy | less -RFX&quot;</span><span class="p">]</span>
</code></pre></div>
<p>Some formatters (like <a href="https://github.com/dandavison/delta"><code>delta</code></a>) require
git style diffs for formatting. You can configure this style of
@ -2937,9 +2985,40 @@ diff as the default with the <code>ui.diff</code> setting. For example:</p>
</code></pre></div>
<h2 id="aliases">Aliases<a class="headerlink" href="#aliases" title="Permanent link">&para;</a></h2>
<p>You can define aliases for commands, including their arguments. For example:</p>
<div class="highlight"><pre><span></span><code><span class="c1"># `jj l` shows commits on the working-copy commit&#39;s (anonymous) bookmark</span>
<div class="highlight"><pre><span></span><code><span class="k">[aliases]</span>
<span class="c1"># `jj l` shows commits on the working-copy commit&#39;s (anonymous) bookmark</span>
<span class="c1"># compared to the `main` bookmark</span>
<span class="n">aliases</span><span class="p">.</span><span class="n">l</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="s2">&quot;log&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;-r&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;(main..@):: | (main..@)-&quot;</span><span class="p">]</span>
<span class="n">l</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="s2">&quot;log&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;-r&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;(main..@):: | (main..@)-&quot;</span><span class="p">]</span>
</code></pre></div>
<p>This alias syntax can only run a single jj command. However, you may want to
execute multiple jj commands with a single alias, or run arbitrary scripts that
complement your version control workflow. This can be done, but be aware of the
danger:</p>
<div class="admonition warning">
<p class="admonition-title">Warning</p>
<p>The following technique just provides a convenient syntax for running
arbitrary code on your system. Using it irresponsibly may cause damage
ranging from breaking the behavior of <code>jj undo</code> to wiping your file system.
Exercise the same amount of caution while writing these aliases as you would
when typing commands into the terminal!</p>
<p>This feature may be removed or replaced by an embedded scripting language in
the future.</p>
</div>
<p>The command <code>jj util exec</code> will simply run any command you pass to it as an
argument. Additional arguments are passed through. Here are some examples:</p>
<div class="highlight"><pre><span></span><code><span class="k">[aliases]</span>
<span class="n">my-script</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="s2">&quot;util&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;exec&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;--&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;my-jj-script&quot;</span><span class="p">]</span>
<span class="c1"># ^^^^</span>
<span class="c1"># This makes sure that flags are passed to your script instead of parsed by jj.</span>
<span class="n">my-inline-script</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="s2">&quot;util&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;exec&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;--&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;bash&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;-c&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;&quot;&quot;</span>
<span class="s2">#!/usr/bin/env bash</span>
<span class="s2">set -euo pipefail</span>
<span class="s2">echo &quot;Look Ma, everything in one file!&quot;</span>
<span class="s2">echo &quot;args: $@&quot;</span>
<span class="s2">&quot;&quot;&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;&quot;</span><span class="p">]</span>
<span class="c1"># ^^</span>
<span class="c1"># This last empty string will become &quot;$0&quot; in bash, so your actual arguments</span>
<span class="c1"># are all included in &quot;$@&quot; and start at &quot;$1&quot; as expected.</span>
</code></pre></div>
<h2 id="editor">Editor<a class="headerlink" href="#editor" title="Permanent link">&para;</a></h2>
<p>The default editor is set via <code>ui.editor</code>, though there are several places to
@ -2948,20 +3027,23 @@ a <code>$</code>):</p>
<p><code>$JJ_EDITOR</code> &gt; <code>ui.editor</code> &gt; <code>$VISUAL</code> &gt; <code>$EDITOR</code></p>
<p>Pico is the default editor (Notepad on Windows) in the absence of any other
setting, but you could set it explicitly too.</p>
<div class="highlight"><pre><span></span><code><span class="n">ui</span><span class="p">.</span><span class="n">editor</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;pico&quot;</span>
<div class="highlight"><pre><span></span><code><span class="k">[ui]</span>
<span class="n">editor</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;pico&quot;</span>
</code></pre></div>
<p>To use NeoVim instead:</p>
<div class="highlight"><pre><span></span><code><span class="n">ui</span><span class="p">.</span><span class="n">editor</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;nvim&quot;</span>
<div class="highlight"><pre><span></span><code><span class="k">[ui]</span>
<span class="n">editor</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;nvim&quot;</span>
</code></pre></div>
<p>For GUI editors you possibly need to use a <code>-w</code> or <code>--wait</code>. Some examples:</p>
<div class="highlight"><pre><span></span><code><span class="n">ui</span><span class="p">.</span><span class="n">editor</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;code -w&quot;</span><span class="w"> </span><span class="c1"># VS Code</span>
<span class="n">ui</span><span class="p">.</span><span class="n">editor</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;code.cmd -w&quot;</span><span class="w"> </span><span class="c1"># VS Code on Windows</span>
<span class="n">ui</span><span class="p">.</span><span class="n">editor</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;bbedit -w&quot;</span><span class="w"> </span><span class="c1"># BBEdit</span>
<span class="n">ui</span><span class="p">.</span><span class="n">editor</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;subl -n -w&quot;</span><span class="w"> </span><span class="c1"># Sublime Text</span>
<span class="n">ui</span><span class="p">.</span><span class="n">editor</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;mate -w&quot;</span><span class="w"> </span><span class="c1"># TextMate</span>
<span class="n">ui</span><span class="p">.</span><span class="n">editor</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="s2">&quot;C:/Program Files/Notepad++/notepad++.exe&quot;</span><span class="p">,</span>
<div class="highlight"><pre><span></span><code><span class="k">[ui]</span>
<span class="n">editor</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;code -w&quot;</span><span class="w"> </span><span class="c1"># VS Code</span>
<span class="n">editor</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;code.cmd -w&quot;</span><span class="w"> </span><span class="c1"># VS Code on Windows</span>
<span class="n">editor</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;bbedit -w&quot;</span><span class="w"> </span><span class="c1"># BBEdit</span>
<span class="n">editor</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;subl -n -w&quot;</span><span class="w"> </span><span class="c1"># Sublime Text</span>
<span class="n">editor</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;mate -w&quot;</span><span class="w"> </span><span class="c1"># TextMate</span>
<span class="n">editor</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="s2">&quot;C:/Program Files/Notepad++/notepad++.exe&quot;</span><span class="p">,</span>
<span class="w"> </span><span class="s2">&quot;-multiInst&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;-notabbar&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;-nosession&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;-noPlugin&quot;</span><span class="p">]</span><span class="w"> </span><span class="c1"># Notepad++</span>
<span class="n">ui</span><span class="p">.</span><span class="n">editor</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;idea --temp-project --wait&quot;</span><span class="w"> </span><span class="c1">#IntelliJ</span>
<span class="n">editor</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;idea --temp-project --wait&quot;</span><span class="w"> </span><span class="c1">#IntelliJ</span>
</code></pre></div>
<p>Obviously, you would only set one line, don't copy them all in!</p>
<h2 id="editing-diffs">Editing diffs<a class="headerlink" href="#editing-diffs" title="Permanent link">&para;</a></h2>
@ -2983,9 +3065,10 @@ portions of lines from the diff or even arbitrarily editing the text of the
files.</p>
<p>If <code>ui.diff-editor</code> is a string, e.g. <code>"meld"</code>, the arguments will be read from
the following config keys.</p>
<div class="highlight"><pre><span></span><code><span class="c1"># merge-tools.meld.program = &quot;meld&quot; # Defaults to the name of the tool if not specified</span>
<span class="n">merge-tools</span><span class="p">.</span><span class="n">meld</span><span class="p">.</span><span class="n">program</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;/path/to/meld&quot;</span><span class="w"> </span><span class="c1"># May be necessary if `meld` is not in the PATH</span>
<span class="n">merge-tools</span><span class="p">.</span><span class="n">meld</span><span class="p">.</span><span class="n">edit-args</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="s2">&quot;--newtab&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;$left&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;$right&quot;</span><span class="p">]</span>
<div class="highlight"><pre><span></span><code><span class="k">[merge-tools.meld]</span>
<span class="c1"># program = &quot;meld&quot; # Defaults to the name of the tool if not specified</span>
<span class="n">program</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;/path/to/meld&quot;</span><span class="w"> </span><span class="c1"># May be necessary if `meld` is not in the PATH</span>
<span class="n">edit-args</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="s2">&quot;--newtab&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;$left&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;$right&quot;</span><span class="p">]</span>
</code></pre></div>
<p><code>jj</code> makes the following substitutions:</p>
<ul>
@ -2999,12 +3082,13 @@ the following config keys.</p>
</ul>
<p>Finally, <code>ui.diff-editor</code> can be a list that specifies a command and its arguments.</p>
<p>Some examples:</p>
<div class="highlight"><pre><span></span><code><span class="c1"># Use merge-tools.meld.edit-args</span>
<span class="n">ui</span><span class="p">.</span><span class="n">diff-editor</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;meld&quot;</span><span class="w"> </span><span class="c1"># Or `kdiff3`, or `diffedit3`, ...</span>
<div class="highlight"><pre><span></span><code><span class="k">[ui]</span>
<span class="c1"># Use merge-tools.meld.edit-args</span>
<span class="n">diff-editor</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;meld&quot;</span><span class="w"> </span><span class="c1"># Or `kdiff3`, or `diffedit3`, ...</span>
<span class="c1"># Specify edit-args inline</span>
<span class="n">ui</span><span class="p">.</span><span class="n">diff-editor</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="s2">&quot;/path/to/binary&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;--be-helpful&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;$left&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;$right&quot;</span><span class="p">]</span>
<span class="n">diff-editor</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="s2">&quot;/path/to/binary&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;--be-helpful&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;$left&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;$right&quot;</span><span class="p">]</span>
<span class="c1"># Equivalent to [&quot;binary&quot;, &quot;$left&quot;, &quot;$right&quot;] arguments by default</span>
<span class="n">ui</span><span class="p">.</span><span class="n">diff-editor</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;binary&quot;</span>
<span class="n">diff-editor</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;binary&quot;</span>
</code></pre></div>
<h3 id="experimental-3-pane-diff-editing">Experimental 3-pane diff editing<a class="headerlink" href="#experimental-3-pane-diff-editing" title="Permanent link">&para;</a></h3>
<p>We offer two special "3-pane" diff editor configs:</p>
@ -3080,10 +3164,11 @@ experience, you can follow <a href="https://github.com/martinvonz/jj/wiki/Vim#us
<h2 id="3-way-merge-tools-for-conflict-resolution">3-way merge tools for conflict resolution<a class="headerlink" href="#3-way-merge-tools-for-conflict-resolution" title="Permanent link">&para;</a></h2>
<p>The <code>ui.merge-editor</code> key specifies the tool used for three-way merge tools
by <code>jj resolve</code>. For example:</p>
<div class="highlight"><pre><span></span><code><span class="c1"># Use merge-tools.meld.merge-args</span>
<span class="n">ui</span><span class="p">.</span><span class="n">merge-editor</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;meld&quot;</span><span class="w"> </span><span class="c1"># Or &quot;vscode&quot; or &quot;vscodium&quot; or &quot;kdiff3&quot; or &quot;vimdiff&quot;</span>
<div class="highlight"><pre><span></span><code><span class="k">[ui]</span>
<span class="c1"># Use merge-tools.meld.merge-args</span>
<span class="n">merge-editor</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;meld&quot;</span><span class="w"> </span><span class="c1"># Or &quot;vscode&quot; or &quot;vscodium&quot; or &quot;kdiff3&quot; or &quot;vimdiff&quot;</span>
<span class="c1"># Specify merge-args inline</span>
<span class="n">ui</span><span class="p">.</span><span class="n">merge-editor</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="s2">&quot;meld&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;$left&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;$base&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;$right&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;-o&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;$output&quot;</span><span class="p">]</span>
<span class="n">merge-editor</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="s2">&quot;meld&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;$left&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;$base&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;$right&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;-o&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;$output&quot;</span><span class="p">]</span>
</code></pre></div>
<p>The "vscode", "vscodium", "meld", "kdiff3", and "vimdiff" tools can be used out of the box,
as long as they are installed.</p>
@ -3096,16 +3181,19 @@ specified either inline or in the <code>merge-tools.TOOL.merge-args</code> key.
example of how to set this key and other tool configuration options, here is
the out-of-the-box configuration of the three default tools. (There is no need
to copy it to your config file verbatim, but you are welcome to customize it.)</p>
<div class="highlight"><pre><span></span><code><span class="c1"># merge-tools.kdiff3.program = &quot;kdiff3&quot; # Defaults to the name of the tool if not specified</span>
<span class="n">merge-tools</span><span class="p">.</span><span class="n">kdiff3</span><span class="p">.</span><span class="n">merge-args</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="s2">&quot;$base&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;$left&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;$right&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;-o&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;$output&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;--auto&quot;</span><span class="p">]</span>
<span class="n">merge-tools</span><span class="p">.</span><span class="n">meld</span><span class="p">.</span><span class="n">merge-args</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="s2">&quot;$left&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;$base&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;$right&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;-o&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;$output&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;--auto-merge&quot;</span><span class="p">]</span>
<div class="highlight"><pre><span></span><code><span class="k">[merge-tools.kdiff3]</span>
<span class="c1"># program = &quot;kdiff3&quot; # Defaults to the name of the tool if not specified</span>
<span class="n">merge-args</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="s2">&quot;$base&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;$left&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;$right&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;-o&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;$output&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;--auto&quot;</span><span class="p">]</span>
<span class="k">[merge-tools.meld]</span>
<span class="n">merge-args</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="s2">&quot;$left&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;$base&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;$right&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;-o&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;$output&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;--auto-merge&quot;</span><span class="p">]</span>
<span class="n">merge-tools</span><span class="p">.</span><span class="n">vimdiff</span><span class="p">.</span><span class="n">merge-args</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="s2">&quot;-f&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;-d&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;$output&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;-M&quot;</span><span class="p">,</span>
<span class="k">[merge-tools.vimdiff]</span>
<span class="n">merge-args</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="s2">&quot;-f&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;-d&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;$output&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;-M&quot;</span><span class="p">,</span>
<span class="w"> </span><span class="s2">&quot;$left&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;$base&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;$right&quot;</span><span class="p">,</span>
<span class="w"> </span><span class="s2">&quot;-c&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;wincmd J&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;-c&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;set modifiable&quot;</span><span class="p">,</span>
<span class="w"> </span><span class="s2">&quot;-c&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;set write&quot;</span><span class="p">]</span>
<span class="n">merge-tools</span><span class="p">.</span><span class="n">vimdiff</span><span class="p">.</span><span class="n">program</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;vim&quot;</span>
<span class="n">merge-tools</span><span class="p">.</span><span class="n">vimdiff</span><span class="p">.</span><span class="n">merge-tool-edits-conflict-markers</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">true</span><span class="w"> </span><span class="c1"># See below for an explanation</span>
<span class="n">program</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;vim&quot;</span>
<span class="n">merge-tool-edits-conflict-markers</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">true</span><span class="w"> </span><span class="c1"># See below for an explanation</span>
</code></pre></div>
<p><code>jj</code> makes the following substitutions:</p>
<ul>
@ -3124,9 +3212,19 @@ to copy it to your config file verbatim, but you are welcome to customize it.)</
</ul>
<h3 id="editing-conflict-markers-with-a-tool-or-a-text-editor">Editing conflict markers with a tool or a text editor<a class="headerlink" href="#editing-conflict-markers-with-a-tool-or-a-text-editor" title="Permanent link">&para;</a></h3>
<p>By default, the merge tool starts with an empty output file. If the tool puts
anything into the output file, and exits with the 0 exit code,
<code>jj</code> assumes that the conflict is fully resolved. This is appropriate for most
graphical merge tools.</p>
anything into the output file and exits with the 0 exit code,
<code>jj</code> assumes that the conflict is fully resolved, while if the tool exits with
a non-zero exit code, <code>jj</code> assumes that the merge should be cancelled.
This is appropriate for most graphical merge tools.</p>
<p>For merge tools which try to automatically resolve conflicts without user input,
this behavior may not be desired. For instance, some automatic merge tools use
an exit code of 1 to indicate that some conflicts were unable to be resolved and
that the output file should contain conflict markers. In that case, you could
set the config option <code>merge-tools.TOOL.merge-conflict-exit-codes = [1]</code> to tell
<code>jj</code> to expect conflict markers in the output file if the exit code is 1. If a
merge tool produces output using Git's "diff3" conflict style, <code>jj</code> should be
able to parse it correctly, so many Git merge drivers should be usable with <code>jj</code>
as well.</p>
<p>Some tools (e.g. <code>vimdiff</code>) can present a multi-way diff but don't resolve
conflict themselves. When using such tools, <code>jj</code>
can help you by populating the output file with conflict markers before starting
@ -3136,7 +3234,10 @@ tool fill it in). To do that, set the
<p>With this option set, if the output file still contains conflict markers after
the conflict is done, <code>jj</code> assumes that the conflict was only partially resolved
and parses the conflict markers to get the new state of the conflict. The
conflict is considered fully resolved when there are no conflict markers left.</p>
conflict is considered fully resolved when there are no conflict markers left.
The conflict marker style can also be customized per tool using the
<code>merge-tools.TOOL.conflict-marker-style</code> option, which takes the same values as
<a href="#conflict-marker-style"><code>ui.conflict-marker-style</code></a>.</p>
<h2 id="code-formatting-and-other-file-content-transformations">Code formatting and other file content transformations<a class="headerlink" href="#code-formatting-and-other-file-content-transformations" title="Permanent link">&para;</a></h2>
<p>The <code>jj fix</code> command allows you to efficiently rewrite files in complex commit
graphs with no risk of introducing conflicts, using tools like <code>clang-format</code> or
@ -3195,11 +3296,13 @@ GnuPG or SSH signing keys.</p>
</code></pre></div>
<p>By default the gpg backend will look for a <code>gpg</code> binary on your path. If you want
to change the program used or specify a path to <code>gpg</code> explicitly you can set:</p>
<div class="highlight"><pre><span></span><code><span class="n">signing</span><span class="p">.</span><span class="n">backends</span><span class="p">.</span><span class="n">gpg</span><span class="p">.</span><span class="n">program</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;gpg2&quot;</span>
<div class="highlight"><pre><span></span><code><span class="k">[signing]</span>
<span class="n">backends</span><span class="p">.</span><span class="n">gpg</span><span class="p">.</span><span class="n">program</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;gpg2&quot;</span>
</code></pre></div>
<p>Also by default the gpg backend will ignore key expiry when verifying commit signatures.
To consider expired keys as invalid you can set:</p>
<div class="highlight"><pre><span></span><code><span class="n">signing</span><span class="p">.</span><span class="n">backends</span><span class="p">.</span><span class="n">gpg</span><span class="p">.</span><span class="n">allow-expired-keys</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">false</span>
<div class="highlight"><pre><span></span><code><span class="k">[signing]</span>
<span class="n">backends</span><span class="p">.</span><span class="n">gpg</span><span class="p">.</span><span class="n">allow-expired-keys</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">false</span>
</code></pre></div>
<h3 id="ssh-signing">SSH Signing<a class="headerlink" href="#ssh-signing" title="Permanent link">&para;</a></h3>
<div class="highlight"><pre><span></span><code><span class="k">[signing]</span>
@ -3211,14 +3314,16 @@ To consider expired keys as invalid you can set:</p>
</code></pre></div>
<p>By default the ssh backend will look for a <code>ssh-keygen</code> binary on your path. If you want
to change the program used or specify a path to <code>ssh-keygen</code> explicitly you can set:</p>
<div class="highlight"><pre><span></span><code><span class="n">signing</span><span class="p">.</span><span class="n">backends</span><span class="p">.</span><span class="n">ssh</span><span class="p">.</span><span class="n">program</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;/path/to/ssh-keygen&quot;</span>
<div class="highlight"><pre><span></span><code><span class="k">[signing]</span>
<span class="n">backends</span><span class="p">.</span><span class="n">ssh</span><span class="p">.</span><span class="n">program</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;/path/to/ssh-keygen&quot;</span>
</code></pre></div>
<p>When verifying commit signatures the ssh backend needs to be provided with an allowed-signers
file containing the public keys of authors whose signatures you want to be able to verify.</p>
<p>You can find the format for this file in the
<a href="https://man.openbsd.org/ssh-keygen#ALLOWED_SIGNERS">ssh-keygen man page</a>. This can be provided
as follows:</p>
<div class="highlight"><pre><span></span><code><span class="n">signing</span><span class="p">.</span><span class="n">backends</span><span class="p">.</span><span class="n">ssh</span><span class="p">.</span><span class="n">allowed-signers</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;/path/to/allowed-signers&quot;</span>
<div class="highlight"><pre><span></span><code><span class="k">[signing]</span>
<span class="n">backends</span><span class="p">.</span><span class="n">ssh</span><span class="p">.</span><span class="n">allowed-signers</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;/path/to/allowed-signers&quot;</span>
</code></pre></div>
<h2 id="git-settings">Git settings<a class="headerlink" href="#git-settings" title="Permanent link">&para;</a></h2>
<h3 id="default-remotes-for-jj-git-fetch-and-jj-git-push">Default remotes for <code>jj git fetch</code> and <code>jj git push</code><a class="headerlink" href="#default-remotes-for-jj-git-fetch-and-jj-git-push" title="Permanent link">&para;</a></h3>
@ -3250,7 +3355,8 @@ may be undesirable in some repositories, e.g.:</p>
resulting in an unhelpful conflicted state.</li>
</ul>
<p>You can enable this behavior by setting <code>git.auto-local-bookmark</code> like so,</p>
<div class="highlight"><pre><span></span><code><span class="n">git</span><span class="p">.</span><span class="n">auto-local-bookmark</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">true</span>
<div class="highlight"><pre><span></span><code><span class="k">[git]</span>
<span class="n">auto-local-bookmark</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">true</span>
</code></pre></div>
<p>This setting is applied only to new remote bookmarks. Existing remote bookmarks
can be tracked individually by using <code>jj bookmark track</code>/<code>untrack</code> commands.</p>
@ -3266,21 +3372,23 @@ to be <a href="https://git-scm.com/docs/gitglossary/#Documentation/gitglossary.t
then be abandoned, and any descendant commits will be rebased off of them (as
usual when commits are abandoned). You can disable this behavior and instead
leave the Git-unreachable commits in your repo by setting:</p>
<div class="highlight"><pre><span></span><code><span class="n">git</span><span class="p">.</span><span class="n">abandon-unreachable-commits</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">false</span>
<div class="highlight"><pre><span></span><code><span class="k">[git]</span>
<span class="n">abandon-unreachable-commits</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">false</span>
</code></pre></div>
<h3 id="prefix-for-generated-bookmarks-on-push">Prefix for generated bookmarks on push<a class="headerlink" href="#prefix-for-generated-bookmarks-on-push" title="Permanent link">&para;</a></h3>
<p><code>jj git push --change</code> generates bookmark names with a prefix of "push-" by
default. You can pick a different prefix by setting <code>git.push-bookmark-prefix</code>. For
example:</p>
<div class="codehilite"><pre><span></span><code>git.push-bookmark-prefix = &quot;martinvonz/push-&quot;
<div class="highlight"><pre><span></span><code><span class="k">[git]</span>
<span class="n">push-bookmark-prefix</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;martinvonz/push-&quot;</span>
</code></pre></div>
<h3 id="set-of-private-commits">Set of private commits<a class="headerlink" href="#set-of-private-commits" title="Permanent link">&para;</a></h3>
<p>You can configure the set of private commits by setting <code>git.private-commits</code> to
a revset. The value is a revset of commits that Jujutsu will refuse to push. If
unset, all commits are eligible to be pushed.</p>
<div class="highlight"><pre><span></span><code><span class="c1"># Prevent pushing work in progress or anything explicitly labeled &quot;private&quot;</span>
<span class="n">git</span><span class="p">.</span><span class="n">private-commits</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;description(glob:&#39;wip:*&#39;) | description(glob:&#39;private:*&#39;)&quot;</span>
<div class="highlight"><pre><span></span><code><span class="k">[git]</span>
<span class="c1"># Prevent pushing work in progress or anything explicitly labeled &quot;private&quot;</span>
<span class="n">private-commits</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;description(glob:&#39;wip:*&#39;) | description(glob:&#39;private:*&#39;)&quot;</span>
</code></pre></div>
<p>If a commit is in <code>git.private-commits</code> but is already on the remote, then it is
not considered a private commit. Commits that are immutable are also excluded
@ -3318,9 +3426,10 @@ tracked again.</p>
snapshot that are larger than a certain size; the default is 1MiB. This can be
changed by setting <code>snapshot.max-new-file-size</code> to a different value. For
example:</p>
<div class="highlight"><pre><span></span><code><span class="n">snapshot</span><span class="p">.</span><span class="n">max-new-file-size</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;10MiB&quot;</span>
<div class="highlight"><pre><span></span><code><span class="k">[snapshot]</span>
<span class="n">max-new-file-size</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;10MiB&quot;</span>
<span class="c1"># the following is equivalent</span>
<span class="n">snapshot</span><span class="p">.</span><span class="n">max-new-file-size</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">10485760</span>
<span class="n">max-new-file-size</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">10485760</span>
</code></pre></div>
<p>The value can be specified using a human readable string with typical suffixes;
<code>B</code>, <code>MiB</code>, <code>GB</code>, etc. By default, if no suffix is provided, or the value is a

View File

@ -618,6 +618,15 @@
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#alternative-conflict-marker-styles" class="md-nav__link">
<span class="md-ellipsis">
Alternative conflict marker styles
</span>
</a>
</li>
</ul>
@ -1223,27 +1232,6 @@
<li class="md-nav__item">
<a href="../roadmap/" class="md-nav__link">
<span class="md-ellipsis">
Roadmap
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../design/git-submodules/" class="md-nav__link">
@ -1371,6 +1359,26 @@
<li class="md-nav__item">
<a href="../roadmap/" class="md-nav__link">
<span class="md-ellipsis">
Development Roadmap
</span>
</a>
</li>
</ul>
</nav>
</div>
@ -1422,6 +1430,15 @@
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#alternative-conflict-marker-styles" class="md-nav__link">
<span class="md-ellipsis">
Alternative conflict marker styles
</span>
</a>
</li>
</ul>
@ -1441,6 +1458,11 @@
<h1 id="first-class-conflicts">First-class conflicts<a class="headerlink" href="#first-class-conflicts" title="Permanent link">&para;</a></h1>
<h2 id="introduction">Introduction<a class="headerlink" href="#introduction" title="Permanent link">&para;</a></h2>
<p>Conflicts happen when Jujutsu can't figure out how to merge different changes
made to the same file. For instance, this can happen if two people are working
on the same file and make different changes to the same part of the file, and
then their commits are merged together with <code>jj new</code> (or one is rebased onto the
other with <code>jj rebase</code>).</p>
<p>Unlike most other VCSs, Jujutsu can record conflicted states in commits. For
example, if you rebase a commit and it results in a conflict, the conflict will
be recorded in the rebased commit and the rebase operation will succeed. You can
@ -1483,55 +1505,94 @@ conflict doesn't result in a nested conflict markers (see
<a href="../working-copy/#conflicts">here</a>.</p>
<h2 id="conflict-markers">Conflict markers<a class="headerlink" href="#conflict-markers" title="Permanent link">&para;</a></h2>
<p>Conflicts are "materialized" using <em>conflict markers</em> in various contexts. For
example, when you run <code>jj edit</code> on a commit with a conflict, it will be
materialized in the working copy. Conflicts are also materialized when they are
part of diff output (e.g. <code>jj show</code> on a commit that introduces or resolves a
conflict). Here's an example of how Git can render a conflict using <a href="https://git-scm.com/docs/git-merge#_how_conflicts_are_presented">its "diff3"
style</a>:</p>
<div class="highlight"><pre><span></span><code> &lt;&lt;&lt;&lt;&lt;&lt;&lt; left
apple
grapefruit
orange
||||||| base
apple
grape
orange
=======
APPLE
GRAPE
ORANGE
&gt;&gt;&gt;&gt;&gt;&gt;&gt; right
example, when you run <code>jj new</code> or <code>jj edit</code> on a commit with a conflict, it will
be materialized in the working copy. Conflicts are also materialized when they
are part of diff output (e.g. <code>jj show</code> on a commit that introduces or resolves
a conflict).</p>
<p>As an example, imagine that you have a file which contains the following text,
all in lowercase:</p>
<div class="highlight"><pre><span></span><code>apple
grape
orange
</code></pre></div>
<p>In this example, the left side changed "grape" to "grapefruit", and the right
side made all lines uppercase. To resolve the conflict, we would presumably keep
the right side (the third section) and replace "GRAPE" by "GRAPEFRUIT". This way
of visually finding the changes between the base and one side and then applying
them to the other side is a common way of resolving conflicts when using Git's
"diff3" style.</p>
<p>Jujutsu helps you by combining the base and one side into a unified diff for
you, making it easier to spot the differences to apply to the other side. Here's
how that would look for the same example as above:</p>
<div class="highlight"><pre><span></span><code> &lt;&lt;&lt;&lt;&lt;&lt;&lt;
%%%%%%%
apple
-grape
+grapefruit
orange
+++++++
APPLE
GRAPE
ORANGE
&gt;&gt;&gt;&gt;&gt;&gt;&gt;
<p>One person replaces the word "grape" with "grapefruit" in commit A, while
another person changes every line to uppercase in commit B. If you merge the
changes together with <code>jj new A B</code>, the resulting commit will have a conflict
since Jujutsu can't figure out how to combine these changes. Therefore, Jujutsu
will materialize the conflict in the working copy using conflict markers, which
would look like this:</p>
<div class="highlight"><pre><span></span><code>&lt;&lt;&lt;&lt;&lt;&lt;&lt; Conflict 1 of 1
%%%%%%% Changes from base to side #1
apple
-grape
+grapefruit
orange
+++++++ Contents of side #2
APPLE
GRAPE
ORANGE
&gt;&gt;&gt;&gt;&gt;&gt;&gt; Conflict 1 of 1 ends
</code></pre></div>
<p>As in Git, the <code>&lt;&lt;&lt;&lt;&lt;&lt;&lt;</code> and <code>&gt;&gt;&gt;&gt;&gt;&gt;&gt;</code> lines mark the start and end of the
conflict. The <code>%%%%%%%</code> line indicates the start of a diff. The <code>+++++++</code>
line indicates the start of a snapshot (not a diff).</p>
<p>There is another reason for this format (in addition to helping you spot the
differences): The format supports more complex conflicts involving more than 3
inputs. Such conflicts can arise when you merge more than 2 commits. They would
typically be rendered as a single snapshot (as above) but with more than one
unified diffs. The process for resolving them is similar: Manually apply each
diff onto the snapshot.</p>
<p>The markers <code>&lt;&lt;&lt;&lt;&lt;&lt;&lt;</code> and <code>&gt;&gt;&gt;&gt;&gt;&gt;&gt;</code> indicate the start and end of a conflict
respectively. The marker <code>+++++++</code> indicates the start of a snapshot, while the
marker <code>%%%%%%%</code> indicates the start of a diff to apply to the snapshot.
Therefore, to resolve this conflict, you would apply the diff (changing "grape"
to "grapefruit") to the snapshot (the side with every line in uppercase),
editing the file to look like this:</p>
<div class="highlight"><pre><span></span><code>APPLE
GRAPEFRUIT
ORANGE
</code></pre></div>
<p>In practice, conflicts are usually 2-sided, meaning that there's only 2
conflicting changes being merged together at a time, but Jujutsu supports
conflicts with arbitrarily many sides, which can happen when merging 3 or more
commits at once. In that case, you would see a single snapshot section and
multiple diff sections.</p>
<p>Compared to just showing the content of each side of the conflict, the main
benefit of Jujutsu's style of conflict markers is that you don't need to spend
time manually comparing the sides to spot the differences between them. This is
especially beneficial for many-sided conflicts, since resolving them just
requires applying each diff to the snapshot one-by-one.</p>
<h2 id="alternative-conflict-marker-styles">Alternative conflict marker styles<a class="headerlink" href="#alternative-conflict-marker-styles" title="Permanent link">&para;</a></h2>
<p>If you prefer to just see the contents of each side of the conflict without the
diff, Jujutsu also supports a "snapshot" style, which can be enabled by setting
the <code>ui.conflict-marker-style</code> config option to "snapshot":</p>
<div class="highlight"><pre><span></span><code>&lt;&lt;&lt;&lt;&lt;&lt;&lt; Conflict 1 of 1
+++++++ Contents of side #1
apple
grapefruit
orange
------- Contents of base
apple
grape
orange
+++++++ Contents of side #2
APPLE
GRAPE
ORANGE
&gt;&gt;&gt;&gt;&gt;&gt;&gt; Conflict 1 of 1 ends
</code></pre></div>
<p>Some tools expect Git-style conflict markers, so Jujutsu also supports <a href="https://git-scm.com/docs/git-merge#_how_conflicts_are_presented">Git's
"diff3" style</a>
conflict markers by setting the <code>ui.conflict-marker-style</code> config option to
"git":</p>
<div class="highlight"><pre><span></span><code>&lt;&lt;&lt;&lt;&lt;&lt;&lt; Side #1 (Conflict 1 of 1)
apple
grapefruit
orange
||||||| Base
apple
grape
orange
=======
APPLE
GRAPE
ORANGE
&gt;&gt;&gt;&gt;&gt;&gt;&gt; Side #2 (Conflict 1 of 1 ends)
</code></pre></div>
<p>This conflict marker style only supports 2-sided conflicts though, so it falls
back to the similar "snapshot" conflict markers if there are more than 2 sides
to the conflict.</p>

View File

@ -1159,6 +1159,39 @@
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#editor-setup" class="md-nav__link">
<span class="md-ellipsis">
Editor setup
</span>
</a>
<nav class="md-nav" aria-label="Editor setup">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#visual-studio-code" class="md-nav__link">
<span class="md-ellipsis">
Visual Studio Code
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#zed" class="md-nav__link">
<span class="md-ellipsis">
Zed
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
@ -1177,31 +1210,36 @@
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#setting-up-the-prerequisites" class="md-nav__link">
<a href="#install-uv" class="md-nav__link">
<span class="md-ellipsis">
Setting up the prerequisites
Install uv
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#building-the-html-docs-locally-with-live-reload" class="md-nav__link">
<a href="#build-the-docs" class="md-nav__link">
<span class="md-ellipsis">
Building the HTML docs locally (with live reload)
Build the docs
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#how-to-build-the-entire-website-not-usually-necessary" class="md-nav__link">
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#building-the-entire-website" class="md-nav__link">
<span class="md-ellipsis">
How to build the entire website (not usually necessary)
Building the entire website
</span>
</a>
<nav class="md-nav" aria-label="How to build the entire website (not usually necessary)">
<nav class="md-nav" aria-label="Building the entire website">
<ul class="md-nav__list">
<li class="md-nav__item">
@ -1216,11 +1254,6 @@
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
@ -1382,27 +1415,6 @@
<li class="md-nav__item">
<a href="../roadmap/" class="md-nav__link">
<span class="md-ellipsis">
Roadmap
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../design/git-submodules/" class="md-nav__link">
@ -1530,6 +1542,26 @@
<li class="md-nav__item">
<a href="../roadmap/" class="md-nav__link">
<span class="md-ellipsis">
Development Roadmap
</span>
</a>
</li>
</ul>
</nav>
</div>
@ -1660,6 +1692,39 @@
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#editor-setup" class="md-nav__link">
<span class="md-ellipsis">
Editor setup
</span>
</a>
<nav class="md-nav" aria-label="Editor setup">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#visual-studio-code" class="md-nav__link">
<span class="md-ellipsis">
Visual Studio Code
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#zed" class="md-nav__link">
<span class="md-ellipsis">
Zed
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
@ -1678,31 +1743,36 @@
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#setting-up-the-prerequisites" class="md-nav__link">
<a href="#install-uv" class="md-nav__link">
<span class="md-ellipsis">
Setting up the prerequisites
Install uv
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#building-the-html-docs-locally-with-live-reload" class="md-nav__link">
<a href="#build-the-docs" class="md-nav__link">
<span class="md-ellipsis">
Building the HTML docs locally (with live reload)
Build the docs
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#how-to-build-the-entire-website-not-usually-necessary" class="md-nav__link">
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#building-the-entire-website" class="md-nav__link">
<span class="md-ellipsis">
How to build the entire website (not usually necessary)
Building the entire website
</span>
</a>
<nav class="md-nav" aria-label="How to build the entire website (not usually necessary)">
<nav class="md-nav" aria-label="Building the entire website">
<ul class="md-nav__list">
<li class="md-nav__item">
@ -1717,11 +1787,6 @@
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
@ -1790,7 +1855,7 @@ test and document.</p>
the PR description can even be empty, but feel free to include a personal
message. We start the commit message with <code>&lt;topic&gt;:</code> and don't use
<a href="https://www.conventionalcommits.org/en/v1.0.0/">conventional commits</a>. This means if
you modified a command in the CLI, use its name as the topic, e.g
you modified a command in the CLI, use its name as the topic, e.g.
<code>next/prev: &lt;your-modification&gt;</code> or <code>conflicts: &lt;your-modification&gt;</code>. We don't
currently have a specific guidelines on what to write in the topic field, but
the reviewers will help you provide a topic if you have difficulties choosing
@ -1939,45 +2004,113 @@ can verify that <code>mold</code> was indeed used by running
to use" instructions</a>.</p>
<p>On recent versions of MacOS, the default linker Rust uses is already
multi-threaded. It should use all the CPU cores without any configuration.</p>
<h3 id="editor-setup">Editor setup<a class="headerlink" href="#editor-setup" title="Permanent link">&para;</a></h3>
<h4 id="visual-studio-code">Visual Studio Code<a class="headerlink" href="#visual-studio-code" title="Permanent link">&para;</a></h4>
<p>We recommend at least these settings:</p>
<div class="highlight"><pre><span></span><code><span class="p">{</span>
<span class="w"> </span><span class="s2">&quot;files.insertFinalNewline&quot;</span><span class="o">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span>
<span class="w"> </span><span class="s2">&quot;files.trimTrailingWhitespace&quot;</span><span class="o">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span>
<span class="w"> </span><span class="s2">&quot;[rust]&quot;</span><span class="o">:</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="s2">&quot;files.trimTrailingWhitespace&quot;</span><span class="o">:</span><span class="w"> </span><span class="kc">false</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
</code></pre></div>
<h4 id="zed">Zed<a class="headerlink" href="#zed" title="Permanent link">&para;</a></h4>
<div class="highlight"><pre><span></span><code><span class="c1">// .zed/settings.json</span>
<span class="p">{</span>
<span class="w"> </span><span class="s2">&quot;ensure_final_newline_on_save&quot;</span><span class="o">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span>
<span class="w"> </span><span class="s2">&quot;remove_trailing_whitespace_on_save&quot;</span><span class="o">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span>
<span class="w"> </span><span class="s2">&quot;languages&quot;</span><span class="o">:</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="c1">// We don&#39;t use a formatter for Markdown files, so format_on_save would just</span>
<span class="w"> </span><span class="c1">// mess with others&#39; docs</span>
<span class="w"> </span><span class="s2">&quot;Markdown&quot;</span><span class="o">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="s2">&quot;format_on_save&quot;</span><span class="o">:</span><span class="w"> </span><span class="s2">&quot;off&quot;</span><span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="s2">&quot;Rust&quot;</span><span class="o">:</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="s2">&quot;format_on_save&quot;</span><span class="o">:</span><span class="w"> </span><span class="s2">&quot;on&quot;</span><span class="p">,</span>
<span class="w"> </span><span class="c1">// Avoid removing trailing spaces within multi-line string literals</span>
<span class="w"> </span><span class="s2">&quot;remove_trailing_whitespace_on_save&quot;</span><span class="o">:</span><span class="w"> </span><span class="kc">false</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="p">},</span>
<span class="w"> </span><span class="s2">&quot;lsp&quot;</span><span class="o">:</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="s2">&quot;rust-analyzer&quot;</span><span class="o">:</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="s2">&quot;initialization_options&quot;</span><span class="o">:</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="c1">// If you are working on docs and don&#39;t need `cargo check`, uncomment</span>
<span class="w"> </span><span class="c1">// this option:</span>
<span class="w"> </span><span class="c1">//</span>
<span class="w"> </span><span class="c1">// &quot;checkOnSave&quot;: false,</span>
<span class="w"> </span><span class="c1">// Use nightly `rustfmt`, equivalent to `cargo +nightly fmt`</span>
<span class="w"> </span><span class="s2">&quot;rustfmt&quot;</span><span class="o">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="s2">&quot;extraArgs&quot;</span><span class="o">:</span><span class="w"> </span><span class="p">[</span><span class="s2">&quot;+nightly&quot;</span><span class="p">]</span><span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
</code></pre></div>
<h2 id="previewing-the-html-documentation">Previewing the HTML documentation<a class="headerlink" href="#previewing-the-html-documentation" title="Permanent link">&para;</a></h2>
<p>The documentation for <code>jj</code> is automatically published to the website at
<p>The documentation for <code>jj</code> is automatically published online at
<a href="https://martinvonz.github.io/jj/">https://martinvonz.github.io/jj/</a>.</p>
<p>When editing documentation, we'd appreciate it if you checked that the
result will look as expected when published to the website.</p>
<h3 id="setting-up-the-prerequisites">Setting up the prerequisites<a class="headerlink" href="#setting-up-the-prerequisites" title="Permanent link">&para;</a></h3>
<p>To build the website, you must have Python and <code>poetry 1.8+</code> installed (the
latest version is recommended). It is easiest to install <code>poetry</code> via <code>pipx</code>, as
explained in the <a href="https://python-poetry.org/docs/#installation">Poetry installation instructions</a>. A few helpful points from
the instructions: <code>pipx</code> can often be installed from your distribution, e.g.
<code>sudo apt install pipx</code>; this will usually also install Python for you if
necessary. Any version of <code>pipx</code> will do. If you are installing <code>pipx</code> manually,
you may first need to follow the <a href="https://docs.python.org/3/using/index.html">Python installation instructions</a>.</p>
<p>Once you have <code>poetry</code> installed, you should ask it to install the rest
of the required tools into a virtual environment as follows:</p>
<div class="highlight"><pre><span></span><code>poetry<span class="w"> </span>install
<p>When editing documentation, you should check your changes locally — especially
if you are adding a new page, or doing a major rewrite.</p>
<h3 id="install-uv">Install <code>uv</code><a class="headerlink" href="#install-uv" title="Permanent link">&para;</a></h3>
<p>The only thing you need is <a href="https://docs.astral.sh/uv/"><code>uv</code></a> (version 0.5.1 or newer).</p>
<p><code>uv</code> is a Python project manager written in Rust. It will fetch the right Python
version and the dependencies needed to build the docs. Install it like so:</p>
<div class="tabbed-set tabbed-alternate" data-tabs="1:5"><input checked="checked" id="__tabbed_1_1" name="__tabbed_1" type="radio" /><input id="__tabbed_1_2" name="__tabbed_1" type="radio" /><input id="__tabbed_1_3" name="__tabbed_1" type="radio" /><input id="__tabbed_1_4" name="__tabbed_1" type="radio" /><input id="__tabbed_1_5" name="__tabbed_1" type="radio" /><div class="tabbed-labels"><label for="__tabbed_1_1">macOS/Linux</label><label for="__tabbed_1_2">Windows</label><label for="__tabbed_1_3">Homebrew</label><label for="__tabbed_1_4">Cargo</label><label for="__tabbed_1_5">Other options</label></div>
<div class="tabbed-content">
<div class="tabbed-block">
<div class="copy highlight"><pre><span></span><code>curl<span class="w"> </span>-LsSf<span class="w"> </span>https://astral.sh/uv/install.sh<span class="w"> </span><span class="p">|</span><span class="w"> </span>sh
</code></pre></div>
<p>You may get requests to "unlock a keyring", <a href="https://github.com/python-poetry/poetry/issues/1917">an error messages about failing to
do so</a>, or Poetry may
<a href="https://github.com/python-poetry/poetry/issues/8623">simply hang indefinitely</a>.
The workaround is to either to unlock the keyring or to run the following, and
then to try <code>poetry install</code> again:</p>
<div class="highlight"><pre><span></span><code><span class="c1"># For sh-compatible shells or recent versions of `fish`</span>
<span class="nb">export</span><span class="w"> </span><span class="nv">PYTHON_KEYRING_BACKEND</span><span class="o">=</span>keyring.backends.fail.Keyring
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>If you don't have <code>~/.local/bin</code> in your <code>PATH</code>, the installer will
modify your shell profile. To avoid it:</p>
<div class="copy highlight"><pre><span></span><code>curl<span class="w"> </span>-LsSf<span class="w"> </span>https://astral.sh/uv/install.sh<span class="w"> </span><span class="p">|</span><span class="w"> </span>env<span class="w"> </span><span class="nv">INSTALLER_NO_MODIFY_PATH</span><span class="o">=</span><span class="m">1</span><span class="w"> </span>sh
</code></pre></div>
<h3 id="building-the-html-docs-locally-with-live-reload">Building the HTML docs locally (with live reload)<a class="headerlink" href="#building-the-html-docs-locally-with-live-reload" title="Permanent link">&para;</a></h3>
<p>The HTML docs are built with <a href="https://github.com/mkdocs/mkdocs">MkDocs</a>. After
following the above steps, you should be able to view the docs by running</p>
<div class="highlight"><pre><span></span><code><span class="c1"># Note: this and all the commands below should be run from the root of</span>
<span class="c1"># the `jj` source tree.</span>
poetry<span class="w"> </span>run<span class="w"> </span>--<span class="w"> </span>mkdocs<span class="w"> </span>serve
</div>
</div>
<div class="tabbed-block">
<div class="copy highlight"><pre><span></span><code>powershell<span class="w"> </span>-ExecutionPolicy<span class="w"> </span>ByPass<span class="w"> </span>-c<span class="w"> </span><span class="s2">&quot;irm https://astral.sh/uv/install.ps1 | iex&quot;</span>
</code></pre></div>
<p>and opening <a href="http://127.0.0.1:8000">http://127.0.0.1:8000</a> in your browser.</p>
<p>As you edit the <code>md</code> files, the website should be rebuilt and reloaded in your
browser automatically, unless build errors occur.</p>
<p>You should occasionally check the terminal from which you ran <code>mkdocs serve</code> for
any build errors or warnings. Warnings about <code>"GET /versions.json HTTP/1.1" code
404</code> are expected and harmless.</p>
<h3 id="how-to-build-the-entire-website-not-usually-necessary">How to build the entire website (not usually necessary)<a class="headerlink" href="#how-to-build-the-entire-website-not-usually-necessary" title="Permanent link">&para;</a></h3>
</div>
<div class="tabbed-block">
<div class="copy highlight"><pre><span></span><code>brew<span class="w"> </span>install<span class="w"> </span>uv
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="copy highlight"><pre><span></span><code><span class="c1"># This might take a while</span>
cargo<span class="w"> </span>install<span class="w"> </span>--git<span class="w"> </span>https://github.com/astral-sh/uv<span class="w"> </span>uv
</code></pre></div>
</div>
<div class="tabbed-block">
<ul>
<li>Directly download the binaries from GitHub: <a href="https://github.com/astral-sh/uv/releases">uv releases</a>.</li>
<li>Even more options: <a href="https://docs.astral.sh/uv/getting-started/installation/">Installing uv</a>.</li>
</ul>
</div>
</div>
</div>
<h3 id="build-the-docs">Build the docs<a class="headerlink" href="#build-the-docs" title="Permanent link">&para;</a></h3>
<p>To build the docs, run from the root of the <code>jj</code> repository:</p>
<div class="copy highlight"><pre><span></span><code>uv<span class="w"> </span>run<span class="w"> </span>mkdocs<span class="w"> </span>serve
</code></pre></div>
<p>Open <a href="http://127.0.0.1:8000">http://127.0.0.1:8000</a> in your browser to see the docs.</p>
<p>As you edit the <code>.md</code> files in <code>docs/</code>, the website should be rebuilt and
reloaded in your browser automatically.</p>
<div class="admonition note">
<p class="admonition-title">If the docs are not updating</p>
<p>Check the terminal from which you ran <code>uv run mkdocs serve</code> for any build
errors or warnings. Warnings about <code>"GET /versions.json HTTP/1.1" code 404</code>
are expected and harmless.</p>
</div>
<h2 id="building-the-entire-website">Building the entire website<a class="headerlink" href="#building-the-entire-website" title="Permanent link">&para;</a></h2>
<div class="admonition tip">
<p class="admonition-title">Tip</p>
<p>Building the entire website is not usually necessary. If you are editing
documentation, the previous section is enough.</p>
<p>These instructions are relevant if you are working on the versioning of the
documentation that we currently do with <code>mike</code>.</p>
</div>
<p>The full <code>jj</code> website includes the documentation for several <code>jj</code> versions
(<code>prerelease</code>, latest release, and the older releases). The top-level
URL <a href="https://martinvonz.github.io/jj">https://martinvonz.github.io/jj</a> redirects to
@ -1985,17 +2118,17 @@ URL <a href="https://martinvonz.github.io/jj">https://martinvonz.github.io/jj</a
the docs for the last stable version.</p>
<p>The different versions of documentation are managed and deployed with
<a href="https://github.com/jimporter/mike"><code>mike</code></a>, which can be run with
<code>poetry run -- mike</code>.</p>
<code>uv run mike</code>.</p>
<p>On a POSIX system or WSL, one way to build the entire website is as follows (on
Windows, you'll need to understand and adapt the shell script):</p>
<ol>
<li>
<p>Check out <code>jj</code> as a co-located <code>jj + git</code> repository (<code>jj clone --colocate</code>),
cloned from your fork of <code>jj</code> (e.g. <code>jjfan.github.com/jj</code>). You can also use a
cloned from your fork of <code>jj</code> (e.g. <code>github.com/jjfan/jj</code>). You can also use a
pure Git repo if you prefer.</p>
</li>
<li>
<p>Make sure <code>jjfan.github.com/jj</code> includes the <code>gh-pages</code> bookmark of the jj repo
<p>Make sure <code>github.com/jjfan/jj</code> includes the <code>gh-pages</code> bookmark of the jj repo
and run <code>git fetch origin gh-pages</code>.</p>
</li>
<li>
@ -2003,7 +2136,9 @@ and run <code>git fetch origin gh-pages</code>.</p>
to use the <code>gh-pages</code> bookmark (this is usually the default).</p>
</li>
<li>
<p>Run the same <code>sh</code> script that is used in GitHub CI (details below):</p>
<p>Install <code>uv</code> as explained in <a href="#previewing-the-html-documentation">Previewing the HTML
documentation</a>, and run the same <code>sh</code> script
that is used in GitHub CI (details below):</p>
<div class="highlight"><pre><span></span><code>.github/scripts/docs-build-deploy<span class="w"> </span><span class="s1">&#39;https://jjfan.github.io/jj/&#39;</span><span class="se">\</span>
<span class="w"> </span>prerelease<span class="w"> </span>main<span class="w"> </span>--push
</code></pre></div>
@ -2038,15 +2173,15 @@ jj<span class="w"> </span>git<span class="w"> </span>push<span class="w"> </span
set my-changes -r gh-pages</code> BEFORE running the above commands.</p>
</li>
</ol>
<h4 id="explanation-of-the-docs-build-deploy-script">Explanation of the <code>docs-build-deploy</code> script<a class="headerlink" href="#explanation-of-the-docs-build-deploy-script" title="Permanent link">&para;</a></h4>
<h3 id="explanation-of-the-docs-build-deploy-script">Explanation of the <code>docs-build-deploy</code> script<a class="headerlink" href="#explanation-of-the-docs-build-deploy-script" title="Permanent link">&para;</a></h3>
<p>The script sets up the <code>site_url</code> mkdocs config to
<code>'https://jjfan.github.io/jj/'</code>. If this config does not match the URL
where you loaded the website, some minor website features (like the
version switching widget) will have reduced functionality.</p>
<p>Then, the script passes the rest of its arguments to <code>potery run -- mike
deploy</code>, which does the rest of the job. Run <code>poetry run -- mike help deploy</code> to
<p>Then, the script passes the rest of its arguments to <code>uv run mike
deploy</code>, which does the rest of the job. Run <code>uv run mike help deploy</code> to
find out what the arguments do.</p>
<p>If you need to do something more complicated, you can use <code>poetry run -- mike
<p>If you need to do something more complicated, you can use <code>uv run mike
...</code> commands. You can also edit the <code>gh-pages</code> bookmark directly, but take care
to avoid files that will be overwritten by future invocations of <code>mike</code>. Then,
you can submit a PR based on the <code>gh-pages</code> bookmark of

View File

@ -14,6 +14,8 @@
<link rel="prev" href="../tracking-branches/">
<link rel="next" href="../../roadmap/">
<link rel="icon" href="../../assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.5.39">
@ -1154,27 +1156,6 @@
<li class="md-nav__item">
<a href="../../roadmap/" class="md-nav__link">
<span class="md-ellipsis">
Roadmap
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../git-submodules/" class="md-nav__link">
@ -1531,6 +1512,26 @@
<li class="md-nav__item">
<a href="../../roadmap/" class="md-nav__link">
<span class="md-ellipsis">
Development Roadmap
</span>
</a>
</li>
</ul>
</nav>
</div>

View File

@ -1156,27 +1156,6 @@
<li class="md-nav__item">
<a href="../../roadmap/" class="md-nav__link">
<span class="md-ellipsis">
Roadmap
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../git-submodules/" class="md-nav__link">
@ -1488,6 +1467,26 @@
<li class="md-nav__item">
<a href="../../roadmap/" class="md-nav__link">
<span class="md-ellipsis">
Development Roadmap
</span>
</a>
</li>
</ul>
</nav>
</div>

View File

@ -11,7 +11,7 @@
<link rel="canonical" href="https://martinvonz.github.io/jj/latest/design/git-submodules/">
<link rel="prev" href="../../roadmap/">
<link rel="prev" href="../../governance/temporary-voting/">
<link rel="next" href="../git-submodule-storage/">
@ -1154,27 +1154,6 @@
<li class="md-nav__item">
<a href="../../roadmap/" class="md-nav__link">
<span class="md-ellipsis">
Roadmap
</span>
</a>
</li>
@ -1539,6 +1518,26 @@
<li class="md-nav__item">
<a href="../../roadmap/" class="md-nav__link">
<span class="md-ellipsis">
Development Roadmap
</span>
</a>
</li>
</ul>
</nav>
</div>

View File

@ -1156,27 +1156,6 @@
<li class="md-nav__item">
<a href="../../roadmap/" class="md-nav__link">
<span class="md-ellipsis">
Roadmap
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../git-submodules/" class="md-nav__link">
@ -1524,6 +1503,26 @@
<li class="md-nav__item">
<a href="../../roadmap/" class="md-nav__link">
<span class="md-ellipsis">
Development Roadmap
</span>
</a>
</li>
</ul>
</nav>
</div>
@ -1839,10 +1838,10 @@ temporary working copy for each parallel command. The working copies will be
reused between <code>jj run</code> invocations. They will also be reused within <code>jj run</code>
invocation if there are more commits to run on than there are parallel jobs.</p>
<p>We will leave ignored files in the temporary directory between runs. That
enables incremental builds (e.g by letting cargo reuse its <code>target/</code> directory).
However, it also means that runs potentially become less reproducible. We will
provide a flag for removing ignored files from the temporary working copies to
address that.</p>
enables incremental builds (e.g. by letting cargo reuse its <code>target/</code>
directory). However, it also means that runs potentially become less
reproducible. We will provide a flag for removing ignored files from the
temporary working copies to address that.</p>
<p>Another problem with leaving ignored files in the temporary directories is that
they take up space. That is especially problematic in the case of cargo (the
<code>target/</code> directory often takes up tens of GBs). The same flag for cleaning up
@ -1862,7 +1861,7 @@ assigned working copy. Let's say the user runs <code>jj run</code> on just commi
B, where B's parent is A. Any changes made on top of A would be squashed into
A, forming A'. Similarly B' would be formed by squasing it into B. We can then
either do a normal rebase of B' onto A', or we can simply update its parent to
A'. The former is useful, e.g when the subprocess only makes a partial update
A'. The former is useful, e.g. when the subprocess only makes a partial update
of the tree based on the parent commit. In addition to these two modes, we may
want to have an option to ignore any changes made in the subprocess's working
copy.</p>

View File

@ -1156,27 +1156,6 @@
<li class="md-nav__item">
<a href="../../roadmap/" class="md-nav__link">
<span class="md-ellipsis">
Roadmap
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../git-submodules/" class="md-nav__link">
@ -1482,6 +1461,26 @@
<li class="md-nav__item">
<a href="../../roadmap/" class="md-nav__link">
<span class="md-ellipsis">
Development Roadmap
</span>
</a>
</li>
</ul>
</nav>
</div>

View File

@ -1156,27 +1156,6 @@
<li class="md-nav__item">
<a href="../../roadmap/" class="md-nav__link">
<span class="md-ellipsis">
Roadmap
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../git-submodules/" class="md-nav__link">
@ -1533,6 +1512,26 @@
<li class="md-nav__item">
<a href="../../roadmap/" class="md-nav__link">
<span class="md-ellipsis">
Development Roadmap
</span>
</a>
</li>
</ul>
</nav>
</div>

View File

@ -1292,27 +1292,6 @@
<li class="md-nav__item">
<a href="../roadmap/" class="md-nav__link">
<span class="md-ellipsis">
Roadmap
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../design/git-submodules/" class="md-nav__link">
@ -1440,6 +1419,26 @@
<li class="md-nav__item">
<a href="../roadmap/" class="md-nav__link">
<span class="md-ellipsis">
Development Roadmap
</span>
</a>
</li>
</ul>
</nav>
</div>

View File

@ -1214,27 +1214,6 @@
<li class="md-nav__item">
<a href="../roadmap/" class="md-nav__link">
<span class="md-ellipsis">
Roadmap
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../design/git-submodules/" class="md-nav__link">
@ -1362,6 +1341,26 @@
<li class="md-nav__item">
<a href="../roadmap/" class="md-nav__link">
<span class="md-ellipsis">
Development Roadmap
</span>
</a>
</li>
</ul>
</nav>
</div>

View File

@ -1232,27 +1232,6 @@
<li class="md-nav__item">
<a href="../roadmap/" class="md-nav__link">
<span class="md-ellipsis">
Roadmap
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../design/git-submodules/" class="md-nav__link">
@ -1380,6 +1359,26 @@
<li class="md-nav__item">
<a href="../roadmap/" class="md-nav__link">
<span class="md-ellipsis">
Development Roadmap
</span>
</a>
</li>
</ul>
</nav>
</div>

View File

@ -1232,27 +1232,6 @@
<li class="md-nav__item">
<a href="../roadmap/" class="md-nav__link">
<span class="md-ellipsis">
Roadmap
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../design/git-submodules/" class="md-nav__link">
@ -1380,6 +1359,26 @@
<li class="md-nav__item">
<a href="../roadmap/" class="md-nav__link">
<span class="md-ellipsis">
Development Roadmap
</span>
</a>
</li>
</ul>
</nav>
</div>
@ -1774,8 +1773,7 @@ parent.</p>
</tr>
<tr>
<td>Create a copy of a commit on top of another commit</td>
<td><code>jj duplicate &lt;source&gt;; jj rebase -r &lt;duplicate commit&gt; -d &lt;destination&gt;</code>
(there's no single command for it yet)</td>
<td><code>jj duplicate &lt;source&gt;; -d &lt;destination&gt;</code></td>
<td><code>git co &lt;destination&gt;; git cherry-pick &lt;source&gt;</code></td>
</tr>
<tr>
@ -1827,6 +1825,12 @@ parent.</p>
</td>
<td><code>git revert &lt;revision&gt;</code></td>
</tr>
<tr>
<td>Show what revision and author last modified each line of a file</td>
<td><code>jj file annotate &lt;path&gt;</code>
</td>
<td><code>git blame &lt;file&gt;</code></td>
</tr>
</tbody>
</table>

View File

@ -1274,27 +1274,6 @@
<li class="md-nav__item">
<a href="../roadmap/" class="md-nav__link">
<span class="md-ellipsis">
Roadmap
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../design/git-submodules/" class="md-nav__link">
@ -1422,6 +1401,26 @@
<li class="md-nav__item">
<a href="../roadmap/" class="md-nav__link">
<span class="md-ellipsis">
Development Roadmap
</span>
</a>
</li>
</ul>
</nav>
</div>
@ -1556,7 +1555,10 @@ a comparison with Git, including how workflows are different, see the
<li><strong>Configuration: Partial.</strong> The only configuration from Git (e.g. in
<code>~/.gitconfig</code>) that's respected is the following. Feel free to file a bug if
you miss any particular configuration options.<ul>
<li>The configuration of remotes (<code>[remote "&lt;name&gt;"]</code>).</li>
<li>The configuration of remotes (<code>[remote "&lt;name&gt;"]</code>). Only the names and URLs
are respected (refspecs are not respected, and
<a href="https://github.com/martinvonz/jj/issues/4889">only the last pushurl</a> is
respected).</li>
<li><code>core.excludesFile</code></li>
</ul>
</li>
@ -1701,15 +1703,16 @@ time.</p>
<p>A Jujutsu repo backed by a Git repo has a full Git repo inside, so it is
technically possible (though not officially supported) to convert it into a
co-located repo like so:</p>
<div class="highlight"><pre><span></span><code><span class="c1"># Move the Git repo</span>
<div class="highlight"><pre><span></span><code><span class="c1"># Ignore the .jj directory in Git</span>
<span class="nb">echo</span><span class="w"> </span><span class="s1">&#39;/*&#39;</span><span class="w"> </span>&gt;<span class="w"> </span>.jj/.gitignore
<span class="c1"># Move the Git repo</span>
mv<span class="w"> </span>.jj/repo/store/git<span class="w"> </span>.git
<span class="c1"># Tell jj where to find it</span>
<span class="nb">echo</span><span class="w"> </span>-n<span class="w"> </span><span class="s1">&#39;../../../.git&#39;</span><span class="w"> </span>&gt;<span class="w"> </span>.jj/repo/store/git_target
<span class="c1"># Ignore the .jj directory in Git</span>
<span class="nb">echo</span><span class="w"> </span><span class="s1">&#39;/*&#39;</span><span class="w"> </span>&gt;<span class="w"> </span>.jj/.gitignore
<span class="c1"># Make the Git repository non-bare and set HEAD</span>
git<span class="w"> </span>config<span class="w"> </span>--unset<span class="w"> </span>core.bare
jj<span class="w"> </span>new<span class="w"> </span>@-
<span class="c1"># Convince jj to update .git/HEAD to point to the working-copy commit&#39;s parent</span>
jj<span class="w"> </span>new<span class="w"> </span><span class="o">&amp;&amp;</span><span class="w"> </span>jj<span class="w"> </span>undo
</code></pre></div>
<p>We may officially support this in the future. If you try this, we would
appreciate feedback and bug reports.</p>

View File

@ -1343,27 +1343,6 @@
<li class="md-nav__item">
<a href="../roadmap/" class="md-nav__link">
<span class="md-ellipsis">
Roadmap
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../design/git-submodules/" class="md-nav__link">
@ -1491,6 +1470,26 @@
<li class="md-nav__item">
<a href="../roadmap/" class="md-nav__link">
<span class="md-ellipsis">
Development Roadmap
</span>
</a>
</li>
</ul>
</nav>
</div>
@ -1716,7 +1715,7 @@ $<span class="w"> </span>jj<span class="w"> </span>commit<span class="w"> </span
<span class="c1"># on the working-copy commit&#39;s *parent* because the working copy itself is empty.</span>
$<span class="w"> </span>jj<span class="w"> </span>bookmark<span class="w"> </span>create<span class="w"> </span>bar<span class="w"> </span>-r<span class="w"> </span>@-<span class="w"> </span><span class="c1"># `bar` now contains the previous two commits.</span>
<span class="c1"># Push the bookmark to GitHub (pushes only `bar`)</span>
$<span class="w"> </span>jj<span class="w"> </span>git<span class="w"> </span>push
$<span class="w"> </span>jj<span class="w"> </span>git<span class="w"> </span>push<span class="w"> </span>--allow-new
</code></pre></div>
<p>While it's possible to create a bookmark in advance and commit on top of it in a
Git-like manner, you will then need to move the bookmark manually when you create
@ -1737,7 +1736,7 @@ $<span class="w"> </span><span class="c1"># Do some more work.</span>
$<span class="w"> </span>jj<span class="w"> </span>commit<span class="w"> </span>-m<span class="w"> </span><span class="s2">&quot;Update tutorial&quot;</span>
<span class="c1"># Create a bookmark on the working-copy commit&#39;s parent</span>
$<span class="w"> </span>jj<span class="w"> </span>bookmark<span class="w"> </span>create<span class="w"> </span>doc-update<span class="w"> </span>-r<span class="w"> </span>@-
$<span class="w"> </span>jj<span class="w"> </span>git<span class="w"> </span>push
$<span class="w"> </span>jj<span class="w"> </span>git<span class="w"> </span>push<span class="w"> </span>--allow-new
</code></pre></div>
<h2 id="working-in-a-jujutsu-repository">Working in a Jujutsu repository<a class="headerlink" href="#working-in-a-jujutsu-repository" title="Permanent link">&para;</a></h2>
<p>In a Jujutsu repository, the workflow is simplified. If there's no need for

View File

@ -1448,27 +1448,6 @@
<li class="md-nav__item">
<a href="../roadmap/" class="md-nav__link">
<span class="md-ellipsis">
Roadmap
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../design/git-submodules/" class="md-nav__link">
@ -1596,6 +1575,26 @@
<li class="md-nav__item">
<a href="../roadmap/" class="md-nav__link">
<span class="md-ellipsis">
Development Roadmap
</span>
</a>
</li>
</ul>
</nav>
</div>
@ -1912,7 +1911,7 @@ bookmarks</a>. See <a href="../bookmarks/">here</a>
for details.</p>
<p>Unlike in Git, there is no concept of a "current bookmark"; bookmarks <em>do not</em>
move when you create a new commit. Bookmarks <em>do</em> automatically follow the
commit if it gets <a href="#rewrite">rewritten</a>. </p>
commit if it gets <a href="#rewrite">rewritten</a>.</p>
<h2 id="branch">Branch<a class="headerlink" href="#branch" title="Permanent link">&para;</a></h2>
<p>In the context of <code>jj</code>, the work "branch" usually refers to an <a href="#anonymous-branch">anonymous
branch</a> or, less formally, a branch of the commit "tree"
@ -1922,13 +1921,15 @@ might resemble a tree even when it's not mathematically a tree).</p>
these correspond to <a href="#bookmark">bookmarks</a>. In a co-located repository, each
local Git branch corresponds to a <code>jj</code> bookmark.</p>
<h2 id="change">Change<a class="headerlink" href="#change" title="Permanent link">&para;</a></h2>
<p>A change is a commit as it <a href="#rewrite">evolves over time</a>.</p>
<p>A change is a commit as it <a href="#rewrite">evolves over time</a>. Changes themselves
don't exist as an object in the data model; only the change ID does. The change
ID is a property of a commit.</p>
<h2 id="change-id">Change ID<a class="headerlink" href="#change-id" title="Permanent link">&para;</a></h2>
<p>A change ID is a unique identifier for a <a href="#change">change</a>. They are typically
16 bytes long and are often randomly generated. By default, <code>jj log</code> presents
them as a sequence of 12 letters in the k-z range, at the beginning of a line.
These are actually hexadecimal numbers that use "digits" z-k instead of 0-9a-f.</p>
<p>For the git backend, Change IDs are currently maintained only locally and not
<p>For the Git backend, Change IDs are currently maintained only locally and not
exchanged via push/fetch operations.</p>
<h2 id="commit">Commit<a class="headerlink" href="#commit" title="Permanent link">&para;</a></h2>
<p>A snapshot of the files in the repository at a given point in time (technically

View File

@ -14,7 +14,7 @@
<link rel="prev" href="../../design_doc_blueprint/">
<link rel="next" href="../../roadmap/">
<link rel="next" href="../../design/git-submodules/">
<link rel="icon" href="../../assets/images/favicon.png">
@ -1274,27 +1274,6 @@
<li class="md-nav__item">
<a href="../../roadmap/" class="md-nav__link">
<span class="md-ellipsis">
Roadmap
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../design/git-submodules/" class="md-nav__link">
@ -1422,6 +1401,26 @@
<li class="md-nav__item">
<a href="../../roadmap/" class="md-nav__link">
<span class="md-ellipsis">
Development Roadmap
</span>
</a>
</li>
</ul>
</nav>
</div>

View File

@ -1210,27 +1210,6 @@
<li class="md-nav__item">
<a href="roadmap/" class="md-nav__link">
<span class="md-ellipsis">
Roadmap
</span>
</a>
</li>
<li class="md-nav__item">
<a href="design/git-submodules/" class="md-nav__link">
@ -1358,6 +1337,26 @@
<li class="md-nav__item">
<a href="roadmap/" class="md-nav__link">
<span class="md-ellipsis">
Development Roadmap
</span>
</a>
</li>
</ul>
</nav>
</div>

View File

@ -1424,27 +1424,6 @@
<li class="md-nav__item">
<a href="../roadmap/" class="md-nav__link">
<span class="md-ellipsis">
Roadmap
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../design/git-submodules/" class="md-nav__link">
@ -1572,6 +1551,26 @@
<li class="md-nav__item">
<a href="../roadmap/" class="md-nav__link">
<span class="md-ellipsis">
Development Roadmap
</span>
</a>
</li>
</ul>
</nav>
</div>
@ -1962,24 +1961,46 @@ $<span class="w"> </span>jj<span class="w"> </span>config<span class="w"> </span
<p>To set up command-line completion, source the output of
<code>jj util completion bash/zsh/fish</code>. Exactly how to source it
depends on your shell.</p>
<p>Improved completions are also available. They will complete things like
bookmarks, aliases, revisions, operations and files. They can be context aware,
for example they respect the global flags <code>--repository</code> and <code>--at-operation</code> as
well as some command-specific ones like <code>--revision</code>, <code>--from</code> and <code>--to</code>. You
can activate them with the alternative "dynamic" instructions below. They should
still complete everything the static completions did, so only activate one of
them. Please let us know if you encounter any issues, so we can ensure a smooth
transition once we default to these new completions. Our initial experience
is that these new completions work best with <code>fish</code>. If you have ideas about
specific completions that could be added, please share them
<a href="https://github.com/martinvonz/jj/issues/4763">here</a>.</p>
<h3 id="bash">Bash<a class="headerlink" href="#bash" title="Permanent link">&para;</a></h3>
<div class="highlight"><pre><span></span><code><span class="nb">source</span><span class="w"> </span>&lt;<span class="o">(</span>jj<span class="w"> </span>util<span class="w"> </span>completion<span class="w"> </span>bash<span class="o">)</span>
</code></pre></div>
<p>dynamic:</p>
<div class="highlight"><pre><span></span><code><span class="nb">source</span><span class="w"> </span>&lt;<span class="o">(</span><span class="nv">COMPLETE</span><span class="o">=</span>bash<span class="w"> </span>jj<span class="o">)</span>
</code></pre></div>
<h3 id="zsh">Zsh<a class="headerlink" href="#zsh" title="Permanent link">&para;</a></h3>
<div class="highlight"><pre><span></span><code>autoload<span class="w"> </span>-U<span class="w"> </span>compinit
compinit
<span class="nb">source</span><span class="w"> </span>&lt;<span class="o">(</span>jj<span class="w"> </span>util<span class="w"> </span>completion<span class="w"> </span>zsh<span class="o">)</span>
</code></pre></div>
<p>dynamic:</p>
<div class="highlight"><pre><span></span><code><span class="nb">source</span><span class="w"> </span>&lt;<span class="o">(</span><span class="nv">COMPLETE</span><span class="o">=</span>zsh<span class="w"> </span>jj<span class="o">)</span>
</code></pre></div>
<h3 id="fish">Fish<a class="headerlink" href="#fish" title="Permanent link">&para;</a></h3>
<div class="highlight"><pre><span></span><code>jj<span class="w"> </span>util<span class="w"> </span>completion<span class="w"> </span>fish<span class="w"> </span><span class="p">|</span><span class="w"> </span><span class="nb">source</span>
</code></pre></div>
<p>dynamic:</p>
<div class="highlight"><pre><span></span><code><span class="nv">COMPLETE</span><span class="o">=</span>fish<span class="w"> </span>jj<span class="w"> </span><span class="p">|</span><span class="w"> </span><span class="nb">source</span>
</code></pre></div>
<h3 id="nushell">Nushell<a class="headerlink" href="#nushell" title="Permanent link">&para;</a></h3>
<div class="highlight"><pre><span></span><code>jj util completion nushell | save completions-jj.nu
use completions-jj.nu * # Or `source completions-jj.nu`
</code></pre></div>
<p>(dynamic completions not available yet)</p>
<h3 id="xonsh">Xonsh<a class="headerlink" href="#xonsh" title="Permanent link">&para;</a></h3>
<div class="highlight"><pre><span></span><code>source-bash<span class="w"> </span><span class="k">$(</span>jj<span class="w"> </span>util<span class="w"> </span>completion<span class="k">)</span>
</code></pre></div>
<p>(dynamic completions not available yet)</p>

View File

@ -1223,27 +1223,6 @@
<li class="md-nav__item">
<a href="../roadmap/" class="md-nav__link">
<span class="md-ellipsis">
Roadmap
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../design/git-submodules/" class="md-nav__link">
@ -1371,6 +1350,26 @@
<li class="md-nav__item">
<a href="../roadmap/" class="md-nav__link">
<span class="md-ellipsis">
Development Roadmap
</span>
</a>
</li>
</ul>
</nav>
</div>

View File

@ -1166,27 +1166,6 @@
<li class="md-nav__item">
<a href="../roadmap/" class="md-nav__link">
<span class="md-ellipsis">
Roadmap
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../design/git-submodules/" class="md-nav__link">
@ -1314,6 +1293,26 @@
<li class="md-nav__item">
<a href="../roadmap/" class="md-nav__link">
<span class="md-ellipsis">
Development Roadmap
</span>
</a>
</li>
</ul>
</nav>
</div>

View File

@ -1298,27 +1298,6 @@
<li class="md-nav__item">
<a href="../roadmap/" class="md-nav__link">
<span class="md-ellipsis">
Roadmap
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../design/git-submodules/" class="md-nav__link">
@ -1446,6 +1425,26 @@
<li class="md-nav__item">
<a href="../roadmap/" class="md-nav__link">
<span class="md-ellipsis">
Development Roadmap
</span>
</a>
</li>
</ul>
</nav>
</div>
@ -1812,8 +1811,11 @@ aren't included in <code>remote_bookmarks()</code>.</p>
as <code>remote_bookmarks()</code>.</p>
</li>
<li>
<p><code>tags()</code>: All tag targets. If a tag is in a conflicted state, all its
possible targets are included.</p>
<p><code>tags([pattern])</code>: All tag targets. If <code>pattern</code> is specified,
this selects the tags whose name match the given <a href="#string-patterns">string
pattern</a>. For example, <code>tags(v1)</code> would match the
tags <code>v123</code> and <code>rev1</code> but not the tag <code>v2</code>. If a tag is
in a conflicted state, all its possible targets are included.</p>
</li>
<li>
<p><code>git_refs()</code>: All Git ref targets as of the last import. If a Git ref
@ -1845,6 +1847,13 @@ aren't included in <code>remote_bookmarks()</code>.</p>
timestamp. The default <code>count</code> is 1.</p>
</li>
<li>
<p><code>fork_point(x)</code>: The fork point of all commits in <code>x</code>. The fork point is the
common ancestor(s) of all commits in <code>x</code> which do not have any descendants
that are also common ancestors of all commits in <code>x</code>. It is equivalent to
the revset <code>heads(::x_1 &amp; ::x_2 &amp; ... &amp; ::x_N)</code>, where <code>x_{1..N}</code> are commits
in <code>x</code>. If <code>x</code> resolves to a single commit, <code>fork_point(x)</code> resolves to <code>x</code>.</p>
</li>
<li>
<p><code>merges()</code>: Merge commits.</p>
</li>
<li>
@ -1960,6 +1969,18 @@ o root()
<li><code>roots(E|A)</code><code>{A}</code></li>
<li><code>roots(A)</code><code>{A}</code></li>
</ul>
<p><strong>function</strong> <code>fork_point()</code></p>
<ul>
<li><code>fork_point(E|D)</code><code>{A}</code></li>
<li><code>fork_point(E|C)</code><code>{A}</code></li>
<li><code>fork_point(E|B)</code><code>{B}</code></li>
<li><code>fork_point(E|A)</code><code>{A}</code></li>
<li><code>fork_point(D|C)</code><code>{C}</code></li>
<li><code>fork_point(D|B)</code><code>{A}</code></li>
<li><code>fork_point(B|C)</code><code>{A}</code></li>
<li><code>fork_point(A)</code><code>{A}</code></li>
<li><code>fork_point(none())</code><code>{}</code></li>
</ul>
</details>
<h2 id="string-patterns">String patterns<a class="headerlink" href="#string-patterns" title="Permanent link">&para;</a></h2>
<p>Functions that perform string matching support the following pattern syntax:</p>

View File

@ -11,18 +11,16 @@
<link rel="canonical" href="https://martinvonz.github.io/jj/latest/roadmap/">
<link rel="prev" href="../governance/temporary-voting/">
<link rel="prev" href="../design/copy-tracking/">
<link rel="next" href="../design/git-submodules/">
<link rel="icon" href="../assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.5.39">
<title>Roadmap - Jujutsu docs</title>
<title>Development Roadmap - Jujutsu docs</title>
@ -114,7 +112,7 @@
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
Roadmap
Development Roadmap
</span>
</div>
@ -1117,19 +1115,17 @@
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_12" checked>
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_12" >
<label class="md-nav__link" for="__nav_12" id="__nav_12_label" tabindex="0">
@ -1143,7 +1139,7 @@
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_12_label" aria-expanded="true">
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_12_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_12">
<span class="md-nav__icon md-icon"></span>
Design docs
@ -1154,139 +1150,6 @@
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
<span class="md-ellipsis">
Roadmap
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
<span class="md-ellipsis">
Roadmap
</span>
</a>
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#support-for-copies-and-renames" class="md-nav__link">
<span class="md-ellipsis">
Support for copies and renames
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#forge-integrations" class="md-nav__link">
<span class="md-ellipsis">
Forge integrations
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#submodule-support" class="md-nav__link">
<span class="md-ellipsis">
Submodule support
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#better-rust-api-for-uis" class="md-nav__link">
<span class="md-ellipsis">
Better Rust API for UIs
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#rpc-api" class="md-nav__link">
<span class="md-ellipsis">
RPC API
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#open-source-cloud-based-repos-server-and-daemon-process" class="md-nav__link">
<span class="md-ellipsis">
Open-source cloud-based repos (server and daemon process)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#virtual-file-system-vfs" class="md-nav__link">
<span class="md-ellipsis">
Virtual file system (VFS)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#better-support-for-large-files" class="md-nav__link">
<span class="md-ellipsis">
Better support for large files
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
@ -1416,6 +1279,138 @@
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
<span class="md-ellipsis">
Development Roadmap
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
<span class="md-ellipsis">
Development Roadmap
</span>
</a>
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#support-for-copies-and-renames" class="md-nav__link">
<span class="md-ellipsis">
Support for copies and renames
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#forge-integrations" class="md-nav__link">
<span class="md-ellipsis">
Forge integrations
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#submodule-support" class="md-nav__link">
<span class="md-ellipsis">
Submodule support
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#better-rust-api-for-uis" class="md-nav__link">
<span class="md-ellipsis">
Better Rust API for UIs
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#rpc-api" class="md-nav__link">
<span class="md-ellipsis">
RPC API
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#open-source-cloud-based-repos-server-and-daemon-process" class="md-nav__link">
<span class="md-ellipsis">
Open-source cloud-based repos (server and daemon process)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#virtual-file-system-vfs" class="md-nav__link">
<span class="md-ellipsis">
Virtual file system (VFS)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#better-support-for-large-files" class="md-nav__link">
<span class="md-ellipsis">
Better support for large files
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
@ -1590,7 +1585,7 @@ cheaply create temporary working copies for the commands to run in.</p>
<h2 id="better-support-for-large-files">Better support for large files<a class="headerlink" href="#better-support-for-large-files" title="Permanent link">&para;</a></h2>
<p>We have talked about somehow using content-defined chunking (CDC) to reduce
storage and transfer costs for large files. Maybe we will store files in our
future cloud-based server using the same model as <a href="https://xethub.com/assets/docs/concepts/xet-storage">XetHub</a>.</p>
future cloud-based server using the same model as <a href="https://web.archive.org/web/20240914200921/https://xethub.com/assets/docs/concepts/xet-storage">XetHub</a>.</p>

View File

@ -1214,27 +1214,6 @@
<li class="md-nav__item">
<a href="../roadmap/" class="md-nav__link">
<span class="md-ellipsis">
Roadmap
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../design/git-submodules/" class="md-nav__link">
@ -1362,6 +1341,26 @@
<li class="md-nav__item">
<a href="../roadmap/" class="md-nav__link">
<span class="md-ellipsis">
Development Roadmap
</span>
</a>
</li>
</ul>
</nav>
</div>

File diff suppressed because one or more lines are too long

View File

@ -2,150 +2,150 @@
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://martinvonz.github.io/jj/latest/</loc>
<lastmod>2024-11-07</lastmod>
<lastmod>2024-12-04</lastmod>
</url>
<url>
<loc>https://martinvonz.github.io/jj/latest/FAQ/</loc>
<lastmod>2024-11-07</lastmod>
<lastmod>2024-12-04</lastmod>
</url>
<url>
<loc>https://martinvonz.github.io/jj/latest/bookmarks/</loc>
<lastmod>2024-11-07</lastmod>
<lastmod>2024-12-04</lastmod>
</url>
<url>
<loc>https://martinvonz.github.io/jj/latest/cli-reference/</loc>
<lastmod>2024-11-07</lastmod>
<lastmod>2024-12-04</lastmod>
</url>
<url>
<loc>https://martinvonz.github.io/jj/latest/code-of-conduct/</loc>
<lastmod>2024-11-07</lastmod>
<lastmod>2024-12-04</lastmod>
</url>
<url>
<loc>https://martinvonz.github.io/jj/latest/community_tools/</loc>
<lastmod>2024-11-07</lastmod>
<lastmod>2024-12-04</lastmod>
</url>
<url>
<loc>https://martinvonz.github.io/jj/latest/config/</loc>
<lastmod>2024-11-07</lastmod>
<lastmod>2024-12-04</lastmod>
</url>
<url>
<loc>https://martinvonz.github.io/jj/latest/conflicts/</loc>
<lastmod>2024-11-07</lastmod>
<lastmod>2024-12-04</lastmod>
</url>
<url>
<loc>https://martinvonz.github.io/jj/latest/contributing/</loc>
<lastmod>2024-11-07</lastmod>
<lastmod>2024-12-04</lastmod>
</url>
<url>
<loc>https://martinvonz.github.io/jj/latest/design_doc_blueprint/</loc>
<lastmod>2024-11-07</lastmod>
<lastmod>2024-12-04</lastmod>
</url>
<url>
<loc>https://martinvonz.github.io/jj/latest/design_docs/</loc>
<lastmod>2024-11-07</lastmod>
<lastmod>2024-12-04</lastmod>
</url>
<url>
<loc>https://martinvonz.github.io/jj/latest/filesets/</loc>
<lastmod>2024-11-07</lastmod>
<lastmod>2024-12-04</lastmod>
</url>
<url>
<loc>https://martinvonz.github.io/jj/latest/git-comparison/</loc>
<lastmod>2024-11-07</lastmod>
<lastmod>2024-12-04</lastmod>
</url>
<url>
<loc>https://martinvonz.github.io/jj/latest/git-compatibility/</loc>
<lastmod>2024-11-07</lastmod>
<lastmod>2024-12-04</lastmod>
</url>
<url>
<loc>https://martinvonz.github.io/jj/latest/github/</loc>
<lastmod>2024-11-07</lastmod>
<lastmod>2024-12-04</lastmod>
</url>
<url>
<loc>https://martinvonz.github.io/jj/latest/glossary/</loc>
<lastmod>2024-11-07</lastmod>
<lastmod>2024-12-04</lastmod>
</url>
<url>
<loc>https://martinvonz.github.io/jj/latest/install-and-setup/</loc>
<lastmod>2024-11-07</lastmod>
<lastmod>2024-12-04</lastmod>
</url>
<url>
<loc>https://martinvonz.github.io/jj/latest/operation-log/</loc>
<lastmod>2024-11-07</lastmod>
<lastmod>2024-12-04</lastmod>
</url>
<url>
<loc>https://martinvonz.github.io/jj/latest/related-work/</loc>
<lastmod>2024-11-07</lastmod>
<lastmod>2024-12-04</lastmod>
</url>
<url>
<loc>https://martinvonz.github.io/jj/latest/revsets/</loc>
<lastmod>2024-11-07</lastmod>
<lastmod>2024-12-04</lastmod>
</url>
<url>
<loc>https://martinvonz.github.io/jj/latest/roadmap/</loc>
<lastmod>2024-11-07</lastmod>
<lastmod>2024-12-04</lastmod>
</url>
<url>
<loc>https://martinvonz.github.io/jj/latest/sapling-comparison/</loc>
<lastmod>2024-11-07</lastmod>
<lastmod>2024-12-04</lastmod>
</url>
<url>
<loc>https://martinvonz.github.io/jj/latest/templates/</loc>
<lastmod>2024-11-07</lastmod>
<lastmod>2024-12-04</lastmod>
</url>
<url>
<loc>https://martinvonz.github.io/jj/latest/testimonials/</loc>
<lastmod>2024-11-07</lastmod>
<lastmod>2024-12-04</lastmod>
</url>
<url>
<loc>https://martinvonz.github.io/jj/latest/tutorial/</loc>
<lastmod>2024-11-07</lastmod>
<lastmod>2024-12-04</lastmod>
</url>
<url>
<loc>https://martinvonz.github.io/jj/latest/windows/</loc>
<lastmod>2024-11-07</lastmod>
<lastmod>2024-12-04</lastmod>
</url>
<url>
<loc>https://martinvonz.github.io/jj/latest/working-copy/</loc>
<lastmod>2024-11-07</lastmod>
<lastmod>2024-12-04</lastmod>
</url>
<url>
<loc>https://martinvonz.github.io/jj/latest/design/copy-tracking/</loc>
<lastmod>2024-11-07</lastmod>
<lastmod>2024-12-04</lastmod>
</url>
<url>
<loc>https://martinvonz.github.io/jj/latest/design/git-submodule-storage/</loc>
<lastmod>2024-11-07</lastmod>
<lastmod>2024-12-04</lastmod>
</url>
<url>
<loc>https://martinvonz.github.io/jj/latest/design/git-submodules/</loc>
<lastmod>2024-11-07</lastmod>
<lastmod>2024-12-04</lastmod>
</url>
<url>
<loc>https://martinvonz.github.io/jj/latest/design/run/</loc>
<lastmod>2024-11-07</lastmod>
<lastmod>2024-12-04</lastmod>
</url>
<url>
<loc>https://martinvonz.github.io/jj/latest/design/sparse-v2/</loc>
<lastmod>2024-11-07</lastmod>
<lastmod>2024-12-04</lastmod>
</url>
<url>
<loc>https://martinvonz.github.io/jj/latest/design/tracking-branches/</loc>
<lastmod>2024-11-07</lastmod>
<lastmod>2024-12-04</lastmod>
</url>
<url>
<loc>https://martinvonz.github.io/jj/latest/governance/temporary-voting/</loc>
<lastmod>2024-11-07</lastmod>
<lastmod>2024-12-04</lastmod>
</url>
<url>
<loc>https://martinvonz.github.io/jj/latest/technical/architecture/</loc>
<lastmod>2024-11-07</lastmod>
<lastmod>2024-12-04</lastmod>
</url>
<url>
<loc>https://martinvonz.github.io/jj/latest/technical/concurrency/</loc>
<lastmod>2024-11-07</lastmod>
<lastmod>2024-12-04</lastmod>
</url>
<url>
<loc>https://martinvonz.github.io/jj/latest/technical/conflicts/</loc>
<lastmod>2024-11-07</lastmod>
<lastmod>2024-12-04</lastmod>
</url>
</urlset>

Binary file not shown.

View File

@ -1406,27 +1406,6 @@
<li class="md-nav__item">
<a href="../../roadmap/" class="md-nav__link">
<span class="md-ellipsis">
Roadmap
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../design/git-submodules/" class="md-nav__link">
@ -1554,6 +1533,26 @@
<li class="md-nav__item">
<a href="../../roadmap/" class="md-nav__link">
<span class="md-ellipsis">
Development Roadmap
</span>
</a>
</li>
</ul>
</nav>
</div>

View File

@ -1253,27 +1253,6 @@
<li class="md-nav__item">
<a href="../../roadmap/" class="md-nav__link">
<span class="md-ellipsis">
Roadmap
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../design/git-submodules/" class="md-nav__link">
@ -1401,6 +1380,26 @@
<li class="md-nav__item">
<a href="../../roadmap/" class="md-nav__link">
<span class="md-ellipsis">
Development Roadmap
</span>
</a>
</li>
</ul>
</nav>
</div>

View File

@ -1223,27 +1223,6 @@
<li class="md-nav__item">
<a href="../../roadmap/" class="md-nav__link">
<span class="md-ellipsis">
Roadmap
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../design/git-submodules/" class="md-nav__link">
@ -1371,6 +1350,26 @@
<li class="md-nav__item">
<a href="../../roadmap/" class="md-nav__link">
<span class="md-ellipsis">
Development Roadmap
</span>
</a>
</li>
</ul>
</nav>
</div>

View File

@ -1457,27 +1457,6 @@
<li class="md-nav__item">
<a href="../roadmap/" class="md-nav__link">
<span class="md-ellipsis">
Roadmap
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../design/git-submodules/" class="md-nav__link">
@ -1605,6 +1584,26 @@
<li class="md-nav__item">
<a href="../roadmap/" class="md-nav__link">
<span class="md-ellipsis">
Development Roadmap
</span>
</a>
</li>
</ul>
</nav>
</div>
@ -1930,6 +1929,8 @@ type</a> are available as keywords. For example,
<li><code>x.f()</code>: Method call.</li>
<li><code>-x</code>: Negate integer value.</li>
<li><code>!x</code>: Logical not.</li>
<li><code>x == y</code>, <code>x != y</code>: Logical equal/not equal. Operands must be either
<code>Boolean</code>, <code>Integer</code>, or <code>String</code>.</li>
<li><code>x &amp;&amp; y</code>: Logical and, short-circuiting.</li>
<li><code>x || y</code>: Logical or, short-circuiting.</li>
<li><code>x ++ y</code>: Concatenate <code>x</code> and <code>y</code> templates.</li>
@ -1956,7 +1957,7 @@ type</a> are available as keywords. For example,
the content. The <code>label</code> is evaluated as a space-separated string.</li>
<li><code>raw_escape_sequence(content: Template) -&gt; Template</code>: Preserves any escape
sequences in <code>content</code> (i.e., bypasses sanitization) and strips labels.
Note: This function is intended for escape sequences and as such, it's output
Note: This function is intended for escape sequences and as such, its output
is expected to be invisible / of no display width. Outputting content with
nonzero display width may break wrapping, indentation etc.</li>
<li><code>if(condition: Boolean, then: Template[, else: Template]) -&gt; Template</code>:

View File

@ -1221,27 +1221,6 @@
<li class="md-nav__item">
<a href="../roadmap/" class="md-nav__link">
<span class="md-ellipsis">
Roadmap
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../design/git-submodules/" class="md-nav__link">
@ -1369,6 +1348,26 @@
<li class="md-nav__item">
<a href="../roadmap/" class="md-nav__link">
<span class="md-ellipsis">
Development Roadmap
</span>
</a>
</li>
</ul>
</nav>
</div>

View File

@ -376,9 +376,18 @@
</li>
<li class="md-nav__item">
<a href="#cloning-a-git-repo" class="md-nav__link">
<a href="#cloning-a-git-repository" class="md-nav__link">
<span class="md-ellipsis">
Cloning a Git repo
Cloning a Git repository
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#changes" class="md-nav__link">
<span class="md-ellipsis">
Changes
</span>
</a>
@ -1259,27 +1268,6 @@
<li class="md-nav__item">
<a href="../roadmap/" class="md-nav__link">
<span class="md-ellipsis">
Roadmap
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../design/git-submodules/" class="md-nav__link">
@ -1407,6 +1395,26 @@
<li class="md-nav__item">
<a href="../roadmap/" class="md-nav__link">
<span class="md-ellipsis">
Development Roadmap
</span>
</a>
</li>
</ul>
</nav>
</div>
@ -1443,9 +1451,18 @@
</li>
<li class="md-nav__item">
<a href="#cloning-a-git-repo" class="md-nav__link">
<a href="#cloning-a-git-repository" class="md-nav__link">
<span class="md-ellipsis">
Cloning a Git repo
Cloning a Git repository
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#changes" class="md-nav__link">
<span class="md-ellipsis">
Changes
</span>
</a>
@ -1514,19 +1531,27 @@
<h1 id="tutorial">Tutorial<a class="headerlink" href="#tutorial" title="Permanent link">&para;</a></h1>
<blockquote>
<p><strong>Hint:</strong> This tutorial has become somewhat out of date. Many people find
the alternative (not quite finished) <a href="https://steveklabnik.github.io/jujutsu-tutorial/">tutorial by Steve
Klabnik</a> helpful.</p>
the alternative (not quite finished) <a href="https://steveklabnik.github.io/jujutsu-tutorial/">tutorial by Steve
Klabnik</a> helpful.</p>
</blockquote>
<p>This text assumes that the reader is familiar with Git.</p>
<h2 id="preparation">Preparation<a class="headerlink" href="#preparation" title="Permanent link">&para;</a></h2>
<p>If you haven't already, make sure you
<a href="../install-and-setup/">install and configure Jujutsu</a>.</p>
<h2 id="cloning-a-git-repo">Cloning a Git repo<a class="headerlink" href="#cloning-a-git-repo" title="Permanent link">&para;</a></h2>
<h2 id="cloning-a-git-repository">Cloning a Git repository<a class="headerlink" href="#cloning-a-git-repository" title="Permanent link">&para;</a></h2>
<blockquote>
<p><strong>Hint:</strong> Most identifiers used in this tutorial will be different when you
try this at home!</p>
</blockquote>
<p>Let's start by cloning GitHub's Hello-World repo using <code>jj</code>:</p>
<div class="highlight"><pre><span></span><code><span class="c1"># Note the &quot;git&quot; before &quot;clone&quot; (there is no support for cloning native jj</span>
<span class="c1"># repos yet)</span>
$<span class="w"> </span>jj<span class="w"> </span>git<span class="w"> </span>clone<span class="w"> </span>https://github.com/octocat/Hello-World
Fetching<span class="w"> </span>into<span class="w"> </span>new<span class="w"> </span>repo<span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="s2">&quot;/tmp/tmp.O1DWMiaKd4/Hello-World&quot;</span>
bookmark:<span class="w"> </span>master@origin<span class="w"> </span><span class="o">[</span>new<span class="o">]</span><span class="w"> </span>untracked
bookmark:<span class="w"> </span>octocat-patch-1@origin<span class="w"> </span><span class="o">[</span>new<span class="o">]</span><span class="w"> </span>untracked
bookmark:<span class="w"> </span>test@origin<span class="w"> </span><span class="o">[</span>new<span class="o">]</span><span class="w"> </span>untracked
Setting<span class="w"> </span>the<span class="w"> </span>revset<span class="w"> </span><span class="nb">alias</span><span class="w"> </span><span class="s2">&quot;trunk()&quot;</span><span class="w"> </span>to<span class="w"> </span><span class="s2">&quot;master@origin&quot;</span>
Working<span class="w"> </span>copy<span class="w"> </span>now<span class="w"> </span>at:<span class="w"> </span>kntqzsqt<span class="w"> </span>d7439b06<span class="w"> </span><span class="o">(</span>empty<span class="o">)</span><span class="w"> </span><span class="o">(</span>no<span class="w"> </span>description<span class="w"> </span><span class="nb">set</span><span class="o">)</span>
Parent<span class="w"> </span>commit<span class="w"> </span>:<span class="w"> </span>orrkosyo<span class="w"> </span>7fd1a60b<span class="w"> </span>master<span class="w"> </span><span class="p">|</span><span class="w"> </span><span class="o">(</span>empty<span class="o">)</span><span class="w"> </span>Merge<span class="w"> </span>pull<span class="w"> </span>request<span class="w"> </span><span class="c1">#6 from Spaceghost/patch-1</span>
Added<span class="w"> </span><span class="m">1</span><span class="w"> </span>files,<span class="w"> </span>modified<span class="w"> </span><span class="m">0</span><span class="w"> </span>files,<span class="w"> </span>removed<span class="w"> </span><span class="m">0</span><span class="w"> </span>files
@ -1538,16 +1563,40 @@ The<span class="w"> </span>working<span class="w"> </span>copy<span class="w"> <
Working<span class="w"> </span>copy<span class="w"> </span>:<span class="w"> </span>kntqzsqt<span class="w"> </span>d7439b06<span class="w"> </span><span class="o">(</span>empty<span class="o">)</span><span class="w"> </span><span class="o">(</span>no<span class="w"> </span>description<span class="w"> </span><span class="nb">set</span><span class="o">)</span>
Parent<span class="w"> </span>commit:<span class="w"> </span>orrkosyo<span class="w"> </span>7fd1a60b<span class="w"> </span>master<span class="w"> </span><span class="p">|</span><span class="w"> </span><span class="o">(</span>empty<span class="o">)</span><span class="w"> </span>Merge<span class="w"> </span>pull<span class="w"> </span>request<span class="w"> </span><span class="c1">#6 from Spaceghost/patch-1</span>
</code></pre></div>
<p>We can see from the output above that our working copy is a real commit with a
commit ID (<code>d7439b06</code> in the example). When you make a change in the working
copy, the working-copy commit gets automatically amended by the next <code>jj</code>
command.</p>
<p>Let's look at that output as it introduces new concepts. You can see two
commits: Parent and working copy. Both are identified using two separate
identifiers: the "change ID" and the "commit ID".</p>
<p>The parent commit, for example, has the change ID <code>orrkosyo</code> and the commit ID
<code>7fd1a60b</code>.</p>
<blockquote>
<p><strong>Git users:</strong> The commit ID/hash is what you're used to from Git and should
match what you see when you look at the repository using <code>git log</code> in a Git
checkout of the repository.
The change ID however, is a new concept, unique to Jujutsu.</p>
</blockquote>
<p>We can also see from the output above that our working copy is an actual commit
with a commit ID (<code>d7439b06</code> in the example). When you make a change in the
working copy, the working-copy commit gets automatically amended by the next
<code>jj</code> command.</p>
<blockquote>
<p><strong>Git users:</strong> This is a huge difference from Git where the working copy is a
separate concept and not yet a commit.</p>
</blockquote>
<h2 id="changes">Changes<a class="headerlink" href="#changes" title="Permanent link">&para;</a></h2>
<p>A change is a commit that can evolve while keeping a stable identifier (similar
to Gerrit's Change-Id). In other words: You can make changes to files in a
change, resulting in a new commit hash, but the change ID will remain the same.</p>
<p>You can see that our clone operation automatically created a new change:</p>
<div class="highlight"><pre><span></span><code>Working copy : kntqzsqt d7439b06 (empty) (no description set)
</code></pre></div>
<p>This new change has the ID <code>kntqzsqt</code> and it is currently empty (contains no
changes compared to the parent) and has no description.</p>
<h2 id="creating-our-first-change">Creating our first change<a class="headerlink" href="#creating-our-first-change" title="Permanent link">&para;</a></h2>
<p>Now let's say we want to edit the <code>README</code> file in the repo to say "Goodbye"
instead of "Hello". Let's start by describing the change (adding a
commit message) so we don't forget what we're working on:</p>
<div class="highlight"><pre><span></span><code><span class="c1"># This will bring up $EDITOR (or `pico` or `Notepad` by default). Enter</span>
<span class="c1"># something like &quot;Say goodbye&quot; in the editor and then save the file and close</span>
<p>Let's say we want to edit the <code>README</code> file in the repo to say "Goodbye"
instead of "Hello". Start by describing the change (adding a commit message) so
we don't forget what we're working on:</p>
<div class="highlight"><pre><span></span><code><span class="c1"># This brings up $EDITOR (or `pico` or `Notepad` by default).</span>
<span class="c1"># Enter something like &quot;Say goodbye&quot; in the editor and then save the file and close</span>
<span class="c1"># the editor.</span>
$<span class="w"> </span>jj<span class="w"> </span>describe
Working<span class="w"> </span>copy<span class="w"> </span>now<span class="w"> </span>at:<span class="w"> </span>kntqzsqt<span class="w"> </span>e427edcf<span class="w"> </span><span class="o">(</span>empty<span class="o">)</span><span class="w"> </span>Say<span class="w"> </span>goodbye
@ -1566,6 +1615,8 @@ Parent<span class="w"> </span>commit:<span class="w"> </span>orrkosyo<span class
<code>git add</code>. You actually don't even need to tell it when you add new files or
remove existing files. To untrack a path, add it to your <code>.gitignore</code> and run
<code>jj file untrack &lt;path&gt;</code>.</p>
<p>Also note that the commit hash for our current change (<code>kntqzsqt</code>) changed from
<code>e427edcf</code> to <code>5d39e19d</code>!</p>
<p>To see the diff, run <code>jj diff</code>:</p>
<div class="highlight"><pre><span></span><code>$<span class="w"> </span>jj<span class="w"> </span>diff<span class="w"> </span>--git<span class="w"> </span><span class="c1"># Feel free to skip the `--git` flag</span>
diff<span class="w"> </span>--git<span class="w"> </span>a/README<span class="w"> </span>b/README
@ -1595,12 +1646,12 @@ The<span class="w"> </span>working<span class="w"> </span>copy<span class="w"> <
Working<span class="w"> </span>copy<span class="w"> </span>:<span class="w"> </span>mpqrykyp<span class="w"> </span>aef4df99<span class="w"> </span><span class="o">(</span>empty<span class="o">)</span><span class="w"> </span><span class="o">(</span>no<span class="w"> </span>description<span class="w"> </span><span class="nb">set</span><span class="o">)</span>
Parent<span class="w"> </span>commit:<span class="w"> </span>kntqzsqt<span class="w"> </span>5d39e19d<span class="w"> </span>Say<span class="w"> </span>goodbye
</code></pre></div>
<p>If we later realize that we want to make further changes, we can make them
in the working copy and then run <code>jj squash</code>. That command squashes the changes
from a given commit into its parent commit. Like most commands, it acts on the
working-copy commit by default. When run on the working-copy commit, it behaves
very similar to <code>git commit --amend</code>, and <code>jj amend</code> is in fact an alias for
<code>jj squash</code>.</p>
<p>If we later realize that we want to make further changes, we can make them in
the working copy and then run <code>jj squash</code>. That command squashes (moves) the
changes from a given commit into its parent commit. Like most commands, it acts
on the working-copy commit by default. When run on the working-copy commit, it
behaves very similar to <code>git commit --amend</code>, and <code>jj amend</code> is in fact an alias
for <code>jj squash</code>.</p>
<p>Alternatively, we can use <code>jj edit &lt;commit&gt;</code> to resume editing a commit in the
working copy. Any further changes in the working copy will then amend the
commit. Whether you choose to create a new change and squash, or to edit,
@ -1608,8 +1659,8 @@ typically depends on how done you are with the change; if the change is almost
done, it makes sense to use <code>jj new</code> so you can easily review your adjustments
with <code>jj diff</code> before running <code>jj squash</code>.</p>
<p>To view how a change has evolved over time, we can use <code>jj evolog</code> to see each
recorded change for the current commit. This records changes to the working copy,
message, squashes, rebases, etc.</p>
recorded change for the current commit. This records changes to the working
copy, message, squashes, rebases, etc.</p>
<h2 id="the-log-command-and-revsets">The log command and "revsets"<a class="headerlink" href="#the-log-command-and-revsets" title="Permanent link">&para;</a></h2>
<p>You're probably familiar with <code>git log</code>. Jujutsu has very similar functionality
in its <code>jj log</code> command:</p>
@ -1627,20 +1678,19 @@ in its <code>jj log</code> command:</p>
~
</code></pre></div>
<p>The <code>@</code> indicates the working-copy commit. The first ID on a line
(e.g. "mpqrykyp" above) is the "change ID", which is an ID that follows the
commit as it's rewritten (similar to Gerrit's Change-Id). The second ID is the
commit ID, which changes when you rewrite the commit. You can give either ID
to commands that take revisions as arguments. We will generally prefer change
IDs because they stay the same when the commit is rewritten.</p>
(e.g. "mpqrykyp" above) is the change ID. The second ID is the commit ID. You
can give either ID to commands that take revisions as arguments. We will
generally prefer change IDs because they stay the same when the commit is
rewritten.</p>
<p>By default, <code>jj log</code> lists your local commits, with some remote commits added
for context. The <code>~</code> indicates that the commit has parents that are not
included in the graph. We can use the <code>--revisions</code>/<code>-r</code> flag to select a
different set of revisions to list. The flag accepts a <a href="../revsets/">"revset"</a>,
which is an expression in a simple language for specifying revisions. For
example, <code>@</code> refers to the working-copy commit, <code>root()</code> refers to the root
commit, <code>bookmarks()</code> refers to all commits pointed to by bookmarks (similar to
Git's branches). We can combine expressions with <code>|</code> for union, <code>&amp;</code> for
intersection and <code>~</code> for difference. For example:</p>
for context. The <code>~</code> indicates that the commit has parents that are not included
in the graph. We can use the <code>--revisions</code>/<code>-r</code> flag to select a different set
of revisions to list. The flag accepts a <a href="../revsets/">"revset"</a>, which is an
expression in a simple language for specifying revisions. For example, <code>@</code>
refers to the working-copy commit, <code>root()</code> refers to the root commit,
<code>bookmarks()</code> refers to all commits pointed to by bookmarks (similar to Git's
branches). We can combine expressions with <code>|</code> for union, <code>&amp;</code> for intersection
and <code>~</code> for difference. For example:</p>
<div class="highlight"><pre><span></span><code>$<span class="w"> </span>jj<span class="w"> </span>log<span class="w"> </span>-r<span class="w"> </span><span class="s1">&#39;@ | root() | bookmarks()&#39;</span>
@<span class="w"> </span>mpqrykyp<span class="w"> </span>martinvonz@google.com<span class="w"> </span><span class="m">2023</span>-02-12<span class="w"> </span><span class="m">15</span>:00:22.000<span class="w"> </span>-08:00<span class="w"> </span>aef4df99
<span class="w"> </span><span class="o">(</span>empty<span class="o">)</span><span class="w"> </span><span class="o">(</span>no<span class="w"> </span>description<span class="w"> </span><span class="nb">set</span><span class="o">)</span>
@ -1648,8 +1698,8 @@ intersection and <code>~</code> for difference. For example:</p>
<span class="w"> </span><span class="o">(</span>empty<span class="o">)</span><span class="w"> </span>Merge<span class="w"> </span>pull<span class="w"> </span>request<span class="w"> </span><span class="c1">#6 from Spaceghost/patch-1</span>
<span class="w"> </span>zzzzzzzz<span class="w"> </span>root<span class="o">()</span><span class="w"> </span><span class="m">00000000</span>
</code></pre></div>
<p>The <code>00000000</code> commit (change ID <code>zzzzzzzz</code>) is a virtual commit that's
called the "root commit". It's the root commit of every repo. The <code>root()</code>
<p>The <code>00000000</code> commit (change ID <code>zzzzzzzz</code>) is a virtual commit that's called
the "root commit". It's the root commit of every repo. The <code>root()</code>
function in the revset matches it.</p>
<p>There are also operators for getting the parents (<code>foo-</code>), children (<code>foo+</code>),
ancestors (<code>::foo</code>), descendants (<code>foo::</code>), DAG range (<code>foo::bar</code>, like
@ -1703,6 +1753,11 @@ modifies a different file. Let's now rebase B2 directly onto A. We use the
on A.</p>
<div class="highlight"><pre><span></span><code>$<span class="w"> </span>jj<span class="w"> </span>rebase<span class="w"> </span>-s<span class="w"> </span>puqltutt<span class="w"> </span>-d<span class="w"> </span>nuvyytnq<span class="w"> </span><span class="c1"># Replace the IDs by what you have for B2 and A</span>
Rebased<span class="w"> </span><span class="m">2</span><span class="w"> </span>commits
Working<span class="w"> </span>copy<span class="w"> </span>now<span class="w"> </span>at:<span class="w"> </span>qzvqqupx<span class="w"> </span>1978b534<span class="w"> </span><span class="o">(</span>conflict<span class="o">)</span><span class="w"> </span>C
Parent<span class="w"> </span>commit<span class="w"> </span>:<span class="w"> </span>puqltutt<span class="w"> </span>f7fb5943<span class="w"> </span><span class="o">(</span>conflict<span class="o">)</span><span class="w"> </span>B2
Added<span class="w"> </span><span class="m">0</span><span class="w"> </span>files,<span class="w"> </span>modified<span class="w"> </span><span class="m">1</span><span class="w"> </span>files,<span class="w"> </span>removed<span class="w"> </span><span class="m">0</span><span class="w"> </span>files
There<span class="w"> </span>are<span class="w"> </span>unresolved<span class="w"> </span>conflicts<span class="w"> </span>at<span class="w"> </span>these<span class="w"> </span>paths:
file1<span class="w"> </span><span class="m">2</span>-sided<span class="w"> </span>conflict
New<span class="w"> </span>conflicts<span class="w"> </span>appeared<span class="w"> </span><span class="k">in</span><span class="w"> </span>these<span class="w"> </span>commits:
<span class="w"> </span>qzvqqupx<span class="w"> </span>1978b534<span class="w"> </span><span class="o">(</span>conflict<span class="o">)</span><span class="w"> </span>C
<span class="w"> </span>puqltutt<span class="w"> </span>f7fb5943<span class="w"> </span><span class="o">(</span>conflict<span class="o">)</span><span class="w"> </span>B2
@ -1711,9 +1766,7 @@ To<span class="w"> </span>resolve<span class="w"> </span>the<span class="w"> </s
Then<span class="w"> </span>use<span class="w"> </span><span class="sb">`</span>jj<span class="w"> </span>resolve<span class="sb">`</span>,<span class="w"> </span>or<span class="w"> </span>edit<span class="w"> </span>the<span class="w"> </span>conflict<span class="w"> </span>markers<span class="w"> </span><span class="k">in</span><span class="w"> </span>the<span class="w"> </span>file<span class="w"> </span>directly.
Once<span class="w"> </span>the<span class="w"> </span>conflicts<span class="w"> </span>are<span class="w"> </span>resolved,<span class="w"> </span>you<span class="w"> </span>may<span class="w"> </span>want<span class="w"> </span>to<span class="w"> </span>inspect<span class="w"> </span>the<span class="w"> </span>result<span class="w"> </span>with<span class="w"> </span><span class="sb">`</span>jj<span class="w"> </span>diff<span class="sb">`</span>.
Then<span class="w"> </span>run<span class="w"> </span><span class="sb">`</span>jj<span class="w"> </span>squash<span class="sb">`</span><span class="w"> </span>to<span class="w"> </span>move<span class="w"> </span>the<span class="w"> </span>resolution<span class="w"> </span>into<span class="w"> </span>the<span class="w"> </span>conflicted<span class="w"> </span>commit.
Working<span class="w"> </span>copy<span class="w"> </span>now<span class="w"> </span>at:<span class="w"> </span>qzvqqupx<span class="w"> </span>1978b534<span class="w"> </span><span class="o">(</span>conflict<span class="o">)</span><span class="w"> </span>C
Parent<span class="w"> </span>commit<span class="w"> </span>:<span class="w"> </span>puqltutt<span class="w"> </span>f7fb5943<span class="w"> </span><span class="o">(</span>conflict<span class="o">)</span><span class="w"> </span>B2
Added<span class="w"> </span><span class="m">0</span><span class="w"> </span>files,<span class="w"> </span>modified<span class="w"> </span><span class="m">1</span><span class="w"> </span>files,<span class="w"> </span>removed<span class="w"> </span><span class="m">0</span><span class="w"> </span>files
$<span class="w"> </span>jj<span class="w"> </span>log
@<span class="w"> </span>qzvqqupx<span class="w"> </span>martinvonz@google.com<span class="w"> </span><span class="m">2023</span>-02-12<span class="w"> </span><span class="m">15</span>:08:33.000<span class="w"> </span>-08:00<span class="w"> </span>1978b534<span class="w"> </span>conflict
<span class="w"> </span>C
@ -1736,10 +1789,10 @@ $<span class="w"> </span>jj<span class="w"> </span>log
<p>There are several things worth noting here. First, the <code>jj rebase</code> command said
"Rebased 2 commits". That's because we asked it to rebase commit B2 with the
<code>-s</code> option, which also rebases descendants (commit C in this case). Second,
because B2 modified the same file (and word) as B1, rebasing
it resulted in conflicts, as the output indicates. Third, the conflicts
did not prevent the rebase from completing successfully, nor did it prevent C
from getting rebased on top.</p>
because B2 modified the same file (and word) as B1, rebasing it resulted in
conflicts, as the output indicates. Third, the conflicts did not prevent the
rebase from completing successfully, nor did it prevent C from getting rebased
on top.</p>
<p>Now let's resolve the conflict in B2. We'll do that by creating a new commit on
top of B2. Once we've resolved the conflict, we'll squash the conflict
resolution into the conflicted B2. That might look like this:</p>
@ -1747,28 +1800,47 @@ resolution into the conflicted B2. That might look like this:</p>
Working<span class="w"> </span>copy<span class="w"> </span>now<span class="w"> </span>at:<span class="w"> </span>zxoosnnp<span class="w"> </span>c7068d1c<span class="w"> </span><span class="o">(</span>conflict<span class="o">)</span><span class="w"> </span><span class="o">(</span>empty<span class="o">)</span><span class="w"> </span><span class="o">(</span>no<span class="w"> </span>description<span class="w"> </span><span class="nb">set</span><span class="o">)</span>
Parent<span class="w"> </span>commit<span class="w"> </span>:<span class="w"> </span>puqltutt<span class="w"> </span>f7fb5943<span class="w"> </span><span class="o">(</span>conflict<span class="o">)</span><span class="w"> </span>B2
Added<span class="w"> </span><span class="m">0</span><span class="w"> </span>files,<span class="w"> </span>modified<span class="w"> </span><span class="m">0</span><span class="w"> </span>files,<span class="w"> </span>removed<span class="w"> </span><span class="m">1</span><span class="w"> </span>files
There<span class="w"> </span>are<span class="w"> </span>unresolved<span class="w"> </span>conflicts<span class="w"> </span>at<span class="w"> </span>these<span class="w"> </span>paths:
file1<span class="w"> </span><span class="m">2</span>-sided<span class="w"> </span>conflict
$<span class="w"> </span>jj<span class="w"> </span>st
The<span class="w"> </span>working<span class="w"> </span>copy<span class="w"> </span>is<span class="w"> </span>clean
There<span class="w"> </span>are<span class="w"> </span>unresolved<span class="w"> </span>conflicts<span class="w"> </span>at<span class="w"> </span>these<span class="w"> </span>paths:
file1<span class="w"> </span><span class="m">2</span>-sided<span class="w"> </span>conflict
Working<span class="w"> </span>copy<span class="w"> </span>:<span class="w"> </span>zxoosnnp<span class="w"> </span>c7068d1c<span class="w"> </span><span class="o">(</span>conflict<span class="o">)</span><span class="w"> </span><span class="o">(</span>empty<span class="o">)</span><span class="w"> </span><span class="o">(</span>no<span class="w"> </span>description<span class="w"> </span><span class="nb">set</span><span class="o">)</span>
Parent<span class="w"> </span>commit:<span class="w"> </span>puqltutt<span class="w"> </span>f7fb5943<span class="w"> </span><span class="o">(</span>conflict<span class="o">)</span><span class="w"> </span>B2
To<span class="w"> </span>resolve<span class="w"> </span>the<span class="w"> </span>conflicts,<span class="w"> </span>start<span class="w"> </span>by<span class="w"> </span>updating<span class="w"> </span>to<span class="w"> </span>it:
<span class="w"> </span>jj<span class="w"> </span>new<span class="w"> </span>puqltutt
Then<span class="w"> </span>use<span class="w"> </span><span class="sb">`</span>jj<span class="w"> </span>resolve<span class="sb">`</span>,<span class="w"> </span>or<span class="w"> </span>edit<span class="w"> </span>the<span class="w"> </span>conflict<span class="w"> </span>markers<span class="w"> </span><span class="k">in</span><span class="w"> </span>the<span class="w"> </span>file<span class="w"> </span>directly.
Once<span class="w"> </span>the<span class="w"> </span>conflicts<span class="w"> </span>are<span class="w"> </span>resolved,<span class="w"> </span>you<span class="w"> </span>may<span class="w"> </span>want<span class="w"> </span>to<span class="w"> </span>inspect<span class="w"> </span>the<span class="w"> </span>result<span class="w"> </span>with<span class="w"> </span><span class="sb">`</span>jj<span class="w"> </span>diff<span class="sb">`</span>.
Then<span class="w"> </span>run<span class="w"> </span><span class="sb">`</span>jj<span class="w"> </span>squash<span class="sb">`</span><span class="w"> </span>to<span class="w"> </span>move<span class="w"> </span>the<span class="w"> </span>resolution<span class="w"> </span>into<span class="w"> </span>the<span class="w"> </span>conflicted<span class="w"> </span>commit.
$<span class="w"> </span>cat<span class="w"> </span>file1
<span class="o">&lt;&lt;&lt;&lt;&lt;&lt;</span>&lt;
%%%%%%%
<span class="o">&lt;&lt;&lt;&lt;&lt;&lt;</span>&lt;<span class="w"> </span>Conflict<span class="w"> </span><span class="m">1</span><span class="w"> </span>of<span class="w"> </span><span class="m">1</span>
%%%%%%%<span class="w"> </span>Changes<span class="w"> </span>from<span class="w"> </span>base<span class="w"> </span>to<span class="w"> </span>side<span class="w"> </span><span class="c1">#1</span>
-b1
+a
+++++++
+++++++<span class="w"> </span>Contents<span class="w"> </span>of<span class="w"> </span>side<span class="w"> </span><span class="c1">#2</span>
b2
&gt;&gt;&gt;&gt;&gt;&gt;&gt;
&gt;&gt;&gt;&gt;&gt;&gt;&gt;<span class="w"> </span>Conflict<span class="w"> </span><span class="m">1</span><span class="w"> </span>of<span class="w"> </span><span class="m">1</span><span class="w"> </span>ends
$<span class="w"> </span><span class="nb">echo</span><span class="w"> </span>resolved<span class="w"> </span>&gt;<span class="w"> </span>file1
$<span class="w"> </span>jj<span class="w"> </span>st
Working<span class="w"> </span>copy<span class="w"> </span>changes:
M<span class="w"> </span>file1
Working<span class="w"> </span>copy<span class="w"> </span>:<span class="w"> </span>zxoosnnp<span class="w"> </span>c2a31a06<span class="w"> </span><span class="o">(</span>no<span class="w"> </span>description<span class="w"> </span><span class="nb">set</span><span class="o">)</span>
Parent<span class="w"> </span>commit:<span class="w"> </span>puqltutt<span class="w"> </span>f7fb5943<span class="w"> </span><span class="o">(</span>conflict<span class="o">)</span><span class="w"> </span>B2
Conflict<span class="w"> </span><span class="k">in</span><span class="w"> </span>parent<span class="w"> </span>commit<span class="w"> </span>has<span class="w"> </span>been<span class="w"> </span>resolved<span class="w"> </span><span class="k">in</span><span class="w"> </span>working<span class="w"> </span>copy
$<span class="w"> </span>jj<span class="w"> </span>squash
Rebased<span class="w"> </span><span class="m">1</span><span class="w"> </span>descendant<span class="w"> </span>commits
Working<span class="w"> </span>copy<span class="w"> </span>now<span class="w"> </span>at:<span class="w"> </span>ntxxqymr<span class="w"> </span>e3c279cc<span class="w"> </span><span class="o">(</span>empty<span class="o">)</span><span class="w"> </span><span class="o">(</span>no<span class="w"> </span>description<span class="w"> </span><span class="nb">set</span><span class="o">)</span>
Parent<span class="w"> </span>commit<span class="w"> </span>:<span class="w"> </span>puqltutt<span class="w"> </span>2c7a658e<span class="w"> </span>B2
Existing<span class="w"> </span>conflicts<span class="w"> </span>were<span class="w"> </span>resolved<span class="w"> </span>or<span class="w"> </span>abandoned<span class="w"> </span>from<span class="w"> </span>these<span class="w"> </span>commits:
<span class="w"> </span>qzvqqupx<span class="w"> </span>hidden<span class="w"> </span>1978b534<span class="w"> </span><span class="o">(</span>conflict<span class="o">)</span><span class="w"> </span>C
<span class="w"> </span>puqltutt<span class="w"> </span>hidden<span class="w"> </span>f7fb5943<span class="w"> </span><span class="o">(</span>conflict<span class="o">)</span><span class="w"> </span>B2
Working<span class="w"> </span>copy<span class="w"> </span>now<span class="w"> </span>at:<span class="w"> </span>ntxxqymr<span class="w"> </span>e3c279cc<span class="w"> </span><span class="o">(</span>empty<span class="o">)</span><span class="w"> </span><span class="o">(</span>no<span class="w"> </span>description<span class="w"> </span><span class="nb">set</span><span class="o">)</span>
Parent<span class="w"> </span>commit<span class="w"> </span>:<span class="w"> </span>puqltutt<span class="w"> </span>2c7a658e<span class="w"> </span>B2
$<span class="w"> </span>jj<span class="w"> </span>log
@<span class="w"> </span>ntxxqymr<span class="w"> </span>martinvonz@google.com<span class="w"> </span><span class="m">2023</span>-02-12<span class="w"> </span><span class="m">19</span>:34:09.000<span class="w"> </span>-08:00<span class="w"> </span>e3c279cc
<span class="w"> </span><span class="o">(</span>empty<span class="o">)</span><span class="w"> </span><span class="o">(</span>no<span class="w"> </span>description<span class="w"> </span><span class="nb">set</span><span class="o">)</span>
@ -1827,6 +1899,7 @@ Once<span class="w"> </span>the<span class="w"> </span>conflicts<span class="w">
Then<span class="w"> </span>run<span class="w"> </span><span class="sb">`</span>jj<span class="w"> </span>squash<span class="sb">`</span><span class="w"> </span>to<span class="w"> </span>move<span class="w"> </span>the<span class="w"> </span>resolution<span class="w"> </span>into<span class="w"> </span>the<span class="w"> </span>conflicted<span class="w"> </span>commit.
Working<span class="w"> </span>copy<span class="w"> </span>now<span class="w"> </span>at:<span class="w"> </span>zxoosnnp<span class="w"> </span>63874fe6<span class="w"> </span><span class="o">(</span>no<span class="w"> </span>description<span class="w"> </span><span class="nb">set</span><span class="o">)</span>
Parent<span class="w"> </span>commit<span class="w"> </span>:<span class="w"> </span>puqltutt<span class="w"> </span>f7fb5943<span class="w"> </span><span class="o">(</span>conflict<span class="o">)</span><span class="w"> </span>B2
$<span class="w"> </span>jj<span class="w"> </span>log
@<span class="w"> </span>zxoosnnp<span class="w"> </span>martinvonz@google.com<span class="w"> </span><span class="m">2023</span>-02-12<span class="w"> </span><span class="m">19</span>:34:09.000<span class="w"> </span>-08:00<span class="w"> </span>63874fe6
<span class="w"> </span><span class="o">(</span>no<span class="w"> </span>description<span class="w"> </span><span class="nb">set</span><span class="o">)</span>
@ -1852,8 +1925,9 @@ $<span class="w"> </span>jj<span class="w"> </span>log
squashing the conflict resolution into commit B2 earlier. Notice that it also
updated the working copy.</p>
<p>You can also view the repo the way it looked after some earlier operation. For
example, if you want to see <code>jj log</code> output right after the <code>jj rebase</code> operation,
try <code>jj log --at-op=367400773f87</code> but use the hash from your own <code>jj op log</code>.</p>
example, if you want to see <code>jj log</code> output right after the <code>jj rebase</code>
operation, try <code>jj log --at-op=367400773f87</code> but use the hash from your own
<code>jj op log</code>.</p>
<h2 id="moving-content-changes-between-commits">Moving content changes between commits<a class="headerlink" href="#moving-content-changes-between-commits" title="Permanent link">&para;</a></h2>
<p>You have already seen how <code>jj squash</code> can combine the changes from two commits
into one. There are several other commands for changing the contents of existing
@ -1864,12 +1938,15 @@ few more commits:</p>
Working<span class="w"> </span>copy<span class="w"> </span>now<span class="w"> </span>at:<span class="w"> </span>ztqrpvnw<span class="w"> </span>f94e49cf<span class="w"> </span><span class="o">(</span>empty<span class="o">)</span><span class="w"> </span>abc
Parent<span class="w"> </span>commit<span class="w"> </span>:<span class="w"> </span>orrkosyo<span class="w"> </span>7fd1a60b<span class="w"> </span>master<span class="w"> </span><span class="p">|</span><span class="w"> </span><span class="o">(</span>empty<span class="o">)</span><span class="w"> </span>Merge<span class="w"> </span>pull<span class="w"> </span>request<span class="w"> </span><span class="c1">#6 from Spaceghost/patch-1</span>
Added<span class="w"> </span><span class="m">0</span><span class="w"> </span>files,<span class="w"> </span>modified<span class="w"> </span><span class="m">0</span><span class="w"> </span>files,<span class="w"> </span>removed<span class="w"> </span><span class="m">1</span><span class="w"> </span>files
$<span class="w"> </span>jj<span class="w"> </span>new<span class="w"> </span>-m<span class="w"> </span>ABC<span class="p">;</span><span class="w"> </span><span class="nb">printf</span><span class="w"> </span><span class="s1">&#39;A\nB\nc\n&#39;</span><span class="w"> </span>&gt;<span class="w"> </span>file
Working<span class="w"> </span>copy<span class="w"> </span>now<span class="w"> </span>at:<span class="w"> </span>kwtuwqnm<span class="w"> </span>6f30cd1f<span class="w"> </span><span class="o">(</span>empty<span class="o">)</span><span class="w"> </span>ABC
Parent<span class="w"> </span>commit<span class="w"> </span>:<span class="w"> </span>ztqrpvnw<span class="w"> </span><span class="m">51002261</span><span class="w"> </span>ab
$<span class="w"> </span>jj<span class="w"> </span>new<span class="w"> </span>-m<span class="w"> </span>ABCD<span class="p">;</span><span class="w"> </span><span class="nb">printf</span><span class="w"> </span><span class="s1">&#39;A\nB\nC\nD\n&#39;</span><span class="w"> </span>&gt;<span class="w"> </span>file
Working<span class="w"> </span>copy<span class="w"> </span>now<span class="w"> </span>at:<span class="w"> </span>mrxqplyk<span class="w"> </span>a6749154<span class="w"> </span><span class="o">(</span>empty<span class="o">)</span><span class="w"> </span>ABCD
Parent<span class="w"> </span>commit<span class="w"> </span>:<span class="w"> </span>kwtuwqnm<span class="w"> </span>30aecc08<span class="w"> </span>ABC
$<span class="w"> </span>jj<span class="w"> </span>log<span class="w"> </span>-r<span class="w"> </span>master::@
@<span class="w"> </span>mrxqplyk<span class="w"> </span>martinvonz@google.com<span class="w"> </span><span class="m">2023</span>-02-12<span class="w"> </span><span class="m">19</span>:38:21.000<span class="w"> </span>-08:00<span class="w"> </span>b98c607b
<span class="w"> </span>ABCD
@ -1884,12 +1961,13 @@ $<span class="w"> </span>jj<span class="w"> </span>log<span class="w"> </span>-r
<p>We "forgot" to capitalize "c" in the second commit when we capitalized the other
letters. We then fixed that in the third commit when we also added "D". It would
be cleaner to move the capitalization of "c" into the second commit. We can do
that by running <code>jj squash</code> with the <code>--interactive</code>/<code>-i</code> option on the
third commit. Remember that <code>jj squash</code> moves all the changes from one commit
into its parent. <code>jj squash -i</code> moves only part of the changes into its parent.
Now try that:</p>
that by running <code>jj squash</code> with the <code>--interactive</code>/<code>-i</code> option on the third
commit. Remember that <code>jj squash</code> moves all the changes from one commit into its
parent. <code>jj squash -i</code> moves only part of the changes into its parent. Now try
that:</p>
<div class="highlight"><pre><span></span><code>$<span class="w"> </span>jj<span class="w"> </span>squash<span class="w"> </span>-i
Using<span class="w"> </span>default<span class="w"> </span>editor<span class="w"> </span><span class="s1">&#39;:builtin&#39;</span><span class="p">;</span><span class="w"> </span>you<span class="w"> </span>can<span class="w"> </span>change<span class="w"> </span>this<span class="w"> </span>by<span class="w"> </span>setting<span class="w"> </span>ui.diff-editor
Hint:<span class="w"> </span>Using<span class="w"> </span>default<span class="w"> </span>editor<span class="w"> </span><span class="s1">&#39;:builtin&#39;</span><span class="p">;</span><span class="w"> </span>run<span class="w"> </span><span class="sb">`</span>jj<span class="w"> </span>config<span class="w"> </span><span class="nb">set</span><span class="w"> </span>--user<span class="w"> </span>ui.diff-editor<span class="w"> </span>:builtin<span class="sb">`</span><span class="w"> </span>to<span class="w"> </span>disable<span class="w"> </span>this<span class="w"> </span>message.
Rebased<span class="w"> </span><span class="m">1</span><span class="w"> </span>descendant<span class="w"> </span>commits
Working<span class="w"> </span>copy<span class="w"> </span>now<span class="w"> </span>at:<span class="w"> </span>mrxqplyk<span class="w"> </span>52a6c7fd<span class="w"> </span>ABCD
Parent<span class="w"> </span>commit<span class="w"> </span>:<span class="w"> </span>kwtuwqnm<span class="w"> </span>643061ac<span class="w"> </span>ABC
</code></pre></div>
@ -1899,25 +1977,37 @@ or with right arrow, then select the sections/line to include by clicking or
using space. Once complete, press <code>c</code> to confirm changes, or <code>q</code> to exit without
saving. You can also use the mouse to click on the menu items to see more
options (keyboard navigation is currently limited).</p>
<p>If we look at the diff of the second commit, we now see
that all three lines got capitalized:</p>
<div class="highlight"><pre><span></span><code>$<span class="w"> </span>jj<span class="w"> </span>diff<span class="w"> </span>-r<span class="w"> </span>@-
Modified<span class="w"> </span>regular<span class="w"> </span>file<span class="w"> </span>file:
<span class="w"> </span><span class="m">1</span><span class="w"> </span><span class="m">1</span>:<span class="w"> </span>aA
<span class="w"> </span><span class="m">2</span><span class="w"> </span><span class="m">2</span>:<span class="w"> </span>bB
<span class="w"> </span><span class="m">3</span><span class="w"> </span><span class="m">3</span>:<span class="w"> </span>cC
<p>If we look at the diff of the second commit, we now see that all three lines got
capitalized:</p>
<div class="highlight"><pre><span></span><code>$<span class="w"> </span>jj<span class="w"> </span>diff<span class="w"> </span>-r<span class="w"> </span>@-<span class="w"> </span>--git
diff<span class="w"> </span>--git<span class="w"> </span>a/file<span class="w"> </span>b/file
index<span class="w"> </span>de980441c3..b1e67221af<span class="w"> </span><span class="m">100644</span>
---<span class="w"> </span>a/file
+++<span class="w"> </span>b/file
@@<span class="w"> </span>-1,3<span class="w"> </span>+1,3<span class="w"> </span>@@
-a
-b
-c
+A
+B
+C
</code></pre></div>
<p>The child change ("ABCD" in our case) will have the same content <em>state</em> after
the <code>jj squash</code> command. That means that you can move any changes you want into
the parent change, even if they touch the same word, and it won't cause any
conflicts.</p>
<p>Let's try one final command for changing the contents of an exiting commit. That
command is <code>jj diffedit</code>, which lets you edit the contents of a commit without
command is <code>jj diffedit</code>, which lets you edit the changes in a commit without
checking it out.</p>
<div class="highlight"><pre><span></span><code>$<span class="w"> </span>jj<span class="w"> </span>diffedit<span class="w"> </span>-r<span class="w"> </span>@-
Using<span class="w"> </span>default<span class="w"> </span>editor<span class="w"> </span><span class="s1">&#39;:builtin&#39;</span><span class="p">;</span><span class="w"> </span>you<span class="w"> </span>can<span class="w"> </span>change<span class="w"> </span>this<span class="w"> </span>by<span class="w"> </span>setting<span class="w"> </span>ui.diff-editor
Hint:<span class="w"> </span>Using<span class="w"> </span>default<span class="w"> </span>editor<span class="w"> </span><span class="s1">&#39;:builtin&#39;</span><span class="p">;</span><span class="w"> </span>run<span class="w"> </span><span class="sb">`</span>jj<span class="w"> </span>config<span class="w"> </span><span class="nb">set</span><span class="w"> </span>--user<span class="w"> </span>ui.diff-editor<span class="w"> </span>:builtin<span class="sb">`</span><span class="w"> </span>to<span class="w"> </span>disable<span class="w"> </span>this<span class="w"> </span>message.
Created<span class="w"> </span>kwtuwqnm<span class="w"> </span>70985eaa<span class="w"> </span><span class="o">(</span>empty<span class="o">)</span><span class="w"> </span>ABC
Rebased<span class="w"> </span><span class="m">1</span><span class="w"> </span>descendant<span class="w"> </span>commits
Working<span class="w"> </span>copy<span class="w"> </span>now<span class="w"> </span>at:<span class="w"> </span>mrxqplyk<span class="w"> </span>1c72cd50<span class="w"> </span><span class="o">(</span>conflict<span class="o">)</span><span class="w"> </span>ABCD
Parent<span class="w"> </span>commit<span class="w"> </span>:<span class="w"> </span>kwtuwqnm<span class="w"> </span>70985eaa<span class="w"> </span><span class="o">(</span>empty<span class="o">)</span><span class="w"> </span>ABC
Added<span class="w"> </span><span class="m">0</span><span class="w"> </span>files,<span class="w"> </span>modified<span class="w"> </span><span class="m">1</span><span class="w"> </span>files,<span class="w"> </span>removed<span class="w"> </span><span class="m">0</span><span class="w"> </span>files
There<span class="w"> </span>are<span class="w"> </span>unresolved<span class="w"> </span>conflicts<span class="w"> </span>at<span class="w"> </span>these<span class="w"> </span>paths:
file<span class="w"> </span><span class="m">2</span>-sided<span class="w"> </span>conflict
New<span class="w"> </span>conflicts<span class="w"> </span>appeared<span class="w"> </span><span class="k">in</span><span class="w"> </span>these<span class="w"> </span>commits:
<span class="w"> </span>mrxqplyk<span class="w"> </span>1c72cd50<span class="w"> </span><span class="o">(</span>conflict<span class="o">)</span><span class="w"> </span>ABCD
To<span class="w"> </span>resolve<span class="w"> </span>the<span class="w"> </span>conflicts,<span class="w"> </span>start<span class="w"> </span>by<span class="w"> </span>updating<span class="w"> </span>to<span class="w"> </span>it:
@ -1925,19 +2015,16 @@ To<span class="w"> </span>resolve<span class="w"> </span>the<span class="w"> </s
Then<span class="w"> </span>use<span class="w"> </span><span class="sb">`</span>jj<span class="w"> </span>resolve<span class="sb">`</span>,<span class="w"> </span>or<span class="w"> </span>edit<span class="w"> </span>the<span class="w"> </span>conflict<span class="w"> </span>markers<span class="w"> </span><span class="k">in</span><span class="w"> </span>the<span class="w"> </span>file<span class="w"> </span>directly.
Once<span class="w"> </span>the<span class="w"> </span>conflicts<span class="w"> </span>are<span class="w"> </span>resolved,<span class="w"> </span>you<span class="w"> </span>may<span class="w"> </span>want<span class="w"> </span>to<span class="w"> </span>inspect<span class="w"> </span>the<span class="w"> </span>result<span class="w"> </span>with<span class="w"> </span><span class="sb">`</span>jj<span class="w"> </span>diff<span class="sb">`</span>.
Then<span class="w"> </span>run<span class="w"> </span><span class="sb">`</span>jj<span class="w"> </span>squash<span class="sb">`</span><span class="w"> </span>to<span class="w"> </span>move<span class="w"> </span>the<span class="w"> </span>resolution<span class="w"> </span>into<span class="w"> </span>the<span class="w"> </span>conflicted<span class="w"> </span>commit.
Working<span class="w"> </span>copy<span class="w"> </span>now<span class="w"> </span>at:<span class="w"> </span>mrxqplyk<span class="w"> </span>1c72cd50<span class="w"> </span><span class="o">(</span>conflict<span class="o">)</span><span class="w"> </span>ABCD
Parent<span class="w"> </span>commit<span class="w"> </span>:<span class="w"> </span>kwtuwqnm<span class="w"> </span>70985eaa<span class="w"> </span><span class="o">(</span>empty<span class="o">)</span><span class="w"> </span>ABC
Added<span class="w"> </span><span class="m">0</span><span class="w"> </span>files,<span class="w"> </span>modified<span class="w"> </span><span class="m">1</span><span class="w"> </span>files,<span class="w"> </span>removed<span class="w"> </span><span class="m">0</span><span class="w"> </span>files
</code></pre></div>
<p>In the diff editor, edit the right side by e.g. adding something to the first
line. Press 'c' to save the changes and close it. You can now inspect the rewritten
commit with <code>jj diff -r @-</code> again and you should see your addition to the first
line. Unlike <code>jj squash -i</code>, which left the content state of the commit
<p>In the diff editor, use the arrow keys and spacebar to select all lines but the
last. Press 'c' to save the changes and close it. You can now inspect the
rewritten commit with <code>jj diff -r @-</code> again, and you should see your deletion of
the last line. Unlike <code>jj squash -i</code>, which left the content state of the commit
unchanged, <code>jj diffedit</code> (typically) results in a different state, which means
that descendant commits may have conflicts.</p>
<p>Another command for rewriting contents of existing commits is <code>jj split</code>. Now that
you've seen how <code>jj squash -i</code> and <code>jj diffedit</code> work, you can hopefully figure out
how it works (with the help of the instructions in the diff).</p>
<p>Another command for rewriting contents of existing commits is <code>jj split</code>. Now
that you've seen how <code>jj squash -i</code> and <code>jj diffedit</code> work, you can hopefully
figure out how it works (with the help of the instructions in the diff).</p>
<div class="footnote">
<hr />
<ol>

View File

@ -1241,27 +1241,6 @@
<li class="md-nav__item">
<a href="../roadmap/" class="md-nav__link">
<span class="md-ellipsis">
Roadmap
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../design/git-submodules/" class="md-nav__link">
@ -1389,6 +1368,26 @@
<li class="md-nav__item">
<a href="../roadmap/" class="md-nav__link">
<span class="md-ellipsis">
Development Roadmap
</span>
</a>
</li>
</ul>
</nav>
</div>

View File

@ -1241,27 +1241,6 @@
<li class="md-nav__item">
<a href="../roadmap/" class="md-nav__link">
<span class="md-ellipsis">
Roadmap
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../design/git-submodules/" class="md-nav__link">
@ -1389,6 +1368,26 @@
<li class="md-nav__item">
<a href="../roadmap/" class="md-nav__link">
<span class="md-ellipsis">
Development Roadmap
</span>
</a>
</li>
</ul>
</nav>
</div>

1363
v0.24.0/404.html Normal file

File diff suppressed because it is too large Load Diff

2060
v0.24.0/FAQ/index.html Normal file

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,18 @@
/*!
* Lunr languages, `Danish` language
* https://github.com/MihaiValentin/lunr-languages
*
* Copyright 2014, Mihai Valentin
* http://www.mozilla.org/MPL/
*/
/*!
* based on
* Snowball JavaScript Library v0.3
* http://code.google.com/p/urim/
* http://snowball.tartarus.org/
*
* Copyright 2010, Oleg Mazko
* http://www.mozilla.org/MPL/
*/
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.da=function(){this.pipeline.reset(),this.pipeline.add(e.da.trimmer,e.da.stopWordFilter,e.da.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.da.stemmer))},e.da.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA--",e.da.trimmer=e.trimmerSupport.generateTrimmer(e.da.wordCharacters),e.Pipeline.registerFunction(e.da.trimmer,"trimmer-da"),e.da.stemmer=function(){var r=e.stemmerSupport.Among,i=e.stemmerSupport.SnowballProgram,n=new function(){function e(){var e,r=f.cursor+3;if(d=f.limit,0<=r&&r<=f.limit){for(a=r;;){if(e=f.cursor,f.in_grouping(w,97,248)){f.cursor=e;break}if(f.cursor=e,e>=f.limit)return;f.cursor++}for(;!f.out_grouping(w,97,248);){if(f.cursor>=f.limit)return;f.cursor++}d=f.cursor,d<a&&(d=a)}}function n(){var e,r;if(f.cursor>=d&&(r=f.limit_backward,f.limit_backward=d,f.ket=f.cursor,e=f.find_among_b(c,32),f.limit_backward=r,e))switch(f.bra=f.cursor,e){case 1:f.slice_del();break;case 2:f.in_grouping_b(p,97,229)&&f.slice_del()}}function t(){var e,r=f.limit-f.cursor;f.cursor>=d&&(e=f.limit_backward,f.limit_backward=d,f.ket=f.cursor,f.find_among_b(l,4)?(f.bra=f.cursor,f.limit_backward=e,f.cursor=f.limit-r,f.cursor>f.limit_backward&&(f.cursor--,f.bra=f.cursor,f.slice_del())):f.limit_backward=e)}function s(){var e,r,i,n=f.limit-f.cursor;if(f.ket=f.cursor,f.eq_s_b(2,"st")&&(f.bra=f.cursor,f.eq_s_b(2,"ig")&&f.slice_del()),f.cursor=f.limit-n,f.cursor>=d&&(r=f.limit_backward,f.limit_backward=d,f.ket=f.cursor,e=f.find_among_b(m,5),f.limit_backward=r,e))switch(f.bra=f.cursor,e){case 1:f.slice_del(),i=f.limit-f.cursor,t(),f.cursor=f.limit-i;break;case 2:f.slice_from("løs")}}function o(){var e;f.cursor>=d&&(e=f.limit_backward,f.limit_backward=d,f.ket=f.cursor,f.out_grouping_b(w,97,248)?(f.bra=f.cursor,u=f.slice_to(u),f.limit_backward=e,f.eq_v_b(u)&&f.slice_del()):f.limit_backward=e)}var a,d,u,c=[new r("hed",-1,1),new r("ethed",0,1),new r("ered",-1,1),new r("e",-1,1),new r("erede",3,1),new r("ende",3,1),new r("erende",5,1),new r("ene",3,1),new r("erne",3,1),new r("ere",3,1),new r("en",-1,1),new r("heden",10,1),new r("eren",10,1),new r("er",-1,1),new r("heder",13,1),new r("erer",13,1),new r("s",-1,2),new r("heds",16,1),new r("es",16,1),new r("endes",18,1),new r("erendes",19,1),new r("enes",18,1),new r("ernes",18,1),new r("eres",18,1),new r("ens",16,1),new r("hedens",24,1),new r("erens",24,1),new r("ers",16,1),new r("ets",16,1),new r("erets",28,1),new r("et",-1,1),new r("eret",30,1)],l=[new r("gd",-1,-1),new r("dt",-1,-1),new r("gt",-1,-1),new r("kt",-1,-1)],m=[new r("ig",-1,1),new r("lig",0,1),new r("elig",1,1),new r("els",-1,1),new r("løst",-1,2)],w=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,48,0,128],p=[239,254,42,3,0,0,0,0,0,0,0,0,0,0,0,0,16],f=new i;this.setCurrent=function(e){f.setCurrent(e)},this.getCurrent=function(){return f.getCurrent()},this.stem=function(){var r=f.cursor;return e(),f.limit_backward=r,f.cursor=f.limit,n(),f.cursor=f.limit,t(),f.cursor=f.limit,s(),f.cursor=f.limit,o(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return n.setCurrent(e),n.stem(),n.getCurrent()}):(n.setCurrent(e),n.stem(),n.getCurrent())}}(),e.Pipeline.registerFunction(e.da.stemmer,"stemmer-da"),e.da.stopWordFilter=e.generateStopWordFilter("ad af alle alt anden at blev blive bliver da de dem den denne der deres det dette dig din disse dog du efter eller en end er et for fra ham han hans har havde have hende hendes her hos hun hvad hvis hvor i ikke ind jeg jer jo kunne man mange med meget men mig min mine mit mod ned noget nogle nu når og også om op os over på selv sig sin sine sit skal skulle som sådan thi til ud under var vi vil ville vor være været".split(" ")),e.Pipeline.registerFunction(e.da.stopWordFilter,"stopWordFilter-da")}});

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.hi=function(){this.pipeline.reset(),this.pipeline.add(e.hi.trimmer,e.hi.stopWordFilter,e.hi.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.hi.stemmer))},e.hi.wordCharacters="ऀ-ःऄ-एऐ-टठ-यर-िी-ॏॐ-य़ॠ-९॰-ॿa-zA-Z--0-9-",e.hi.trimmer=e.trimmerSupport.generateTrimmer(e.hi.wordCharacters),e.Pipeline.registerFunction(e.hi.trimmer,"trimmer-hi"),e.hi.stopWordFilter=e.generateStopWordFilter("अत अपना अपनी अपने अभी अंदर आदि आप इत्यादि इन इनका इन्हीं इन्हें इन्हों इस इसका इसकी इसके इसमें इसी इसे उन उनका उनकी उनके उनको उन्हीं उन्हें उन्हों उस उसके उसी उसे एक एवं एस ऐसे और कई कर करता करते करना करने करें कहते कहा का काफ़ी कि कितना किन्हें किन्हों किया किर किस किसी किसे की कुछ कुल के को कोई कौन कौनसा गया घर जब जहाँ जा जितना जिन जिन्हें जिन्हों जिस जिसे जीधर जैसा जैसे जो तक तब तरह तिन तिन्हें तिन्हों तिस तिसे तो था थी थे दबारा दिया दुसरा दूसरे दो द्वारा न नके नहीं ना निहायत नीचे ने पर पहले पूरा पे फिर बनी बही बहुत बाद बाला बिलकुल भी भीतर मगर मानो मे में यदि यह यहाँ यही या यिह ये रखें रहा रहे ऱ्वासा लिए लिये लेकिन व वग़ैरह वर्ग वह वहाँ वहीं वाले वुह वे वो सकता सकते सबसे सभी साथ साबुत साभ सारा से सो संग ही हुआ हुई हुए है हैं हो होता होती होते होना होने".split(" ")),e.hi.stemmer=function(){return function(e){return"function"==typeof e.update?e.update(function(e){return e}):e}}();var r=e.wordcut;r.init(),e.hi.tokenizer=function(i){if(!arguments.length||null==i||void 0==i)return[];if(Array.isArray(i))return i.map(function(r){return isLunr2?new e.Token(r.toLowerCase()):r.toLowerCase()});var t=i.toString().toLowerCase().replace(/^\s+/,"");return r.cut(t).split("|")},e.Pipeline.registerFunction(e.hi.stemmer,"stemmer-hi"),e.Pipeline.registerFunction(e.hi.stopWordFilter,"stopWordFilter-hi")}});

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.hy=function(){this.pipeline.reset(),this.pipeline.add(e.hy.trimmer,e.hy.stopWordFilter)},e.hy.wordCharacters="[A-Za-z԰-֏ff-ﭏ]",e.hy.trimmer=e.trimmerSupport.generateTrimmer(e.hy.wordCharacters),e.Pipeline.registerFunction(e.hy.trimmer,"trimmer-hy"),e.hy.stopWordFilter=e.generateStopWordFilter("դու և եք էիր էիք հետո նաև նրանք որը վրա է որ պիտի են այս մեջ ն իր ու ի այդ որոնք այն կամ էր մի ես համար այլ իսկ էին ենք հետ ին թ էինք մենք նրա նա դուք եմ էի ըստ որպես ում".split(" ")),e.Pipeline.registerFunction(e.hy.stopWordFilter,"stopWordFilter-hy"),e.hy.stemmer=function(){return function(e){return"function"==typeof e.update?e.update(function(e){return e}):e}}(),e.Pipeline.registerFunction(e.hy.stemmer,"stemmer-hy")}});

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var r="2"==e.version[0];e.ja=function(){this.pipeline.reset(),this.pipeline.add(e.ja.trimmer,e.ja.stopWordFilter,e.ja.stemmer),r?this.tokenizer=e.ja.tokenizer:(e.tokenizer&&(e.tokenizer=e.ja.tokenizer),this.tokenizerFn&&(this.tokenizerFn=e.ja.tokenizer))};var t=new e.TinySegmenter;e.ja.tokenizer=function(i){var n,o,s,p,a,u,m,l,c,f;if(!arguments.length||null==i||void 0==i)return[];if(Array.isArray(i))return i.map(function(t){return r?new e.Token(t.toLowerCase()):t.toLowerCase()});for(o=i.toString().toLowerCase().replace(/^\s+/,""),n=o.length-1;n>=0;n--)if(/\S/.test(o.charAt(n))){o=o.substring(0,n+1);break}for(a=[],s=o.length,c=0,l=0;c<=s;c++)if(u=o.charAt(c),m=c-l,u.match(/\s/)||c==s){if(m>0)for(p=t.segment(o.slice(l,c)).filter(function(e){return!!e}),f=l,n=0;n<p.length;n++)r?a.push(new e.Token(p[n],{position:[f,p[n].length],index:a.length})):a.push(p[n]),f+=p[n].length;l=c+1}return a},e.ja.stemmer=function(){return function(e){return e}}(),e.Pipeline.registerFunction(e.ja.stemmer,"stemmer-ja"),e.ja.wordCharacters="一二三四五六七八九十百千万億兆一-龠々〆ヵヶぁ-んァ-ヴーア-ン゙a-zA-Z--0-9-",e.ja.trimmer=e.trimmerSupport.generateTrimmer(e.ja.wordCharacters),e.Pipeline.registerFunction(e.ja.trimmer,"trimmer-ja"),e.ja.stopWordFilter=e.generateStopWordFilter("これ それ あれ この その あの ここ そこ あそこ こちら どこ だれ なに なん 何 私 貴方 貴方方 我々 私達 あの人 あのかた 彼女 彼 です あります おります います は が の に を で え から まで より も どの と し それで しかし".split(" ")),e.Pipeline.registerFunction(e.ja.stopWordFilter,"stopWordFilter-ja"),e.jp=e.ja,e.Pipeline.registerFunction(e.jp.stemmer,"stemmer-jp"),e.Pipeline.registerFunction(e.jp.trimmer,"trimmer-jp"),e.Pipeline.registerFunction(e.jp.stopWordFilter,"stopWordFilter-jp")}});

View File

@ -0,0 +1 @@
module.exports=require("./lunr.ja");

View File

@ -0,0 +1 @@
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.kn=function(){this.pipeline.reset(),this.pipeline.add(e.kn.trimmer,e.kn.stopWordFilter,e.kn.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.kn.stemmer))},e.kn.wordCharacters="ಀ-಄ಅ-ಔಕ-ಹಾ-ೌ಼-ಽೕ-ೖೝ-ೞೠ-ೡೢ-ೣ೤೥೦-೯ೱ-ೳ",e.kn.trimmer=e.trimmerSupport.generateTrimmer(e.kn.wordCharacters),e.Pipeline.registerFunction(e.kn.trimmer,"trimmer-kn"),e.kn.stopWordFilter=e.generateStopWordFilter("ಮತ್ತು ಈ ಒಂದು ರಲ್ಲಿ ಹಾಗೂ ಎಂದು ಅಥವಾ ಇದು ರ ಅವರು ಎಂಬ ಮೇಲೆ ಅವರ ತನ್ನ ಆದರೆ ತಮ್ಮ ನಂತರ ಮೂಲಕ ಹೆಚ್ಚು ನ ಆ ಕೆಲವು ಅನೇಕ ಎರಡು ಹಾಗು ಪ್ರಮುಖ ಇದನ್ನು ಇದರ ಸುಮಾರು ಅದರ ಅದು ಮೊದಲ ಬಗ್ಗೆ ನಲ್ಲಿ ರಂದು ಇತರ ಅತ್ಯಂತ ಹೆಚ್ಚಿನ ಸಹ ಸಾಮಾನ್ಯವಾಗಿ ನೇ ಹಲವಾರು ಹೊಸ ದಿ ಕಡಿಮೆ ಯಾವುದೇ ಹೊಂದಿದೆ ದೊಡ್ಡ ಅನ್ನು ಇವರು ಪ್ರಕಾರ ಇದೆ ಮಾತ್ರ ಕೂಡ ಇಲ್ಲಿ ಎಲ್ಲಾ ವಿವಿಧ ಅದನ್ನು ಹಲವು ರಿಂದ ಕೇವಲ ದ ದಕ್ಷಿಣ ಗೆ ಅವನ ಅತಿ ನೆಯ ಬಹಳ ಕೆಲಸ ಎಲ್ಲ ಪ್ರತಿ ಇತ್ಯಾದಿ ಇವು ಬೇರೆ ಹೀಗೆ ನಡುವೆ ಇದಕ್ಕೆ ಎಸ್ ಇವರ ಮೊದಲು ಶ್ರೀ ಮಾಡುವ ಇದರಲ್ಲಿ ರೀತಿಯ ಮಾಡಿದ ಕಾಲ ಅಲ್ಲಿ ಮಾಡಲು ಅದೇ ಈಗ ಅವು ಗಳು ಎ ಎಂಬುದು ಅವನು ಅಂದರೆ ಅವರಿಗೆ ಇರುವ ವಿಶೇಷ ಮುಂದೆ ಅವುಗಳ ಮುಂತಾದ ಮೂಲ ಬಿ ಮೀ ಒಂದೇ ಇನ್ನೂ ಹೆಚ್ಚಾಗಿ ಮಾಡಿ ಅವರನ್ನು ಇದೇ ಯ ರೀತಿಯಲ್ಲಿ ಜೊತೆ ಅದರಲ್ಲಿ ಮಾಡಿದರು ನಡೆದ ಆಗ ಮತ್ತೆ ಪೂರ್ವ ಆತ ಬಂದ ಯಾವ ಒಟ್ಟು ಇತರೆ ಹಿಂದೆ ಪ್ರಮಾಣದ ಗಳನ್ನು ಕುರಿತು ಯು ಆದ್ದರಿಂದ ಅಲ್ಲದೆ ನಗರದ ಮೇಲಿನ ಏಕೆಂದರೆ ರಷ್ಟು ಎಂಬುದನ್ನು ಬಾರಿ ಎಂದರೆ ಹಿಂದಿನ ಆದರೂ ಆದ ಸಂಬಂಧಿಸಿದ ಮತ್ತೊಂದು ಸಿ ಆತನ ".split(" ")),e.kn.stemmer=function(){return function(e){return"function"==typeof e.update?e.update(function(e){return e}):e}}();var r=e.wordcut;r.init(),e.kn.tokenizer=function(t){if(!arguments.length||null==t||void 0==t)return[];if(Array.isArray(t))return t.map(function(r){return isLunr2?new e.Token(r.toLowerCase()):r.toLowerCase()});var n=t.toString().toLowerCase().replace(/^\s+/,"");return r.cut(n).split("|")},e.Pipeline.registerFunction(e.kn.stemmer,"stemmer-kn"),e.Pipeline.registerFunction(e.kn.stopWordFilter,"stopWordFilter-kn")}});

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
!function(e,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():t()(e.lunr)}(this,function(){return function(e){e.multiLanguage=function(){for(var t=Array.prototype.slice.call(arguments),i=t.join("-"),r="",n=[],s=[],p=0;p<t.length;++p)"en"==t[p]?(r+="\\w",n.unshift(e.stopWordFilter),n.push(e.stemmer),s.push(e.stemmer)):(r+=e[t[p]].wordCharacters,e[t[p]].stopWordFilter&&n.unshift(e[t[p]].stopWordFilter),e[t[p]].stemmer&&(n.push(e[t[p]].stemmer),s.push(e[t[p]].stemmer)));var o=e.trimmerSupport.generateTrimmer(r);return e.Pipeline.registerFunction(o,"lunr-multi-trimmer-"+i),n.unshift(o),function(){this.pipeline.reset(),this.pipeline.add.apply(this.pipeline,n),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add.apply(this.searchPipeline,s))}}}});

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,18 @@
/*!
* Lunr languages, `Norwegian` language
* https://github.com/MihaiValentin/lunr-languages
*
* Copyright 2014, Mihai Valentin
* http://www.mozilla.org/MPL/
*/
/*!
* based on
* Snowball JavaScript Library v0.3
* http://code.google.com/p/urim/
* http://snowball.tartarus.org/
*
* Copyright 2010, Oleg Mazko
* http://www.mozilla.org/MPL/
*/
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.no=function(){this.pipeline.reset(),this.pipeline.add(e.no.trimmer,e.no.stopWordFilter,e.no.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.no.stemmer))},e.no.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA--",e.no.trimmer=e.trimmerSupport.generateTrimmer(e.no.wordCharacters),e.Pipeline.registerFunction(e.no.trimmer,"trimmer-no"),e.no.stemmer=function(){var r=e.stemmerSupport.Among,n=e.stemmerSupport.SnowballProgram,i=new function(){function e(){var e,r=w.cursor+3;if(a=w.limit,0<=r||r<=w.limit){for(s=r;;){if(e=w.cursor,w.in_grouping(d,97,248)){w.cursor=e;break}if(e>=w.limit)return;w.cursor=e+1}for(;!w.out_grouping(d,97,248);){if(w.cursor>=w.limit)return;w.cursor++}a=w.cursor,a<s&&(a=s)}}function i(){var e,r,n;if(w.cursor>=a&&(r=w.limit_backward,w.limit_backward=a,w.ket=w.cursor,e=w.find_among_b(m,29),w.limit_backward=r,e))switch(w.bra=w.cursor,e){case 1:w.slice_del();break;case 2:n=w.limit-w.cursor,w.in_grouping_b(c,98,122)?w.slice_del():(w.cursor=w.limit-n,w.eq_s_b(1,"k")&&w.out_grouping_b(d,97,248)&&w.slice_del());break;case 3:w.slice_from("er")}}function t(){var e,r=w.limit-w.cursor;w.cursor>=a&&(e=w.limit_backward,w.limit_backward=a,w.ket=w.cursor,w.find_among_b(u,2)?(w.bra=w.cursor,w.limit_backward=e,w.cursor=w.limit-r,w.cursor>w.limit_backward&&(w.cursor--,w.bra=w.cursor,w.slice_del())):w.limit_backward=e)}function o(){var e,r;w.cursor>=a&&(r=w.limit_backward,w.limit_backward=a,w.ket=w.cursor,e=w.find_among_b(l,11),e?(w.bra=w.cursor,w.limit_backward=r,1==e&&w.slice_del()):w.limit_backward=r)}var s,a,m=[new r("a",-1,1),new r("e",-1,1),new r("ede",1,1),new r("ande",1,1),new r("ende",1,1),new r("ane",1,1),new r("ene",1,1),new r("hetene",6,1),new r("erte",1,3),new r("en",-1,1),new r("heten",9,1),new r("ar",-1,1),new r("er",-1,1),new r("heter",12,1),new r("s",-1,2),new r("as",14,1),new r("es",14,1),new r("edes",16,1),new r("endes",16,1),new r("enes",16,1),new r("hetenes",19,1),new r("ens",14,1),new r("hetens",21,1),new r("ers",14,1),new r("ets",14,1),new r("et",-1,1),new r("het",25,1),new r("ert",-1,3),new r("ast",-1,1)],u=[new r("dt",-1,-1),new r("vt",-1,-1)],l=[new r("leg",-1,1),new r("eleg",0,1),new r("ig",-1,1),new r("eig",2,1),new r("lig",2,1),new r("elig",4,1),new r("els",-1,1),new r("lov",-1,1),new r("elov",7,1),new r("slov",7,1),new r("hetslov",9,1)],d=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,48,0,128],c=[119,125,149,1],w=new n;this.setCurrent=function(e){w.setCurrent(e)},this.getCurrent=function(){return w.getCurrent()},this.stem=function(){var r=w.cursor;return e(),w.limit_backward=r,w.cursor=w.limit,i(),w.cursor=w.limit,t(),w.cursor=w.limit,o(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return i.setCurrent(e),i.stem(),i.getCurrent()}):(i.setCurrent(e),i.stem(),i.getCurrent())}}(),e.Pipeline.registerFunction(e.no.stemmer,"stemmer-no"),e.no.stopWordFilter=e.generateStopWordFilter("alle at av bare begge ble blei bli blir blitt både båe da de deg dei deim deira deires dem den denne der dere deres det dette di din disse ditt du dykk dykkar då eg ein eit eitt eller elles en enn er et ett etter for fordi fra før ha hadde han hans har hennar henne hennes her hjå ho hoe honom hoss hossen hun hva hvem hver hvilke hvilken hvis hvor hvordan hvorfor i ikke ikkje ikkje ingen ingi inkje inn inni ja jeg kan kom korleis korso kun kunne kva kvar kvarhelst kven kvi kvifor man mange me med medan meg meget mellom men mi min mine mitt mot mykje ned no noe noen noka noko nokon nokor nokre nå når og også om opp oss over på samme seg selv si si sia sidan siden sin sine sitt sjøl skal skulle slik so som som somme somt så sånn til um upp ut uten var vart varte ved vere verte vi vil ville vore vors vort vår være være vært å".split(" ")),e.Pipeline.registerFunction(e.no.stopWordFilter,"stopWordFilter-no")}});

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.sa=function(){this.pipeline.reset(),this.pipeline.add(e.sa.trimmer,e.sa.stopWordFilter,e.sa.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.sa.stemmer))},e.sa.wordCharacters="ऀ-ःऄ-एऐ-टठ-यर-िी-ॏॐ-य़ॠ-९॰-ॿ꣠-꣱ꣲ-ꣷ꣸-ꣻ꣼-ꣽꣾ-ꣿᆰ0-ᆰ9",e.sa.trimmer=e.trimmerSupport.generateTrimmer(e.sa.wordCharacters),e.Pipeline.registerFunction(e.sa.trimmer,"trimmer-sa"),e.sa.stopWordFilter=e.generateStopWordFilter('तथा अयम्‌ एकम्‌ इत्यस्मिन्‌ तथा तत्‌ वा अयम्‌ इत्यस्य ते आहूत उपरि तेषाम्‌ किन्तु तेषाम्‌ तदा इत्यनेन अधिकः इत्यस्य तत्‌ केचन बहवः द्वि तथा महत्वपूर्णः अयम्‌ अस्य विषये अयं अस्ति तत्‌ प्रथमः विषये इत्युपरि इत्युपरि इतर अधिकतमः अधिकः अपि सामान्यतया ठ इतरेतर नूतनम्‌ द न्यूनम्‌ कश्चित्‌ वा विशालः द सः अस्ति तदनुसारम् तत्र अस्ति केवलम्‌ अपि अत्र सर्वे विविधाः तत्‌ बहवः यतः इदानीम्‌ द दक्षिण इत्यस्मै तस्य उपरि नथ अतीव कार्यम्‌ सर्वे एकैकम्‌ इत्यादि। एते सन्ति उत इत्थम्‌ मध्ये एतदर्थं . स कस्य प्रथमः श्री. करोति अस्मिन् प्रकारः निर्मिता कालः तत्र कर्तुं समान अधुना ते सन्ति स एकः अस्ति सः अर्थात् तेषां कृते . स्थितम् विशेषः अग्रिम तेषाम्‌ समान स्रोतः ख म समान इदानीमपि अधिकतया करोतु ते समान इत्यस्य वीथी सह यस्मिन् कृतवान्‌ धृतः तदा पुनः पूर्वं सः आगतः किम्‌ कुल इतर पुरा मात्रा स विषये उ अतएव अपि नगरस्य उपरि यतः प्रतिशतं कतरः कालः साधनानि भूत तथापि जात सम्बन्धि अन्यत्‌ ग अतः अस्माकं स्वकीयाः अस्माकं इदानीं अन्तः इत्यादयः भवन्तः इत्यादयः एते एताः तस्य अस्य इदम् एते तेषां तेषां तेषां तान् तेषां तेषां तेषां समानः सः एकः च तादृशाः बहवः अन्ये च वदन्ति यत् कियत् कस्मै कस्मै यस्मै यस्मै यस्मै यस्मै न अतिनीचः किन्तु प्रथमं सम्पूर्णतया ततः चिरकालानन्तरं पुस्तकं सम्पूर्णतया अन्तः किन्तु अत्र वा इह इव श्रद्धाय अवशिष्यते परन्तु अन्ये वर्गाः सन्ति ते सन्ति शक्नुवन्ति सर्वे मिलित्वा सर्वे एकत्र"'.split(" ")),e.sa.stemmer=function(){return function(e){return"function"==typeof e.update?e.update(function(e){return e}):e}}();var r=e.wordcut;r.init(),e.sa.tokenizer=function(t){if(!arguments.length||null==t||void 0==t)return[];if(Array.isArray(t))return t.map(function(r){return isLunr2?new e.Token(r.toLowerCase()):r.toLowerCase()});var i=t.toString().toLowerCase().replace(/^\s+/,"");return r.cut(i).split("|")},e.Pipeline.registerFunction(e.sa.stemmer,"stemmer-sa"),e.Pipeline.registerFunction(e.sa.stopWordFilter,"stopWordFilter-sa")}});

View File

@ -0,0 +1 @@
!function(r,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():t()(r.lunr)}(this,function(){return function(r){r.stemmerSupport={Among:function(r,t,i,s){if(this.toCharArray=function(r){for(var t=r.length,i=new Array(t),s=0;s<t;s++)i[s]=r.charCodeAt(s);return i},!r&&""!=r||!t&&0!=t||!i)throw"Bad Among initialisation: s:"+r+", substring_i: "+t+", result: "+i;this.s_size=r.length,this.s=this.toCharArray(r),this.substring_i=t,this.result=i,this.method=s},SnowballProgram:function(){var r;return{bra:0,ket:0,limit:0,cursor:0,limit_backward:0,setCurrent:function(t){r=t,this.cursor=0,this.limit=t.length,this.limit_backward=0,this.bra=this.cursor,this.ket=this.limit},getCurrent:function(){var t=r;return r=null,t},in_grouping:function(t,i,s){if(this.cursor<this.limit){var e=r.charCodeAt(this.cursor);if(e<=s&&e>=i&&(e-=i,t[e>>3]&1<<(7&e)))return this.cursor++,!0}return!1},in_grouping_b:function(t,i,s){if(this.cursor>this.limit_backward){var e=r.charCodeAt(this.cursor-1);if(e<=s&&e>=i&&(e-=i,t[e>>3]&1<<(7&e)))return this.cursor--,!0}return!1},out_grouping:function(t,i,s){if(this.cursor<this.limit){var e=r.charCodeAt(this.cursor);if(e>s||e<i)return this.cursor++,!0;if(e-=i,!(t[e>>3]&1<<(7&e)))return this.cursor++,!0}return!1},out_grouping_b:function(t,i,s){if(this.cursor>this.limit_backward){var e=r.charCodeAt(this.cursor-1);if(e>s||e<i)return this.cursor--,!0;if(e-=i,!(t[e>>3]&1<<(7&e)))return this.cursor--,!0}return!1},eq_s:function(t,i){if(this.limit-this.cursor<t)return!1;for(var s=0;s<t;s++)if(r.charCodeAt(this.cursor+s)!=i.charCodeAt(s))return!1;return this.cursor+=t,!0},eq_s_b:function(t,i){if(this.cursor-this.limit_backward<t)return!1;for(var s=0;s<t;s++)if(r.charCodeAt(this.cursor-t+s)!=i.charCodeAt(s))return!1;return this.cursor-=t,!0},find_among:function(t,i){for(var s=0,e=i,n=this.cursor,u=this.limit,o=0,h=0,c=!1;;){for(var a=s+(e-s>>1),f=0,l=o<h?o:h,_=t[a],m=l;m<_.s_size;m++){if(n+l==u){f=-1;break}if(f=r.charCodeAt(n+l)-_.s[m])break;l++}if(f<0?(e=a,h=l):(s=a,o=l),e-s<=1){if(s>0||e==s||c)break;c=!0}}for(;;){var _=t[s];if(o>=_.s_size){if(this.cursor=n+_.s_size,!_.method)return _.result;var b=_.method();if(this.cursor=n+_.s_size,b)return _.result}if((s=_.substring_i)<0)return 0}},find_among_b:function(t,i){for(var s=0,e=i,n=this.cursor,u=this.limit_backward,o=0,h=0,c=!1;;){for(var a=s+(e-s>>1),f=0,l=o<h?o:h,_=t[a],m=_.s_size-1-l;m>=0;m--){if(n-l==u){f=-1;break}if(f=r.charCodeAt(n-1-l)-_.s[m])break;l++}if(f<0?(e=a,h=l):(s=a,o=l),e-s<=1){if(s>0||e==s||c)break;c=!0}}for(;;){var _=t[s];if(o>=_.s_size){if(this.cursor=n-_.s_size,!_.method)return _.result;var b=_.method();if(this.cursor=n-_.s_size,b)return _.result}if((s=_.substring_i)<0)return 0}},replace_s:function(t,i,s){var e=s.length-(i-t),n=r.substring(0,t),u=r.substring(i);return r=n+s+u,this.limit+=e,this.cursor>=i?this.cursor+=e:this.cursor>t&&(this.cursor=t),e},slice_check:function(){if(this.bra<0||this.bra>this.ket||this.ket>this.limit||this.limit>r.length)throw"faulty slice operation"},slice_from:function(r){this.slice_check(),this.replace_s(this.bra,this.ket,r)},slice_del:function(){this.slice_from("")},insert:function(r,t,i){var s=this.replace_s(r,t,i);r<=this.bra&&(this.bra+=s),r<=this.ket&&(this.ket+=s)},slice_to:function(){return this.slice_check(),r.substring(this.bra,this.ket)},eq_v_b:function(r){return this.eq_s_b(r.length,r)}}}},r.trimmerSupport={generateTrimmer:function(r){var t=new RegExp("^[^"+r+"]+"),i=new RegExp("[^"+r+"]+$");return function(r){return"function"==typeof r.update?r.update(function(r){return r.replace(t,"").replace(i,"")}):r.replace(t,"").replace(i,"")}}}}});

View File

@ -0,0 +1,18 @@
/*!
* Lunr languages, `Swedish` language
* https://github.com/MihaiValentin/lunr-languages
*
* Copyright 2014, Mihai Valentin
* http://www.mozilla.org/MPL/
*/
/*!
* based on
* Snowball JavaScript Library v0.3
* http://code.google.com/p/urim/
* http://snowball.tartarus.org/
*
* Copyright 2010, Oleg Mazko
* http://www.mozilla.org/MPL/
*/
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.sv=function(){this.pipeline.reset(),this.pipeline.add(e.sv.trimmer,e.sv.stopWordFilter,e.sv.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.sv.stemmer))},e.sv.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA--",e.sv.trimmer=e.trimmerSupport.generateTrimmer(e.sv.wordCharacters),e.Pipeline.registerFunction(e.sv.trimmer,"trimmer-sv"),e.sv.stemmer=function(){var r=e.stemmerSupport.Among,n=e.stemmerSupport.SnowballProgram,t=new function(){function e(){var e,r=w.cursor+3;if(o=w.limit,0<=r||r<=w.limit){for(a=r;;){if(e=w.cursor,w.in_grouping(l,97,246)){w.cursor=e;break}if(w.cursor=e,w.cursor>=w.limit)return;w.cursor++}for(;!w.out_grouping(l,97,246);){if(w.cursor>=w.limit)return;w.cursor++}o=w.cursor,o<a&&(o=a)}}function t(){var e,r=w.limit_backward;if(w.cursor>=o&&(w.limit_backward=o,w.cursor=w.limit,w.ket=w.cursor,e=w.find_among_b(u,37),w.limit_backward=r,e))switch(w.bra=w.cursor,e){case 1:w.slice_del();break;case 2:w.in_grouping_b(d,98,121)&&w.slice_del()}}function i(){var e=w.limit_backward;w.cursor>=o&&(w.limit_backward=o,w.cursor=w.limit,w.find_among_b(c,7)&&(w.cursor=w.limit,w.ket=w.cursor,w.cursor>w.limit_backward&&(w.bra=--w.cursor,w.slice_del())),w.limit_backward=e)}function s(){var e,r;if(w.cursor>=o){if(r=w.limit_backward,w.limit_backward=o,w.cursor=w.limit,w.ket=w.cursor,e=w.find_among_b(m,5))switch(w.bra=w.cursor,e){case 1:w.slice_del();break;case 2:w.slice_from("lös");break;case 3:w.slice_from("full")}w.limit_backward=r}}var a,o,u=[new r("a",-1,1),new r("arna",0,1),new r("erna",0,1),new r("heterna",2,1),new r("orna",0,1),new r("ad",-1,1),new r("e",-1,1),new r("ade",6,1),new r("ande",6,1),new r("arne",6,1),new r("are",6,1),new r("aste",6,1),new r("en",-1,1),new r("anden",12,1),new r("aren",12,1),new r("heten",12,1),new r("ern",-1,1),new r("ar",-1,1),new r("er",-1,1),new r("heter",18,1),new r("or",-1,1),new r("s",-1,2),new r("as",21,1),new r("arnas",22,1),new r("ernas",22,1),new r("ornas",22,1),new r("es",21,1),new r("ades",26,1),new r("andes",26,1),new r("ens",21,1),new r("arens",29,1),new r("hetens",29,1),new r("erns",21,1),new r("at",-1,1),new r("andet",-1,1),new r("het",-1,1),new r("ast",-1,1)],c=[new r("dd",-1,-1),new r("gd",-1,-1),new r("nn",-1,-1),new r("dt",-1,-1),new r("gt",-1,-1),new r("kt",-1,-1),new r("tt",-1,-1)],m=[new r("ig",-1,1),new r("lig",0,1),new r("els",-1,1),new r("fullt",-1,3),new r("löst",-1,2)],l=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,24,0,32],d=[119,127,149],w=new n;this.setCurrent=function(e){w.setCurrent(e)},this.getCurrent=function(){return w.getCurrent()},this.stem=function(){var r=w.cursor;return e(),w.limit_backward=r,w.cursor=w.limit,t(),w.cursor=w.limit,i(),w.cursor=w.limit,s(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return t.setCurrent(e),t.stem(),t.getCurrent()}):(t.setCurrent(e),t.stem(),t.getCurrent())}}(),e.Pipeline.registerFunction(e.sv.stemmer,"stemmer-sv"),e.sv.stopWordFilter=e.generateStopWordFilter("alla allt att av blev bli blir blivit de dem den denna deras dess dessa det detta dig din dina ditt du där då efter ej eller en er era ert ett från för ha hade han hans har henne hennes hon honom hur här i icke ingen inom inte jag ju kan kunde man med mellan men mig min mina mitt mot mycket ni nu när någon något några och om oss på samma sedan sig sin sina sitta själv skulle som så sådan sådana sådant till under upp ut utan vad var vara varför varit varje vars vart vem vi vid vilka vilkas vilken vilket vår våra vårt än är åt över".split(" ")),e.Pipeline.registerFunction(e.sv.stopWordFilter,"stopWordFilter-sv")}});

View File

@ -0,0 +1 @@
!function(e,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():t()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.ta=function(){this.pipeline.reset(),this.pipeline.add(e.ta.trimmer,e.ta.stopWordFilter,e.ta.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.ta.stemmer))},e.ta.wordCharacters="஀-உஊ-ஏஐ-ஙச-ட஠-னப-யர-ஹ஺-ிீ-௉ொ-௏ௐ-௙௚-௟௠-௩௪-௯௰-௹௺-௿a-zA-Z--0-9-",e.ta.trimmer=e.trimmerSupport.generateTrimmer(e.ta.wordCharacters),e.Pipeline.registerFunction(e.ta.trimmer,"trimmer-ta"),e.ta.stopWordFilter=e.generateStopWordFilter("அங்கு அங்கே அது அதை அந்த அவர் அவர்கள் அவள் அவன் அவை ஆக ஆகவே ஆகையால் ஆதலால் ஆதலினால் ஆனாலும் ஆனால் இங்கு இங்கே இது இதை இந்த இப்படி இவர் இவர்கள் இவள் இவன் இவை இவ்வளவு உனக்கு உனது உன் உன்னால் எங்கு எங்கே எது எதை எந்த எப்படி எவர் எவர்கள் எவள் எவன் எவை எவ்வளவு எனக்கு எனது எனவே என் என்ன என்னால் ஏது ஏன் தனது தன்னால் தானே தான் நாங்கள் நாம் நான் நீ நீங்கள்".split(" ")),e.ta.stemmer=function(){return function(e){return"function"==typeof e.update?e.update(function(e){return e}):e}}();var t=e.wordcut;t.init(),e.ta.tokenizer=function(r){if(!arguments.length||null==r||void 0==r)return[];if(Array.isArray(r))return r.map(function(t){return isLunr2?new e.Token(t.toLowerCase()):t.toLowerCase()});var i=r.toString().toLowerCase().replace(/^\s+/,"");return t.cut(i).split("|")},e.Pipeline.registerFunction(e.ta.stemmer,"stemmer-ta"),e.Pipeline.registerFunction(e.ta.stopWordFilter,"stopWordFilter-ta")}});

View File

@ -0,0 +1 @@
!function(e,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():t()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.te=function(){this.pipeline.reset(),this.pipeline.add(e.te.trimmer,e.te.stopWordFilter,e.te.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.te.stemmer))},e.te.wordCharacters="ఀ-ఄఅ-ఔక-హా-ౌౕ-ౖౘ-ౚౠ-ౡౢ-ౣ౦-౯౸-౿఼ఽ్ౝ౷౤౥",e.te.trimmer=e.trimmerSupport.generateTrimmer(e.te.wordCharacters),e.Pipeline.registerFunction(e.te.trimmer,"trimmer-te"),e.te.stopWordFilter=e.generateStopWordFilter("అందరూ అందుబాటులో అడగండి అడగడం అడ్డంగా అనుగుణంగా అనుమతించు అనుమతిస్తుంది అయితే ఇప్పటికే ఉన్నారు ఎక్కడైనా ఎప్పుడు ఎవరైనా ఎవరో ఏ ఏదైనా ఏమైనప్పటికి ఒక ఒకరు కనిపిస్తాయి కాదు కూడా గా గురించి చుట్టూ చేయగలిగింది తగిన తర్వాత దాదాపు దూరంగా నిజంగా పై ప్రకారం ప్రక్కన మధ్య మరియు మరొక మళ్ళీ మాత్రమే మెచ్చుకో వద్ద వెంట వేరుగా వ్యతిరేకంగా సంబంధం".split(" ")),e.te.stemmer=function(){return function(e){return"function"==typeof e.update?e.update(function(e){return e}):e}}();var t=e.wordcut;t.init(),e.te.tokenizer=function(r){if(!arguments.length||null==r||void 0==r)return[];if(Array.isArray(r))return r.map(function(t){return isLunr2?new e.Token(t.toLowerCase()):t.toLowerCase()});var i=r.toString().toLowerCase().replace(/^\s+/,"");return t.cut(i).split("|")},e.Pipeline.registerFunction(e.te.stemmer,"stemmer-te"),e.Pipeline.registerFunction(e.te.stopWordFilter,"stopWordFilter-te")}});

View File

@ -0,0 +1 @@
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var r="2"==e.version[0];e.th=function(){this.pipeline.reset(),this.pipeline.add(e.th.trimmer),r?this.tokenizer=e.th.tokenizer:(e.tokenizer&&(e.tokenizer=e.th.tokenizer),this.tokenizerFn&&(this.tokenizerFn=e.th.tokenizer))},e.th.wordCharacters="[฀-๿]",e.th.trimmer=e.trimmerSupport.generateTrimmer(e.th.wordCharacters),e.Pipeline.registerFunction(e.th.trimmer,"trimmer-th");var t=e.wordcut;t.init(),e.th.tokenizer=function(i){if(!arguments.length||null==i||void 0==i)return[];if(Array.isArray(i))return i.map(function(t){return r?new e.Token(t):t});var n=i.toString().replace(/^\s+/,"");return t.cut(n).split("|")}}});

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.vi=function(){this.pipeline.reset(),this.pipeline.add(e.vi.stopWordFilter,e.vi.trimmer)},e.vi.wordCharacters="[A-Za-ẓ̀͐́͑̉̃̓ÂâÊêÔôĂ-ăĐ-đƠ-ơƯ-ư]",e.vi.trimmer=e.trimmerSupport.generateTrimmer(e.vi.wordCharacters),e.Pipeline.registerFunction(e.vi.trimmer,"trimmer-vi"),e.vi.stopWordFilter=e.generateStopWordFilter("là cái nhưng mà".split(" "))}});

View File

@ -0,0 +1 @@
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r(require("@node-rs/jieba")):r()(e.lunr)}(this,function(e){return function(r,t){if(void 0===r)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===r.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var i="2"==r.version[0];r.zh=function(){this.pipeline.reset(),this.pipeline.add(r.zh.trimmer,r.zh.stopWordFilter,r.zh.stemmer),i?this.tokenizer=r.zh.tokenizer:(r.tokenizer&&(r.tokenizer=r.zh.tokenizer),this.tokenizerFn&&(this.tokenizerFn=r.zh.tokenizer))},r.zh.tokenizer=function(n){if(!arguments.length||null==n||void 0==n)return[];if(Array.isArray(n))return n.map(function(e){return i?new r.Token(e.toLowerCase()):e.toLowerCase()});t&&e.load(t);var o=n.toString().trim().toLowerCase(),s=[];e.cut(o,!0).forEach(function(e){s=s.concat(e.split(" "))}),s=s.filter(function(e){return!!e});var u=0;return s.map(function(e,t){if(i){var n=o.indexOf(e,u),s={};return s.position=[n,e.length],s.index=t,u=n,new r.Token(e,s)}return e})},r.zh.wordCharacters="\\w一-龥",r.zh.trimmer=r.trimmerSupport.generateTrimmer(r.zh.wordCharacters),r.Pipeline.registerFunction(r.zh.trimmer,"trimmer-zh"),r.zh.stemmer=function(){return function(e){return e}}(),r.Pipeline.registerFunction(r.zh.stemmer,"stemmer-zh"),r.zh.stopWordFilter=r.generateStopWordFilter("的 一 不 在 人 有 是 为 為 以 于 於 上 他 而 后 後 之 来 來 及 了 因 下 可 到 由 这 這 与 與 也 此 但 并 並 个 個 其 已 无 無 小 我 们 們 起 最 再 今 去 好 只 又 或 很 亦 某 把 那 你 乃 它 吧 被 比 别 趁 当 當 从 從 得 打 凡 儿 兒 尔 爾 该 該 各 给 給 跟 和 何 还 還 即 几 幾 既 看 据 據 距 靠 啦 另 么 麽 每 嘛 拿 哪 您 凭 憑 且 却 卻 让 讓 仍 啥 如 若 使 谁 誰 虽 雖 随 隨 同 所 她 哇 嗡 往 些 向 沿 哟 喲 用 咱 则 則 怎 曾 至 致 着 著 诸 諸 自".split(" ")),r.Pipeline.registerFunction(r.zh.stopWordFilter,"stopWordFilter-zh")}});

View File

@ -0,0 +1,206 @@
/**
* export the module via AMD, CommonJS or as a browser global
* Export code from https://github.com/umdjs/umd/blob/master/returnExports.js
*/
;(function (root, factory) {
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module.
define(factory)
} else if (typeof exports === 'object') {
/**
* Node. Does not work with strict CommonJS, but
* only CommonJS-like environments that support module.exports,
* like Node.
*/
module.exports = factory()
} else {
// Browser globals (root is window)
factory()(root.lunr);
}
}(this, function () {
/**
* Just return a value to define the module export.
* This example returns an object, but the module
* can return a function as the exported value.
*/
return function(lunr) {
// TinySegmenter 0.1 -- Super compact Japanese tokenizer in Javascript
// (c) 2008 Taku Kudo <taku@chasen.org>
// TinySegmenter is freely distributable under the terms of a new BSD licence.
// For details, see http://chasen.org/~taku/software/TinySegmenter/LICENCE.txt
function TinySegmenter() {
var patterns = {
"[一二三四五六七八九十百千万億兆]":"M",
"[一-龠々〆ヵヶ]":"H",
"[ぁ-ん]":"I",
"[ァ-ヴーア-ン゙ー]":"K",
"[a-zA-Z--]":"A",
"[0-9-]":"N"
}
this.chartype_ = [];
for (var i in patterns) {
var regexp = new RegExp(i);
this.chartype_.push([regexp, patterns[i]]);
}
this.BIAS__ = -332
this.BC1__ = {"HH":6,"II":2461,"KH":406,"OH":-1378};
this.BC2__ = {"AA":-3267,"AI":2744,"AN":-878,"HH":-4070,"HM":-1711,"HN":4012,"HO":3761,"IA":1327,"IH":-1184,"II":-1332,"IK":1721,"IO":5492,"KI":3831,"KK":-8741,"MH":-3132,"MK":3334,"OO":-2920};
this.BC3__ = {"HH":996,"HI":626,"HK":-721,"HN":-1307,"HO":-836,"IH":-301,"KK":2762,"MK":1079,"MM":4034,"OA":-1652,"OH":266};
this.BP1__ = {"BB":295,"OB":304,"OO":-125,"UB":352};
this.BP2__ = {"BO":60,"OO":-1762};
this.BQ1__ = {"BHH":1150,"BHM":1521,"BII":-1158,"BIM":886,"BMH":1208,"BNH":449,"BOH":-91,"BOO":-2597,"OHI":451,"OIH":-296,"OKA":1851,"OKH":-1020,"OKK":904,"OOO":2965};
this.BQ2__ = {"BHH":118,"BHI":-1159,"BHM":466,"BIH":-919,"BKK":-1720,"BKO":864,"OHH":-1139,"OHM":-181,"OIH":153,"UHI":-1146};
this.BQ3__ = {"BHH":-792,"BHI":2664,"BII":-299,"BKI":419,"BMH":937,"BMM":8335,"BNN":998,"BOH":775,"OHH":2174,"OHM":439,"OII":280,"OKH":1798,"OKI":-793,"OKO":-2242,"OMH":-2402,"OOO":11699};
this.BQ4__ = {"BHH":-3895,"BIH":3761,"BII":-4654,"BIK":1348,"BKK":-1806,"BMI":-3385,"BOO":-12396,"OAH":926,"OHH":266,"OHK":-2036,"ONN":-973};
this.BW1__ = {",と":660,",同":727,"B1あ":1404,"B1同":542,"、と":660,"、同":727,"」と":1682,"あっ":1505,"いう":1743,"いっ":-2055,"いる":672,"うし":-4817,"うん":665,"から":3472,"がら":600,"こう":-790,"こと":2083,"こん":-1262,"さら":-4143,"さん":4573,"した":2641,"して":1104,"すで":-3399,"そこ":1977,"それ":-871,"たち":1122,"ため":601,"った":3463,"つい":-802,"てい":805,"てき":1249,"でき":1127,"です":3445,"では":844,"とい":-4915,"とみ":1922,"どこ":3887,"ない":5713,"なっ":3015,"など":7379,"なん":-1113,"にし":2468,"には":1498,"にも":1671,"に対":-912,"の一":-501,"の中":741,"ませ":2448,"まで":1711,"まま":2600,"まる":-2155,"やむ":-1947,"よっ":-2565,"れた":2369,"れで":-913,"をし":1860,"を見":731,"亡く":-1886,"京都":2558,"取り":-2784,"大き":-2604,"大阪":1497,"平方":-2314,"引き":-1336,"日本":-195,"本当":-2423,"毎日":-2113,"目指":-724,"B1あ":1404,"B1同":542,"」と":1682};
this.BW2__ = {"..":-11822,"11":-669,"――":-5730,"":-13175,"いう":-1609,"うか":2490,"かし":-1350,"かも":-602,"から":-7194,"かれ":4612,"がい":853,"がら":-3198,"きた":1941,"くな":-1597,"こと":-8392,"この":-4193,"させ":4533,"され":13168,"さん":-3977,"しい":-1819,"しか":-545,"した":5078,"して":972,"しな":939,"その":-3744,"たい":-1253,"たた":-662,"ただ":-3857,"たち":-786,"たと":1224,"たは":-939,"った":4589,"って":1647,"っと":-2094,"てい":6144,"てき":3640,"てく":2551,"ては":-3110,"ても":-3065,"でい":2666,"でき":-1528,"でし":-3828,"です":-4761,"でも":-4203,"とい":1890,"とこ":-1746,"とと":-2279,"との":720,"とみ":5168,"とも":-3941,"ない":-2488,"なが":-1313,"など":-6509,"なの":2614,"なん":3099,"にお":-1615,"にし":2748,"にな":2454,"によ":-7236,"に対":-14943,"に従":-4688,"に関":-11388,"のか":2093,"ので":-7059,"のに":-6041,"のの":-6125,"はい":1073,"はが":-1033,"はず":-2532,"ばれ":1813,"まし":-1316,"まで":-6621,"まれ":5409,"めて":-3153,"もい":2230,"もの":-10713,"らか":-944,"らし":-1611,"らに":-1897,"りし":651,"りま":1620,"れた":4270,"れて":849,"れば":4114,"ろう":6067,"われ":7901,"を通":-11877,"んだ":728,"んな":-4115,"一人":602,"一方":-1375,"一日":970,"一部":-1051,"上が":-4479,"会社":-1116,"出て":2163,"分の":-7758,"同党":970,"同日":-913,"大阪":-2471,"委員":-1250,"少な":-1050,"年度":-8669,"年間":-1626,"府県":-2363,"手権":-1982,"新聞":-4066,"日新":-722,"日本":-7068,"日米":3372,"曜日":-601,"朝鮮":-2355,"本人":-2697,"東京":-1543,"然と":-1384,"社会":-1276,"立て":-990,"第に":-1612,"米国":-4268,"":-669};
this.BW3__ = {"あた":-2194,"あり":719,"ある":3846,"い.":-1185,"い。":-1185,"いい":5308,"いえ":2079,"いく":3029,"いた":2056,"いっ":1883,"いる":5600,"いわ":1527,"うち":1117,"うと":4798,"えと":1454,"か.":2857,"か。":2857,"かけ":-743,"かっ":-4098,"かに":-669,"から":6520,"かり":-2670,"が,":1816,"が、":1816,"がき":-4855,"がけ":-1127,"がっ":-913,"がら":-4977,"がり":-2064,"きた":1645,"けど":1374,"こと":7397,"この":1542,"ころ":-2757,"さい":-714,"さを":976,"し,":1557,"し、":1557,"しい":-3714,"した":3562,"して":1449,"しな":2608,"しま":1200,"す.":-1310,"す。":-1310,"する":6521,"ず,":3426,"ず、":3426,"ずに":841,"そう":428,"た.":8875,"た。":8875,"たい":-594,"たの":812,"たり":-1183,"たる":-853,"だ.":4098,"だ。":4098,"だっ":1004,"った":-4748,"って":300,"てい":6240,"てお":855,"ても":302,"です":1437,"でに":-1482,"では":2295,"とう":-1387,"とし":2266,"との":541,"とも":-3543,"どう":4664,"ない":1796,"なく":-903,"など":2135,"に,":-1021,"に、":-1021,"にし":1771,"にな":1906,"には":2644,"の,":-724,"の、":-724,"の子":-1000,"は,":1337,"は、":1337,"べき":2181,"まし":1113,"ます":6943,"まっ":-1549,"まで":6154,"まれ":-793,"らし":1479,"られ":6820,"るる":3818,"れ,":854,"れ、":854,"れた":1850,"れて":1375,"れば":-3246,"れる":1091,"われ":-605,"んだ":606,"んで":798,"カ月":990,"会議":860,"入り":1232,"大会":2217,"始め":1681,"市":965,"新聞":-5055,"日,":974,"日、":974,"社会":2024,"カ月":990};
this.TC1__ = {"AAA":1093,"HHH":1029,"HHM":580,"HII":998,"HOH":-390,"HOM":-331,"IHI":1169,"IOH":-142,"IOI":-1015,"IOM":467,"MMH":187,"OOI":-1832};
this.TC2__ = {"HHO":2088,"HII":-1023,"HMM":-1154,"IHI":-1965,"KKH":703,"OII":-2649};
this.TC3__ = {"AAA":-294,"HHH":346,"HHI":-341,"HII":-1088,"HIK":731,"HOH":-1486,"IHH":128,"IHI":-3041,"IHO":-1935,"IIH":-825,"IIM":-1035,"IOI":-542,"KHH":-1216,"KKA":491,"KKH":-1217,"KOK":-1009,"MHH":-2694,"MHM":-457,"MHO":123,"MMH":-471,"NNH":-1689,"NNO":662,"OHO":-3393};
this.TC4__ = {"HHH":-203,"HHI":1344,"HHK":365,"HHM":-122,"HHN":182,"HHO":669,"HIH":804,"HII":679,"HOH":446,"IHH":695,"IHO":-2324,"IIH":321,"III":1497,"IIO":656,"IOO":54,"KAK":4845,"KKA":3386,"KKK":3065,"MHH":-405,"MHI":201,"MMH":-241,"MMM":661,"MOM":841};
this.TQ1__ = {"BHHH":-227,"BHHI":316,"BHIH":-132,"BIHH":60,"BIII":1595,"BNHH":-744,"BOHH":225,"BOOO":-908,"OAKK":482,"OHHH":281,"OHIH":249,"OIHI":200,"OIIH":-68};
this.TQ2__ = {"BIHH":-1401,"BIII":-1033,"BKAK":-543,"BOOO":-5591};
this.TQ3__ = {"BHHH":478,"BHHM":-1073,"BHIH":222,"BHII":-504,"BIIH":-116,"BIII":-105,"BMHI":-863,"BMHM":-464,"BOMH":620,"OHHH":346,"OHHI":1729,"OHII":997,"OHMH":481,"OIHH":623,"OIIH":1344,"OKAK":2792,"OKHH":587,"OKKA":679,"OOHH":110,"OOII":-685};
this.TQ4__ = {"BHHH":-721,"BHHM":-3604,"BHII":-966,"BIIH":-607,"BIII":-2181,"OAAA":-2763,"OAKK":180,"OHHH":-294,"OHHI":2446,"OHHO":480,"OHIH":-1573,"OIHH":1935,"OIHI":-493,"OIIH":626,"OIII":-4007,"OKAK":-8156};
this.TW1__ = {"につい":-4681,"東京都":2026};
this.TW2__ = {"ある程":-2049,"いった":-1256,"ころが":-2434,"しょう":3873,"その後":-4430,"だって":-1049,"ていた":1833,"として":-4657,"ともに":-4517,"もので":1882,"一気に":-792,"初めて":-1512,"同時に":-8097,"大きな":-1255,"対して":-2721,"社会党":-3216};
this.TW3__ = {"いただ":-1734,"してい":1314,"として":-4314,"につい":-5483,"にとっ":-5989,"に当た":-6247,"ので,":-727,"ので、":-727,"のもの":-600,"れから":-3752,"十二月":-2287};
this.TW4__ = {"いう.":8576,"いう。":8576,"からな":-2348,"してい":2958,"たが,":1516,"たが、":1516,"ている":1538,"という":1349,"ました":5543,"ません":1097,"ようと":-4258,"よると":5865};
this.UC1__ = {"A":484,"K":93,"M":645,"O":-505};
this.UC2__ = {"A":819,"H":1059,"I":409,"M":3987,"N":5775,"O":646};
this.UC3__ = {"A":-1370,"I":2311};
this.UC4__ = {"A":-2643,"H":1809,"I":-1032,"K":-3450,"M":3565,"N":3876,"O":6646};
this.UC5__ = {"H":313,"I":-1238,"K":-799,"M":539,"O":-831};
this.UC6__ = {"H":-506,"I":-253,"K":87,"M":247,"O":-387};
this.UP1__ = {"O":-214};
this.UP2__ = {"B":69,"O":935};
this.UP3__ = {"B":189};
this.UQ1__ = {"BH":21,"BI":-12,"BK":-99,"BN":142,"BO":-56,"OH":-95,"OI":477,"OK":410,"OO":-2422};
this.UQ2__ = {"BH":216,"BI":113,"OK":1759};
this.UQ3__ = {"BA":-479,"BH":42,"BI":1913,"BK":-7198,"BM":3160,"BN":6427,"BO":14761,"OI":-827,"ON":-3212};
this.UW1__ = {",":156,"、":156,"「":-463,"あ":-941,"う":-127,"が":-553,"き":121,"こ":505,"で":-201,"と":-547,"ど":-123,"に":-789,"の":-185,"は":-847,"も":-466,"や":-470,"よ":182,"ら":-292,"り":208,"れ":169,"を":-446,"ん":-137,"・":-135,"主":-402,"京":-268,"区":-912,"午":871,"国":-460,"大":561,"委":729,"市":-411,"日":-141,"理":361,"生":-408,"県":-386,"都":-718,"「":-463,"・":-135};
this.UW2__ = {",":-829,"、":-829,"":892,"「":-645,"」":3145,"あ":-538,"い":505,"う":134,"お":-502,"か":1454,"が":-856,"く":-412,"こ":1141,"さ":878,"ざ":540,"し":1529,"す":-675,"せ":300,"そ":-1011,"た":188,"だ":1837,"つ":-949,"て":-291,"で":-268,"と":-981,"ど":1273,"な":1063,"に":-1764,"の":130,"は":-409,"ひ":-1273,"べ":1261,"ま":600,"も":-1263,"や":-402,"よ":1639,"り":-579,"る":-694,"れ":571,"を":-2516,"ん":2095,"ア":-587,"カ":306,"キ":568,"ッ":831,"三":-758,"不":-2150,"世":-302,"中":-968,"主":-861,"事":492,"人":-123,"会":978,"保":362,"入":548,"初":-3025,"副":-1566,"北":-3414,"区":-422,"大":-1769,"天":-865,"太":-483,"子":-1519,"学":760,"実":1023,"小":-2009,"市":-813,"年":-1060,"強":1067,"手":-1519,"揺":-1033,"政":1522,"文":-1355,"新":-1682,"日":-1815,"明":-1462,"最":-630,"朝":-1843,"本":-1650,"東":-931,"果":-665,"次":-2378,"民":-180,"気":-1740,"理":752,"発":529,"目":-1584,"相":-242,"県":-1165,"立":-763,"第":810,"米":509,"自":-1353,"行":838,"西":-744,"見":-3874,"調":1010,"議":1198,"込":3041,"開":1758,"間":-1257,"「":-645,"」":3145,"ッ":831,"ア":-587,"カ":306,"キ":568};
this.UW3__ = {",":4889,"1":-800,"":-1723,"、":4889,"々":-2311,"":5827,"」":2670,"〓":-3573,"あ":-2696,"い":1006,"う":2342,"え":1983,"お":-4864,"か":-1163,"が":3271,"く":1004,"け":388,"げ":401,"こ":-3552,"ご":-3116,"さ":-1058,"し":-395,"す":584,"せ":3685,"そ":-5228,"た":842,"ち":-521,"っ":-1444,"つ":-1081,"て":6167,"で":2318,"と":1691,"ど":-899,"な":-2788,"に":2745,"の":4056,"は":4555,"ひ":-2171,"ふ":-1798,"へ":1199,"ほ":-5516,"ま":-4384,"み":-120,"め":1205,"も":2323,"や":-788,"よ":-202,"ら":727,"り":649,"る":5905,"れ":2773,"わ":-1207,"を":6620,"ん":-518,"ア":551,"グ":1319,"ス":874,"ッ":-1350,"ト":521,"ム":1109,"ル":1591,"ロ":2201,"ン":278,"・":-3794,"一":-1619,"下":-1759,"世":-2087,"両":3815,"中":653,"主":-758,"予":-1193,"二":974,"人":2742,"今":792,"他":1889,"以":-1368,"低":811,"何":4265,"作":-361,"保":-2439,"元":4858,"党":3593,"全":1574,"公":-3030,"六":755,"共":-1880,"円":5807,"再":3095,"分":457,"初":2475,"別":1129,"前":2286,"副":4437,"力":365,"動":-949,"務":-1872,"化":1327,"北":-1038,"区":4646,"千":-2309,"午":-783,"協":-1006,"口":483,"右":1233,"各":3588,"合":-241,"同":3906,"和":-837,"員":4513,"国":642,"型":1389,"場":1219,"外":-241,"妻":2016,"学":-1356,"安":-423,"実":-1008,"家":1078,"小":-513,"少":-3102,"州":1155,"市":3197,"平":-1804,"年":2416,"広":-1030,"府":1605,"度":1452,"建":-2352,"当":-3885,"得":1905,"思":-1291,"性":1822,"戸":-488,"指":-3973,"政":-2013,"教":-1479,"数":3222,"文":-1489,"新":1764,"日":2099,"旧":5792,"昨":-661,"時":-1248,"曜":-951,"最":-937,"月":4125,"期":360,"李":3094,"村":364,"東":-805,"核":5156,"森":2438,"業":484,"氏":2613,"民":-1694,"決":-1073,"法":1868,"海":-495,"無":979,"物":461,"特":-3850,"生":-273,"用":914,"町":1215,"的":7313,"直":-1835,"省":792,"県":6293,"知":-1528,"私":4231,"税":401,"立":-960,"第":1201,"米":7767,"系":3066,"約":3663,"級":1384,"統":-4229,"総":1163,"線":1255,"者":6457,"能":725,"自":-2869,"英":785,"見":1044,"調":-562,"財":-733,"費":1777,"車":1835,"軍":1375,"込":-1504,"通":-1136,"選":-681,"郎":1026,"郡":4404,"部":1200,"金":2163,"長":421,"開":-1432,"間":1302,"関":-1282,"雨":2009,"電":-1045,"非":2066,"駅":1620,"":-800,"」":2670,"・":-3794,"ッ":-1350,"ア":551,"グ":1319,"ス":874,"ト":521,"ム":1109,"ル":1591,"ロ":2201,"ン":278};
this.UW4__ = {",":3930,".":3508,"―":-4841,"、":3930,"。":3508,"":4999,"「":1895,"」":3798,"〓":-5156,"あ":4752,"い":-3435,"う":-640,"え":-2514,"お":2405,"か":530,"が":6006,"き":-4482,"ぎ":-3821,"く":-3788,"け":-4376,"げ":-4734,"こ":2255,"ご":1979,"さ":2864,"し":-843,"じ":-2506,"す":-731,"ず":1251,"せ":181,"そ":4091,"た":5034,"だ":5408,"ち":-3654,"っ":-5882,"つ":-1659,"て":3994,"で":7410,"と":4547,"な":5433,"に":6499,"ぬ":1853,"ね":1413,"の":7396,"は":8578,"ば":1940,"ひ":4249,"び":-4134,"ふ":1345,"へ":6665,"べ":-744,"ほ":1464,"ま":1051,"み":-2082,"む":-882,"め":-5046,"も":4169,"ゃ":-2666,"や":2795,"ょ":-1544,"よ":3351,"ら":-2922,"り":-9726,"る":-14896,"れ":-2613,"ろ":-4570,"わ":-1783,"を":13150,"ん":-2352,"カ":2145,"コ":1789,"セ":1287,"ッ":-724,"ト":-403,"メ":-1635,"ラ":-881,"リ":-541,"ル":-856,"ン":-3637,"・":-4371,"ー":-11870,"一":-2069,"中":2210,"予":782,"事":-190,"井":-1768,"人":1036,"以":544,"会":950,"体":-1286,"作":530,"側":4292,"先":601,"党":-2006,"共":-1212,"内":584,"円":788,"初":1347,"前":1623,"副":3879,"力":-302,"動":-740,"務":-2715,"化":776,"区":4517,"協":1013,"参":1555,"合":-1834,"和":-681,"員":-910,"器":-851,"回":1500,"国":-619,"園":-1200,"地":866,"場":-1410,"塁":-2094,"士":-1413,"多":1067,"大":571,"子":-4802,"学":-1397,"定":-1057,"寺":-809,"小":1910,"屋":-1328,"山":-1500,"島":-2056,"川":-2667,"市":2771,"年":374,"庁":-4556,"後":456,"性":553,"感":916,"所":-1566,"支":856,"改":787,"政":2182,"教":704,"文":522,"方":-856,"日":1798,"時":1829,"最":845,"月":-9066,"木":-485,"来":-442,"校":-360,"業":-1043,"氏":5388,"民":-2716,"気":-910,"沢":-939,"済":-543,"物":-735,"率":672,"球":-1267,"生":-1286,"産":-1101,"田":-2900,"町":1826,"的":2586,"目":922,"省":-3485,"県":2997,"空":-867,"立":-2112,"第":788,"米":2937,"系":786,"約":2171,"経":1146,"統":-1169,"総":940,"線":-994,"署":749,"者":2145,"能":-730,"般":-852,"行":-792,"規":792,"警":-1184,"議":-244,"谷":-1000,"賞":730,"車":-1481,"軍":1158,"輪":-1433,"込":-3370,"近":929,"道":-1291,"選":2596,"郎":-4866,"都":1192,"野":-1100,"銀":-2213,"長":357,"間":-2344,"院":-2297,"際":-2604,"電":-878,"領":-1659,"題":-792,"館":-1984,"首":1749,"高":2120,"「":1895,"」":3798,"・":-4371,"ッ":-724,"ー":-11870,"カ":2145,"コ":1789,"セ":1287,"ト":-403,"メ":-1635,"ラ":-881,"リ":-541,"ル":-856,"ン":-3637};
this.UW5__ = {",":465,".":-299,"1":-514,"E2":-32768,"]":-2762,"、":465,"。":-299,"「":363,"あ":1655,"い":331,"う":-503,"え":1199,"お":527,"か":647,"が":-421,"き":1624,"ぎ":1971,"く":312,"げ":-983,"さ":-1537,"し":-1371,"す":-852,"だ":-1186,"ち":1093,"っ":52,"つ":921,"て":-18,"で":-850,"と":-127,"ど":1682,"な":-787,"に":-1224,"の":-635,"は":-578,"べ":1001,"み":502,"め":865,"ゃ":3350,"ょ":854,"り":-208,"る":429,"れ":504,"わ":419,"を":-1264,"ん":327,"イ":241,"ル":451,"ン":-343,"中":-871,"京":722,"会":-1153,"党":-654,"務":3519,"区":-901,"告":848,"員":2104,"大":-1296,"学":-548,"定":1785,"嵐":-1304,"市":-2991,"席":921,"年":1763,"思":872,"所":-814,"挙":1618,"新":-1682,"日":218,"月":-4353,"査":932,"格":1356,"機":-1508,"氏":-1347,"田":240,"町":-3912,"的":-3149,"相":1319,"省":-1052,"県":-4003,"研":-997,"社":-278,"空":-813,"統":1955,"者":-2233,"表":663,"語":-1073,"議":1219,"選":-1018,"郎":-368,"長":786,"間":1191,"題":2368,"館":-689,"":-514,"":-32768,"「":363,"イ":241,"ル":451,"ン":-343};
this.UW6__ = {",":227,".":808,"1":-270,"E1":306,"、":227,"。":808,"あ":-307,"う":189,"か":241,"が":-73,"く":-121,"こ":-200,"じ":1782,"す":383,"た":-428,"っ":573,"て":-1014,"で":101,"と":-105,"な":-253,"に":-149,"の":-417,"は":-236,"も":-206,"り":187,"る":-135,"を":195,"ル":-673,"ン":-496,"一":-277,"中":201,"件":-800,"会":624,"前":302,"区":1792,"員":-1212,"委":798,"学":-960,"市":887,"広":-695,"後":535,"業":-697,"相":753,"社":-507,"福":974,"空":-822,"者":1811,"連":463,"郎":1082,"":-270,"":306,"ル":-673,"ン":-496};
return this;
}
TinySegmenter.prototype.ctype_ = function(str) {
for (var i in this.chartype_) {
if (str.match(this.chartype_[i][0])) {
return this.chartype_[i][1];
}
}
return "O";
}
TinySegmenter.prototype.ts_ = function(v) {
if (v) { return v; }
return 0;
}
TinySegmenter.prototype.segment = function(input) {
if (input == null || input == undefined || input == "") {
return [];
}
var result = [];
var seg = ["B3","B2","B1"];
var ctype = ["O","O","O"];
var o = input.split("");
for (i = 0; i < o.length; ++i) {
seg.push(o[i]);
ctype.push(this.ctype_(o[i]))
}
seg.push("E1");
seg.push("E2");
seg.push("E3");
ctype.push("O");
ctype.push("O");
ctype.push("O");
var word = seg[3];
var p1 = "U";
var p2 = "U";
var p3 = "U";
for (var i = 4; i < seg.length - 3; ++i) {
var score = this.BIAS__;
var w1 = seg[i-3];
var w2 = seg[i-2];
var w3 = seg[i-1];
var w4 = seg[i];
var w5 = seg[i+1];
var w6 = seg[i+2];
var c1 = ctype[i-3];
var c2 = ctype[i-2];
var c3 = ctype[i-1];
var c4 = ctype[i];
var c5 = ctype[i+1];
var c6 = ctype[i+2];
score += this.ts_(this.UP1__[p1]);
score += this.ts_(this.UP2__[p2]);
score += this.ts_(this.UP3__[p3]);
score += this.ts_(this.BP1__[p1 + p2]);
score += this.ts_(this.BP2__[p2 + p3]);
score += this.ts_(this.UW1__[w1]);
score += this.ts_(this.UW2__[w2]);
score += this.ts_(this.UW3__[w3]);
score += this.ts_(this.UW4__[w4]);
score += this.ts_(this.UW5__[w5]);
score += this.ts_(this.UW6__[w6]);
score += this.ts_(this.BW1__[w2 + w3]);
score += this.ts_(this.BW2__[w3 + w4]);
score += this.ts_(this.BW3__[w4 + w5]);
score += this.ts_(this.TW1__[w1 + w2 + w3]);
score += this.ts_(this.TW2__[w2 + w3 + w4]);
score += this.ts_(this.TW3__[w3 + w4 + w5]);
score += this.ts_(this.TW4__[w4 + w5 + w6]);
score += this.ts_(this.UC1__[c1]);
score += this.ts_(this.UC2__[c2]);
score += this.ts_(this.UC3__[c3]);
score += this.ts_(this.UC4__[c4]);
score += this.ts_(this.UC5__[c5]);
score += this.ts_(this.UC6__[c6]);
score += this.ts_(this.BC1__[c2 + c3]);
score += this.ts_(this.BC2__[c3 + c4]);
score += this.ts_(this.BC3__[c4 + c5]);
score += this.ts_(this.TC1__[c1 + c2 + c3]);
score += this.ts_(this.TC2__[c2 + c3 + c4]);
score += this.ts_(this.TC3__[c3 + c4 + c5]);
score += this.ts_(this.TC4__[c4 + c5 + c6]);
// score += this.ts_(this.TC5__[c4 + c5 + c6]);
score += this.ts_(this.UQ1__[p1 + c1]);
score += this.ts_(this.UQ2__[p2 + c2]);
score += this.ts_(this.UQ3__[p3 + c3]);
score += this.ts_(this.BQ1__[p2 + c2 + c3]);
score += this.ts_(this.BQ2__[p2 + c3 + c4]);
score += this.ts_(this.BQ3__[p3 + c2 + c3]);
score += this.ts_(this.BQ4__[p3 + c3 + c4]);
score += this.ts_(this.TQ1__[p2 + c1 + c2 + c3]);
score += this.ts_(this.TQ2__[p2 + c2 + c3 + c4]);
score += this.ts_(this.TQ3__[p3 + c1 + c2 + c3]);
score += this.ts_(this.TQ4__[p3 + c2 + c3 + c4]);
var p = "O";
if (score > 0) {
result.push(word);
word = "";
p = "B";
}
p1 = p2;
p2 = p3;
p3 = p;
word += seg[i];
}
result.push(word);
return result;
}
lunr.TinySegmenter = TinySegmenter;
};
}));

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
{"version":3,"sources":["src/templates/assets/stylesheets/palette/_scheme.scss","../../../../src/templates/assets/stylesheets/palette.scss","src/templates/assets/stylesheets/palette/_accent.scss","src/templates/assets/stylesheets/palette/_primary.scss","src/templates/assets/stylesheets/utilities/_break.scss"],"names":[],"mappings":"AA2BA,cAGE,6BAME,sDAAA,CACA,6DAAA,CACA,+DAAA,CACA,gEAAA,CACA,mDAAA,CACA,6DAAA,CACA,+DAAA,CACA,gEAAA,CAGA,mDAAA,CACA,gDAAA,CAGA,0BAAA,CACA,mCAAA,CAGA,iCAAA,CACA,kCAAA,CACA,mCAAA,CACA,mCAAA,CACA,kCAAA,CACA,iCAAA,CACA,+CAAA,CACA,6DAAA,CACA,gEAAA,CACA,4DAAA,CACA,4DAAA,CACA,6DAAA,CAGA,6CAAA,CAGA,+CAAA,CAGA,uDAAA,CACA,6DAAA,CACA,2DAAA,CAGA,iCAAA,CAGA,yDAAA,CACA,iEAAA,CAGA,mDAAA,CACA,mDAAA,CAGA,qDAAA,CACA,uDAAA,CAGA,8DAAA,CAKA,8DAAA,CAKA,0DAAA,CAvEA,iBCeF,CD6DE,kHAEE,YC3DJ,CDkFE,yDACE,4BChFJ,CD+EE,2DACE,4BC7EJ,CD4EE,gEACE,4BC1EJ,CDyEE,2DACE,4BCvEJ,CDsEE,yDACE,4BCpEJ,CDmEE,0DACE,4BCjEJ,CDgEE,gEACE,4BC9DJ,CD6DE,0DACE,4BC3DJ,CD0DE,2OACE,4BC/CJ,CDsDA,+FAGE,iCCpDF,CACF,CC/CE,2BACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCD2CN,CCrDE,4BACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCDkDN,CC5DE,8BACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCDyDN,CCnEE,mCACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCDgEN,CC1EE,8BACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCDuEN,CCjFE,4BACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCD8EN,CCxFE,kCACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCDqFN,CC/FE,4BACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCD4FN,CCtGE,4BACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCDmGN,CC7GE,6BACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCD0GN,CCpHE,mCACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCDiHN,CC3HE,4BACE,4BAAA,CACA,2CAAA,CAIE,8BAAA,CACA,qCD2HN,CClIE,8BACE,4BAAA,CACA,2CAAA,CAIE,8BAAA,CACA,qCDkIN,CCzIE,6BACE,yBAAA,CACA,2CAAA,CAIE,8BAAA,CACA,qCDyIN,CChJE,8BACE,4BAAA,CACA,2CAAA,CAIE,8BAAA,CACA,qCDgJN,CCvJE,mCACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCDoJN,CEzJE,4BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCFsJN,CEjKE,6BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCF8JN,CEzKE,+BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCFsKN,CEjLE,oCACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCF8KN,CEzLE,+BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCFsLN,CEjME,6BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCF8LN,CEzME,mCACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCFsMN,CEjNE,6BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCF8MN,CEzNE,6BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCFsNN,CEjOE,8BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCF8NN,CEzOE,oCACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCFsON,CEjPE,6BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAIE,+BAAA,CACA,sCFiPN,CEzPE,+BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAIE,+BAAA,CACA,sCFyPN,CEjQE,8BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAIE,+BAAA,CACA,sCFiQN,CEzQE,+BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAIE,+BAAA,CACA,sCFyQN,CEjRE,oCACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCF8QN,CEzRE,8BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCFsRN,CEjSE,6BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCAAA,CAKA,4BF0RN,CE1SE,kCACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCAAA,CAKA,4BFmSN,CEpRE,sEACE,4BFuRJ,CExRE,+DACE,4BF2RJ,CE5RE,iEACE,4BF+RJ,CEhSE,gEACE,4BFmSJ,CEpSE,iEACE,4BFuSJ,CE9RA,8BACE,mDAAA,CACA,4DAAA,CACA,0DAAA,CACA,oDAAA,CACA,2DAAA,CAGA,4BF+RF,CE5RE,yCACE,+BF8RJ,CE3RI,kDAEE,0CAAA,CACA,sCAAA,CAFA,mCF+RN,CG3MI,mCD1EA,+CACE,8CFwRJ,CErRI,qDACE,8CFuRN,CElRE,iEACE,mCFoRJ,CACF,CGtNI,sCDvDA,uCACE,oCFgRJ,CACF,CEvQA,8BACE,kDAAA,CACA,4DAAA,CACA,wDAAA,CACA,oDAAA,CACA,6DAAA,CAGA,4BFwQF,CErQE,yCACE,+BFuQJ,CEpQI,kDAEE,0CAAA,CACA,sCAAA,CAFA,mCFwQN,CEjQE,yCACE,6CFmQJ,CG5NI,0CDhCA,8CACE,gDF+PJ,CACF,CGjOI,0CDvBA,iFACE,6CF2PJ,CACF,CGzPI,sCDKA,uCACE,6CFuPJ,CACF","file":"palette.css"}

1869
v0.24.0/bookmarks/index.html Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,14 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Redirecting...</title>
<link rel="canonical" href="../bookmarks/">
<script>var anchor=window.location.hash.substr(1);location.href="../bookmarks/"+(anchor?"#"+anchor:"")</script>
<meta http-equiv="refresh" content="0; url=../bookmarks/">
</head>
<body>
You're being redirected to a <a href="../bookmarks/">new destination</a>.
</body>
</html>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

33
v0.24.0/config.toml Normal file
View File

@ -0,0 +1,33 @@
# Basic template of config settings
# Don't forget to change these to your own details!
user.name = "YOUR NAME"
user.email = "YOUR_EMAIL@example.com"
ui.color = "auto" # the default
# ui.color = never # no color
ui.editor = "pico" # the default on Unix
# ui.editor = "vim"
ui.diff-editor = ":builtin" # default, internal TUI tool
# ui.diff-editor = "meld"
# ui.diff-editor = "vimdiff"
ui.merge-editor = "meld" # default
# ui.merge-editor = "vscode"
# ui.merge-editor = "vimdiff"
# ui.merge-editor = "kdiff3"
# Relative timestamp rendered as "x days/hours/seconds ago"
template-aliases.'format_timestamp(timestamp)' = 'timestamp.ago()'
# The four merge tools listed above are pre-configured. For detailed information
# about how to change the default configuration or how to configure another tool,
# see documentation in config.md. An example:
# merge-tools.meld.program = "C:\\Program Files\\Meld\\meld.exe" # If not in PATH
# Change the default push/fetch remote for `jj git push` and `jj git fetch`
# git.fetch = "upstream"
# git.push = "myfork"

3548
v0.24.0/config/index.html Normal file

File diff suppressed because it is too large Load Diff

1649
v0.24.0/conflicts/index.html Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More