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 & 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.