PageSourceSearch

https://pijul.org/faq

html pijul.org collected 2026-10-02 05:53:28 UTC 11,243 bytes, 82 lines download raw bytes

1<!doctype html>
2<html lang="en" data-theme="pijul-dark">
3  <head>
4    <meta charset="utf-8" />
5    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
6    <link rel="shortcut icon" href="data:image/x-icon;," type="image/x-icon" />
7    <link rel="stylesheet" href="/katex/katex.min.css" />
8    <!-- Theme init: runs before paint to avoid flash -->
9    
9<script>
10      (function () {
11        try {
12          var saved = localStorage.getItem('pijul-theme');
13          var osPref = window.matchMedia('(prefers-color-scheme: dark)').matches
14            ? 'pijul-dark'
15            : 'pijul-light';
16          document.documentElement.dataset.theme = saved || osPref;
17        } catch (e) {}
18      })();
19    </script>
19
20    <link href="./_app/immutable/entry/start.CUftgLcX.js" rel="modulepreload">
21		<link href="./_app/immutable/chunks/BEMg2Jgn.js" rel="modulepreload">
22		<link href="./_app/immutable/chunks/CU66kdj3.js" rel="modulepreload">
23		<link href="./_app/immutable/chunks/BuFlayix.js" rel="modulepreload">
24		<link href="./_app/immutable/entry/app.BveBySSJ.js" rel="modulepreload">
25		<link href="./_app/immutable/chunks/kNaey6uv.js" rel="modulepreload">
26		<link href="./_app/immutable/chunks/xihTtKlq.js" rel="modulepreload">
27		<link href="./_app/immutable/nodes/0.BhjjEtcO.js" rel="modulepreload">
28		<link href="./_app/immutable/chunks/4TKzLdHV.js" rel="modulepreload">
29		<link href="./_app/immutable/nodes/5.w3PhRxp8.js" rel="modulepreload">
30		<!--1bex8oj--><!----><title>Pijul — FAQ</title>
31		<link href="./_app/immutable/assets/0.Bi8KuicW.css" rel="stylesheet">
32		<link href="./_app/immutable/assets/5.CLM032xq.css" rel="stylesheet">
33  </head>
34  <body data-sveltekit-prefetch class="min-h-screen">
35    <div style="display: contents"><!--[--><!--[0--><!--[--><div class="flex flex-col min-h-screen svelte-12qhfyh"><header class="site-nav svelte-12qhfyh"><div class="container mx-auto flex items-center px-4 py-2 gap-4 flex-wrap svelte-12qhfyh"><a href="/" class="brand-link svelte-12qhfyh" aria-label="pijul home"><svg width="76" height="22" viewBox="0 0 76 22" fill="none" xmlns="http://www.w3.org/2000/svg" aria-label="pijul" role="img"><line x1="0" y1="2" x2="76" y2="2" stroke="currentColor" stroke-width="1"></line><text x="5" y="15.5" font-family="'Iosevka Term', Consolas, 'Courier New', monospace" font-size="12" font-weight="700" letter-spacing="2.5" fill="currentColor">pijul</text><line x1="0" y1="19" x2="76" y2="19" stroke="currentColor" stroke-width="1"></line></svg><!----></a> <nav class="flex items-center gap-1 flex-wrap ms-auto svelte-12qhfyh"><!--[--><a href="/" class="nav-link svelte-12qhfyh">home</a><a href="/downloads" class="nav-link svelte-12qhfyh">downloads</a><a href="/manual" class="nav-link svelte-12qhfyh">docs</a><a href="/faq" class="nav-link svelte-12qhfyh nav-active">faq</a><a href="/posts" class="nav-link svelte-12qhfyh">blog</a><a href="/community" class="nav-link svelte-12qhfyh">community</a><!--]--> <a href="https://nest.pijul.com" target="_blank" rel="noopener noreferrer" class="nav-link nav-external svelte-12qhfyh">nest ↗</a> <button class="theme-toggle svelte-peft1f" aria-label="Toggle colour theme" title="Switch to light theme"><!--[0-->◑<!--]--></button><!----></nav></div></header> <main class="flex-1 px-3 container mx-auto py-6 svelte-12qhfyh"><!--[--><div class="page-wrap svelte-1bex8oj"><div class="sect-head">frequently asked questions</div> <div class="faq-list svelte-1bex8oj"><details class="faq-item svelte-1bex8oj"><summary class="faq-q svelte-1bex8oj">What is a version control system?</summary> <div class="faq-a prose svelte-1bex8oj"><p>A version control system is a piece of software that allows different authors to work
36          collaboratively and asynchronously on a file, keeps track of their changes and alerts them
37          when their edits are conflicting.</p> <p>It can also be used by single authors to review and revert their changes. It is distinct
38          from a parallel editor, in which all authors edit the same file concurrently.</p></div></details> <details class="faq-item svelte-1bex8oj"><summary class="faq-q svelte-1bex8oj">Why a new version control system?</summary> <div class="faq-a prose svelte-1bex8oj"><p>There are basically two approaches to version control: <strong>snapshot-based</strong> (git, mercurial, svn) or <strong>patch-based</strong> (darcs). Historically, patch-based systems
39          have been very simple to learn and use, but slow, whereas snapshot-based systems can be extremely
40          fast, but are usually hard to use for more than simple operations.</p> <p>Pijul <strong>combines</strong> these approaches, representing data in a more general way that
41          allows efficient patch operations. Merges and conflicts are where this is most relevant.</p></div></details> <details class="faq-item svelte-1bex8oj"><summary class="faq-q svelte-1bex8oj">What's wrong with existing, widely-used solutions?</summary> <div class="faq-a prose svelte-1bex8oj"><p>Some things are really wrong, like using three-way merge for version control: there are
42          real-world examples where Git, Mercurial and SVN just do the <a href="https://tahoe-lafs.org/~zooko/badmerge/simple.html" target="_blank" rel="noopener">wrong thing</a>.</p> <p>Our experience with patch-based tools suggests this is possibly the simplest and most
43          efficient way to control versions.</p></div></details> <details class="faq-item svelte-1bex8oj"><summary class="faq-q svelte-1bex8oj">How can I contribute to funding the development?</summary> <div class="faq-a prose svelte-1bex8oj"><p>Thank you! We have an <a href="https://opencollective.com/pijul" target="_blank" rel="noopener">OpenCollective fund</a> if you are interested in helping the project financially.</p></div></details> <details class="faq-item svelte-1bex8oj"><summary class="faq-q svelte-1bex8oj">Does Pijul handle monorepos?</summary> <div class="faq-a prose svelte-1bex8oj"><p>Pijul makes it easy to get only a subset of patches, and takes care of dependencies
44          between patches to produce files consistent with a giant remote repository. If you are
45          interested in trying it out for a large project, please <a href="mailto:[email protected]">contact us</a>.</p></div></details> <details class="faq-item svelte-1bex8oj"><summary class="faq-q svelte-1bex8oj">Where does the name come from?</summary> <div class="faq-a prose svelte-1bex8oj"><p>Pijul is the Mexican name of <a href="https://en.wikipedia.org/wiki/Groove-billed_ani" target="_blank" rel="noopener">Crotophaga sulcirostris</a>
45, a bird known for collaborative nest building.</p></div></details> <details class="faq-item svelte-1bex8oj"><summary class="faq-q svelte-1bex8oj">How does it compare to others?</summary> <div class="faq-a prose svelte-1bex8oj"><p>It improves on darcs by speed and branch support. Compared to git/mercurial, the workflows
46          are quite different:</p> <ul><li>In Pijul, when you work with others, you often type commands such as "<em>send my changes to others</em>".</li> <li>In Git/Mercurial, the most common workflow is a "pull request", asking the system to
47            compare versions and compute a "consistent" set of changes — where <a href="https://tahoe-lafs.org/~zooko/badmerge/simple.html" target="_blank" rel="noopener">consistent is not what you think</a>.</li></ul></div></details> <details class="faq-item svelte-1bex8oj"><summary class="faq-q svelte-1bex8oj">Did you solve the "exponential merge problem" darcs has?</summary> <div class="faq-a prose svelte-1bex8oj"><p><strong>Yes.</strong> Pijul works in time logarithmic in the size of history for all non-conflicting
48          patches (and almost all conflicting patches), and never exceeds linear time in conflicting cases.</p> <p>The only caveat is that Pijul does not yet have an equivalent of <code>darcs replace</code>.</p></div></details> <details class="faq-item svelte-1bex8oj"><summary class="faq-q svelte-1bex8oj">Is it possible to refer to a specific version?</summary> <div class="faq-a prose svelte-1bex8oj"><p>Since Pijul operates on patches rather than snapshots, versions are essentially unordered
49          sets of patches. We solve the problem of communicating a specific version number by <a href="/posts/2020-11-07-towards-1.0">abusing elliptic curve cryptography primitives</a>.</p></div></details> <details class="faq-item svelte-1bex8oj"><summary class="faq-q svelte-1bex8oj">What is the license of Pijul?</summary> <div class="faq-a prose svelte-1bex8oj"><p>The license is GPL2, or any later version at your convenience. Pijul is free software and
50          can be used freely to develop any kind of projects, including commercial ones.</p> <p>If you are interested in using our base library, <em>libpijul</em>, in a project with a
51          commercial license, <a href="mailto:[email protected]">please contact us</a>.</p></div></details> <details class="faq-item svelte-1bex8oj"><summary class="faq-q svelte-1bex8oj">Can Pijul handle large files?</summary> <div class="faq-a prose svelte-1bex8oj"><p>Yes, but we don't have a good diff algorithm for them at the moment. Pijul could still
52          perform reasonably well since <a href="/posts/2020-12-19-partials">you don't have to download intermediate versions of binary files</a> to work with a repository.</p></div></details> <details class="faq-item svelte-1bex8oj"><summary class="faq-q svelte-1bex8oj" id="cherrypicking">What's the deal with cherry-picking?</summary> <div class="faq-a prose svelte-1bex8oj"><p>In Git, cherry-picking takes some commits from another branch and rebases them onto the
53          current branch, <strong>losing their identity</strong>. This causes artificial conflicts
54          if you cherry-pick again between the same branches.</p> <p>In Pijul, there are no "merge patches". Merging patches from a branch is equivalent to
55          pulling from the branch. Cherry-picking works correctly and can be repeated without
56          conflicts.</p></div></details></div></div><!--]--><!----></main> <footer class="site-footer svelte-12qhfyh"><div class="container mx-auto flex items-center justify-center gap-4 px-4 py-3 flex-wrap svelte-12qhfyh"><span class="dim svelte-12qhfyh">© 2016–2026 Pierre-Étienne Meunier &amp; Florent Becker</span> <span class="dim svelte-12qhfyh">·</span> <a href="/community" class="svelte-12qhfyh">community</a> <span class="dim svelte-12qhfyh">·</span> <a href="/faq" class="svelte-12qhfyh">faq</a> <span class="dim svelte-12qhfyh">·</span> <a href="mailto:[email protected]" class="svelte-12qhfyh">contact</a></div></footer></div><!--]--><!--]--> <!--[-1--><!--]--><!--]-->
57			
58			
58<script>
59				{
60					
61					__sveltekit_1jwig4c = {
62						base: new URL(".", location).pathname.slice(0, -1)
63					};
64
65					const element = document.currentScript.parentElement;
66
67					Promise.all([
68						import("./_app/immutable/entry/start.CUftgLcX.js"),
69						import("./_app/immutable/entry/app.BveBySSJ.js")
70					]).then(([kit, app]) => {
71						kit.start(app, element, {
72							node_ids: [0, 5],
73							data: [null,null],
74							form: null,
75							error: null
76						});
77					});
78				}
79			</script>
79
80		</div>
81  </body>
82</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.