PageSourceSearch

https://pijul.org/_app/immutable/nodes/2.BKTIn2cV.js

js pijul.org collected 2026-10-02 05:53:38 UTC 24,542 bytes, 145 lines download raw bytes

1import{C as e,F as t,G as n,H as r,I as i,K as a,L as o,M as s,N as c,O as l,P as u,R as d,S as f,V as p,_ as m,c as h,d as g,f as _,g as v,h as y,k as b,m as x,p as S,s as C,v as w,x as T}from"../chunks/CU66kdj3.js";import"../chunks/xihTtKlq.js";var E=w(`<div class="term-comment svelte-y2h150"> </div>`),D=w(`<div class="term-divider svelte-y2h150"><span> </span></div>`),O=w(`<div class="term-file svelte-y2h150"><div class="file-label svelte-y2h150"> </div> <pre class="file-content svelte-y2h150"> </pre></div>`),k=w(`<pre class="term-out svelte-y2h150"></pre>`),A=w(`<div class="term-cmd svelte-y2h150"><span class="term-prompt svelte-y2h150"> </span> <span class="term-cmdtext svelte-y2h150"> </span></div> <!>`,1),j=w(`<button> </button>`),M=w(`<div class="sync-sep svelte-y2h150"></div>`),N=w(`<!> <div class="sync-row svelte-y2h150"><div class="sync-pane svelte-y2h150"><!></div> <div class="sync-pane svelte-y2h150"><!></div></div>`,1),P=w(`<div class="split-titles svelte-y2h150"><div class="term-titlebar svelte-y2h150"><span class="dot red svelte-y2h150"></span> <span class="dot yellow svelte-y2h150"></span> <span class="dot green svelte-y2h150"></span> <span class="term-title svelte-y2h150"> </span></div> <div class="term-titlebar svelte-y2h150"><span class="dot red svelte-y2h150"></span> <span class="dot yellow svelte-y2h150"></span> <span class="dot green svelte-y2h150"></span> <span class="term-title svelte-y2h150"> </span></div></div> <!>`,1),F=w(`<div class="demo-term svelte-y2h150"><div class="term-titlebar svelte-y2h150"><span class="dot red svelte-y2h150"></span> <span class="dot yellow svelte-y2h150"></span> <span class="dot green svelte-y2h150"></span> <span class="term-title svelte-y2h150"> </span></div> <div class="term-body svelte-y2h150"><!></div></div>`),I=w(`<div class="demo-wrap svelte-y2h150"><div class="demo-tabs svelte-y2h150"></div> <!></div>`);function L(s,l){r(l,!0);let h=(r,i=a)=>{var o=m();_(u(o),17,i,S,(r,i)=>{var a=m(),o=u(a),s=t=>{var r=E(),a=c(r);n(r),b(()=>y(a,`# ${e(i).text??``}`)),v(t,r)},l=t=>{var r=D(),a=c(r),o=c(a,!0);n(a),n(r),b(()=>y(o,e(i).label)),v(t,r)},d=r=>{var a=O(),o=c(a),s=c(o,!0);n(o);var l=t(o,2),u=c(l,!0);n(l),n(a),b(()=>{y(s,e(i).label),y(u,e(i).content)}),v(r,a)},f=r=>{var a=A(),o=u(a),s=c(o),l=c(s,!0);n(s);var d=t(s,2),f=c(d,!0);n(d),n(o);var p=t(o,2),m=t=>{var r=k();g(r,()=>J(e(i).out),!0),n(r),v(t,r)};x(p,t=>{e(i).out&&t(m)}),b(()=>{y(l,e(i).prompt),y(f,e(i).cmd)}),v(r,a)};x(o,t=>{e(i).type===`comment`?t(s):e(i).type===`divider`?t(l,1):e(i).type===`file`?t(d,2):e(i).type===`cmd`&&t(f,3)}),v(r,a)}),v(r,o)},w=o(0),T=d(()=>l.scenarios[e(w)]),L=d(()=>e(T).split?e(T).steps.findIndex(e=>e.type===`divider`):-1),R=d(()=>e(T).split===!0&&e(L)>=0),z=d(()=>e(R)?e(T).steps.slice(0,e(L)):[]),B=d(()=>e(R)?e(T).steps.slice(e(L)+1):[]),V=d(()=>e(R)?e(z).find(e=>e.type===`cmd`)?.prompt.replace(/\s*\$.*/,``)??`left`:``),H=d(()=>e(R)?e(B).find(e=>e.type===`cmd`)?.prompt.replace(/\s*\$.*/,``)??`right`:``);function U(e){let t=[],n=[];for(let r of e)r.type===`sync`?(t.push(n),n=[]):n.push(r);return t.push(n),t}let W=d(()=>e(R)?U(e(z)):[e(z)]),G=d(()=>e(R)?U(e(B)):[e(B)]);function K(e){i(w,e,!0)}function q(e){return e.replace(/\x1b\[[0-9;]*m/g,``).replace(/\x1b\[[0-9]*[A-Z]/g,``).trim()}function J(e){return q(e).replace(/^(&gt;&gt;&gt;&gt;&gt;&gt;&gt;.*)$/gm,`<span class="conf-ours">$1</span>`).replace(/^(=======.*)$/gm,`<span class="conf-sep">$1</span>`).replace(/^(&lt;&lt;&lt;&lt;&lt;&lt;&lt;.*)$/gm,`<span class="conf-theirs">$1</span>`).replace(/^(<<<<<<.*)$/gm,`<span class="conf-ours">$1</span>`).replace(/^(>>>>>>>.*)$/gm,`<span class="conf-theirs">$1</span>`)}var Y=I(),X=c(Y);_(X,21,()=>l.scenarios,S,(t,r,i)=>{var a=j();let o;var s=c(a,!0);n(a),b(()=>{o=C(a,1,`demo-tab svelte-y2h150`,null,o,{active:i===e(w)}),y(s,e(r).title)}),f(`click`,a,()=>K(i)),v(t,a)}),n(X);var Z=t(X,2),Q=r=>{var i=P(),a=u(i),o=c(a),s=t(c(o),6),l=c(s,!0);n(s),n(o);var d=t(o,2),f=t(c(d),6),p=c(f,!0);n(f),n(d),n(a),_(t(a,2),17,()=>e(W),S,(r,i,a)=>{var o=N(),s=u(o),l=e=>{v(e,M())};x(s,e=>{a>0&&e(l)});var d=t(s,2),f=c(d);h(c(f),()=>e(i)),n(f);var p=t(f,2);h(c(p),()=>e(G)[a]??[]),n(p),n(d),v(r,o)}),b(()=>{y(l,e(V)),y(p,e(H))}),v(r,i)},$=r=>{var i=F(),a=c(i),o=t(c(a),6),s=c(o,!0);n(o),n(a);
1var l=t(a,2);h(c(l),()=>e(T).steps),n(l),n(i),b(()=>y(s,e(T).subtitle)),v(r,i)};x(Z,t=>{e(R)?t(Q):t($,-1)}),n(Y),v(s,Y),p()}T([`click`]);var R=[{type:`cmd`,prompt:`git $`,cmd:`printf 'A\\nB\\n' > f.txt`,out:``},{type:`cmd`,prompt:`git $`,cmd:`git add f.txt`,out:``},{type:`cmd`,prompt:`git $`,cmd:`git commit -m 'base'`,out:`[main (root-commit) 46fcdd3] base
2 1 file changed, 2 insertions(+)
3 create mode 100644 f.txt`},{type:`sync`},{type:`cmd`,prompt:`git $`,cmd:`git checkout -b alice`,out:`Switched to a new branch 'alice'`},{type:`cmd`,prompt:`git $`,cmd:`printf 'G\\nA\\nB\\n' > f.txt`,out:``},{type:`cmd`,prompt:`git $`,cmd:`git commit -am 'add G at top'`,out:`[alice abfb5f1] add G at top
4 1 file changed, 1 insertion(+)`},{type:`cmd`,prompt:`git $`,cmd:`cat f.txt`,out:`G
5A
6B`},{type:`sync`},{type:`cmd`,prompt:`git $`,cmd:`printf 'A\\nB\\nG\\nA\\nB\\n' > f.txt`,out:``},{type:`cmd`,prompt:`git $`,cmd:`git commit -am 'add A,B at top'`,out:`[alice 77d3d8d] add A,B at top
7 1 file changed, 2 insertions(+)`},{type:`cmd`,prompt:`git $`,cmd:`cat f.txt`,out:`A
8B
9G
10A
11B`},{type:`sync`},{type:`cmd`,prompt:`git $`,cmd:`git checkout main`,out:`Switched to branch 'main'`},{type:`cmd`,prompt:`git $`,cmd:`git checkout -b bob`,out:`Switched to a new branch 'bob'`},{type:`cmd`,prompt:`git $`,cmd:`printf 'A\\nX\\nB\\n' > f.txt`,out:``},{type:`cmd`,prompt:`git $`,cmd:`git commit -am 'insert X between originals'`,out:`[bob 09b6f67] insert X between originals
12 1 file changed, 1 insertion(+)`},{type:`cmd`,prompt:`git $`,cmd:`git checkout main`,out:`Switched to branch 'main'`},{type:`cmd`,prompt:`git $`,cmd:`git merge alice`,out:`Updating 46fcdd3..77d3d8d
13Fast-forward
14 f.txt | 3 +++
15 1 file changed, 3 insertions(+)`},{type:`cmd`,prompt:`git $`,cmd:`git merge bob`,out:`Auto-merging f.txt
16Merge made by the 'ort' strategy.
17 f.txt | 1 +
18 1 file changed, 1 insertion(+)`},{type:`cmd`,prompt:`git $`,cmd:`cat f.txt`,out:`A
19X
20B
21G
22A
23B`},{type:`comment`,text:`X landed between Alice's new lines, not the originals. No conflict, no warning.`},{type:`divider`,label:`same history in pijul`},{type:`cmd`,prompt:`pijul $`,cmd:`pijul init`,out:`Repository created at /tmp/pijul`},{type:`cmd`,prompt:`pijul $`,cmd:`printf 'A\\nB\\n' > f.txt`,out:``},{type:`cmd`,prompt:`pijul $`,cmd:`pijul add f.txt`,out:`Tracked 1 path(s)`},{type:`cmd`,prompt:`pijul $`,cmd:`pijul record -am 'base'`,out:`Hash: 3WW3T5GBOOR3OCU2IDEVHHA7GGXMOHJDOYHCH7L5BWUGHUBHHQIQC`},{type:`sync`},{type:`cmd`,prompt:`pijul $`,cmd:`pijul fork alice`,out:``},{type:`cmd`,prompt:`pijul $`,cmd:`pijul channel switch alice`,out:`Reset given paths to last recorded change`},{type:`cmd`,prompt:`pijul $`,cmd:`printf 'G\\nA\\nB\\n' > f.txt`,out:``},{type:`cmd`,prompt:`pijul $`,cmd:`pijul record -am 'add G at top'`,out:`Hash: GBO3OSMXODHKWDCJRYG3SFVKZH6LZLHJY7L7VUPDQKXO2266P3EQC`},{type:`cmd`,prompt:`pijul $`,cmd:`cat f.txt`,out:`G
24A
25B`},{type:`sync`},{type:`cmd`,prompt:`pijul $`,cmd:`printf 'A\\nB\\nG\\nA\\nB\\n' > f.txt`,out:``},{type:`cmd`,prompt:`pijul $`,cmd:`pijul record -am 'add A,B at top'`,out:`Hash: 6CIUP2TSLW6IXCX7G4RZR3WHY5SEM5BIU7U4LJX6TLOPY3XUYSOQC`},{type:`cmd`,prompt:`pijul $`,cmd:`cat f.txt`,out:`A
26B
27G
28A
29B`},{type:`sync`},{type:`cmd`,prompt:`pijul $`,cmd:`pijul channel switch main`,out:`Reset given paths to last recorded change`},{type:`cmd`,prompt:`pijul $`,cmd:`pijul fork bob`,out:``},{type:`cmd`,prompt:`pijul $`,cmd:`pijul channel switch bob`,out:`Reset given paths to last recorded change`},{type:`cmd`,prompt:`pijul $`,cmd:`printf 'A\\nX\\nB\\n' > f.txt`,out:``},{type:`cmd`,prompt:`pijul $`,cmd:`pijul record -am 'insert X between originals'`,out:`Hash: F5CAUHH7IA2QMSRPNMX7LDQLCMKJKKKEGGACTZ7OXTSHYPDE3WFAC`},{type:`cmd`,prompt:`pijul $`,cmd:`pijul channel switch main`,out:`Reset given paths to last recorded change`},{type:`cmd`,prompt:`pijul $`,cmd:`pijul fork merged`,out:``},{type:`cmd`,prompt:`pijul $`,cmd:`pijul channel switch merged`,out:`Reset given paths to last recorded change`},{type:`cmd`,prompt:`pijul $`,cmd:`pijul pull --all . --from-channel alice`,out:``},{type:`cmd`,prompt:`pijul $`,cmd:`pijul pull --all . --from-channel bob`,out:``},{type:`cmd`,prompt:`pijul $`,cmd:`cat f.txt`,out:`A
30B
31G
32A
33X
34B`},{type:`comment`,text:`X is between the original A and B. Pijul knew which lines were Alice's new ones.`}],z=[{type:`cmd`,prompt:`git $`,cmd:`printf 'A\\nB\\n' > f.txt`,out:``},{type:`cmd`,prompt:`git $`,cmd:`git add f.txt`,out:``},{type:`cmd`,prompt:`git $`,cmd:`git commit -m 'base'`,out:`[main (root-commit) c7b68c9] base
35 1 file changed, 2 insertions(+)
36 create mode 100644 f.txt`},{type:`sync`},{type:`cmd`,prompt:`git $`,cmd:`git checkout -b alice`,out:`Switched to a new branch 'alice'`},{type:`cmd`,prompt:`git $`,cmd:`printf 'A\\nX\\nB\\n' > f.txt`,out:``},{type:`cmd`,prompt:`git $`,cmd:`git commit -am 'insert X'`,out:`[alice ee73b58] insert X
37 1 file changed, 1 insertion(+)`},{type:`sync`},{type:`cmd`,prompt:`git $`,cmd:`git checkout main`,out:`Switched to branch 'main'`},{type:`cmd`,prompt:`git $`,cmd:`git checkout -b bob`,out:`Switched to a new branch 'bob'`},{type:`cmd`,prompt:`git $`,cmd:`printf 'A\\nG\\nB\\n' > f.txt`,out:``},{type:`cmd`,prompt:`git $`,cmd:`git commit -am 'insert G'`,out:`[bob 6b8ce9d] insert G
38 1 file changed, 1 insertion(+)`},{type:`sync`},{type:`cmd`,prompt:`git $`,cmd:`git checkout main`,out:`Switched to branch 'main'`},{type:`cmd`,prompt:`git $`,cmd:`git merge alice`,out:`Updating c7b68c9..ee73b58
39Fast-forward
40 f.txt | 1 +
41 1 file changed, 1 insertion(+)`},{type:`cmd`,prompt:`git $`,cmd:`git merge bob`,out:`Auto-merging f.txt
42CONFLICT (content): Merge conflict in f.txt
43Automatic merge failed; fix conflicts and then commit the result.`},{type:`comment`,text:`Conflict. Resolve: X before G.`},{type:`cmd`,prompt:`git $`,cmd:`printf 'A\\nX\\nG\\nB\\n' > f.txt`,out:``},{type:`cmd`,prompt:`git $`,cmd:`git add f.txt`,out:``},{type:`cmd`,prompt:`git $`,cmd:`git commit -m 'resolve: X before G'`,out:`[main 69da2ad] resolve: X before G`},{type:`cmd`,prompt:`git $`,cmd:`cat f.txt`,out:`A
44X
45G
46B`},{type:`comment`,text:`Resolution is a merge commit — tied to this branch, not to alice⁠​or​⁠bob.`},{type:`comment`,text:`Rebase alice onto bob — the same conflict comes back:`},{type:`cmd`,prompt:`git $`,cmd:`git checkout alice`,out:`Switched to branch 'alice'`},{type:`cmd`,prompt:`git $`,cmd:`git rebase bob`,out:`Rebasing (1/1)\rAuto-merging f.txt
47CONFLICT (content): Merge conflict in f.txt
48error: could not apply ee73b58... insert X`},{type:`comment`,text:`Same conflict again — the resolution doesn't travel with the patches.`},{type:`cmd`,prompt:`git $`,cmd:`git rebase --abort`,out:``},{type:`divider`,label:`same history in pijul`},{type:`cmd`,prompt:`pijul $`,cmd:`pijul init`,out:`Repository created at /tmp/pijul`},{type:`cmd`,prompt:`pijul $`,cmd:`printf 'A\\nB\\n' > f.txt`,out:``},{type:`cmd`,prompt:`pijul $`,cmd:`pijul add f.txt`,out:`Tracked 1 path(s)`},{type:`cmd`,prompt:`pijul $`,cmd:`pijul record -am 'base'`,out:`Hash: 5XOCY67BA7GI55ZIKBOK3GHYPAJL64VLQUAHJD2SLJ3K7G7QSDYQC`},{type:`sync`},{type:`cmd`,prompt:`pijul $`,cmd:`pijul fork alice`,out:``},{type:`cmd`,prompt:`pijul $`,cmd:`pijul channel switch alice`,out:`Reset given paths to last recorded change`},{type:`cmd`,prompt:`pijul $`,cmd:`printf 'A\\nX\\nB\\n' > f.txt`,out:``},{type:`cmd`,prompt:`pijul $`,cmd:`pijul record -am 'insert X'`,out:`Hash: FNKCTALJJZNWJOK2WUU4B6GDHQAUUR4GJOZO4JZYOF4GSLB674IQC`},{type:`sync`},{type:`cmd`,prompt:`pijul $`,cmd:`pijul channel switch main`,out:`Reset given paths to last recorded change`},{type:`cmd`,prompt:`pijul $`,cmd:`pijul fork bob`,out:``},{type:`cmd`,prompt:`pijul $`,cmd:`pijul channel switch bob`,out:`Reset given paths to last recorded change`},{type:`cmd`,prompt:`pijul $`,cmd:`printf 'A\\nG\\nB\\n' > f.txt`,out:``},{type:`cmd`,prompt:`pijul $`,cmd:`pijul record -am 'insert G'`,out:`Hash: DE6RD5KZ3ASCIU5DHAJAZHAUZ5MNLSMZEK3QYVWEWDZI3DTDD5GQC`},{type:`sync`},{type:`cmd`,prompt:`pijul $`,cmd:`pijul channel switch main`,out:`Reset given paths to last recorded change`},{type:`cmd`,prompt:`pijul $`,cmd:`pijul fork merge1`,out:``},{type:`cmd`,prompt:`pijul $`,cmd:`pijul channel switch merge1`,out:`Reset given paths to last recorded change`},{type:`cmd`,prompt:`pijul $`,cmd:`pijul pull --all . --from-channel alice`,out:``},{type:`cmd`,prompt:`pijul $`,cmd:`pijul pull --all . --from-channel bob`,out:`\x1B[0m\x1B[31m
49There were conflicts:
50
51\x1B[0m  - Order conflict in "f.txt" starting on line 2`},{type:`cmd`,prompt:`pijul $`,cmd:`cat f.txt`,out:`A
52>>>>>>> 1 [FNKCTALJ insert X]
53X
54======= 1 [DE6RD5KZ insert G]
55G
56<<<<<<< 1
57B`},{type:`comment`,text:`Same conflict. Resolve: X before G.`},{type:`cmd`,prompt:`pijul $`,cmd:`printf 'A\\nX\\nG\\nB\\n' > f.txt`,out:``},{type:`cmd`,prompt:`pijul $`,cmd:`pijul record -am 'resolve: X before G'`,out:`Hash: S4JVXBW2E5ITVOJR5XC4FYOLT2F2OXAVKKXFY7GPJWQ66QGDLL3QC`},{type:`divider`,label:`new context — pull the resolution patch`},{type:`cmd`,prompt:`pijul $`,cmd:`pijul channel switch main`,out:`Reset given paths to last recorded change`},{type:`cmd`,prompt:`pijul $`,cmd:`pijul fork merge2`,out:``},{type:`cmd`,prompt:`pijul $`,cmd:`pijul channel switch merge2`,out:`Reset given paths to last recorded change`},{type:`cmd`,prompt:`pijul $`,cmd:`pijul pull --all . --from-channel alice`,out:``},{type:`cmd`,prompt:`pijul $`,cmd:`pijul pull --all . --from-channel bob`,out:`\x1B[0m\x1B[31m
58There were conflicts:
59
60\x1B[0m  - Order conflict in "f.txt" starting on line 2`},{type:`cmd`,prompt:`pijul $`,cmd:`cat f.txt`,out:`A
61>>>>>>> 1 [FNKCTALJ insert X]
62X
63======= 1 [DE6RD5KZ insert G]
64G
65<<<<<<< 1
66B`},{type:`comment`,text:`Same conflict — but the resolution already exists as a patch:`},{type:`cmd`,prompt:`pijul $`,cmd:`pijul pull . --from-channel merge1 -- S4JVXBW2`,out:``},{type:`cmd`,prompt:`pijul $`,cmd:`cat f.txt`,out:`A
67X
68G
69B`},{type:`comment`,text:`Done. Push the resolution patch to a remote and no one on the team resolves this conflict again.`}],B=[{type:`cmd`,prompt:`origin $`,cmd:`pijul init`,out:`Repository created at /tmp/nix-shell-1298810-1981740624/tmp.psFkm8OdHP/origin`},{type:`cmd`,prompt:`origin $`,cmd:`printf 'timeout = 30\\nretries = 3\\nfeature_x = false\\n' > config.ini`,out:``},{type:`cmd`,prompt:`origin $`,cmd:`pijul add config.ini`,out:`Tracked 1 path(s)`},{type:`cmd`,prompt:`origin $`,cmd:`pijul record -am 'init'`,out:`Hash: 5ID63T3LGRP6VDOV6ZOI73S4XK3SPM6P3UOWDAGYJAOEA7BBOOEAC`},{type:`cmd`,prompt:`local $`,cmd:`pijul clone ./origin ./local`,out:`Repository created at /tmp/nix-shell-1298810-1981740624/tmp.psFkm8OdHP/./local`},{type:`cmd`,prompt:`local $`,cmd:`cd local`,out:``},{type:`cmd`,prompt:`local $`,cmd:`printf 'timeout = 60\\nretries = 3\\nfeature_x = false\\n' > config.ini`,out:``},{type:`cmd`,prompt:`local $`,cmd:`pijul record -am 'fix: increase timeout to 60s'`,out:`Hash: 7JTQXSL4DD3IS4UCXUZ7WFC4PQQ5DZEOFKJVAIHXC6Z26QA4WZVQC`},{type:`cmd`,prompt:`local $`,cmd:`printf 'timeout = 60\\nretries = 3\\nfeature_x = true\\n' > config.ini`,out:``},{type:`cmd`,prompt:`local $`,cmd:`pijul record -am 'feat: enable feature_x (WIP)'`,out:`Hash: J6MVI25RLVOC7NSTS73KCQG
69XRTJQ67GWQLUU5HDAC3GGNCQRFVCQC`},{type:`cmd`,prompt:`local $`,cmd:`pijul log --limit 3`,out:`Change J6MVI25RLVOC7NSTS73KCQGXRTJQ67GWQLUU5HDAC3GGNCQRFVCQC
70Author: nuempe (pmeunier) <[email protected]>
71Date: 2026-06-17 11:55:52 (CEST)
72
73    feat: enable feature_x (WIP)
74
75Change 7JTQXSL4DD3IS4UCXUZ7WFC4PQQ5DZEOFKJVAIHXC6Z26QA4WZVQC
76Author: nuempe (pmeunier) <[email protected]>
77Date: 2026-06-17 11:55:52 (CEST)
78
79    fix: increase timeout to 60s
80
81Change 5ID63T3LGRP6VDOV6ZOI73S4XK3SPM6P3UOWDAGYJAOEA7BBOOEAC
82Author: nuempe (pmeunier) <[email protected]>
83Date: 2026-06-17 11:55:52 (CEST)
84
85    init`},{type:`comment`,text:`Two independent changes. The fix is ready; the feature is not.`},{type:`divider`,label:`push only the fix`},{type:`cmd`,prompt:`local $`,cmd:`pijul push ../origin -- 7JTQXSL4`,out:``},{type:`cmd`,prompt:`origin $`,cmd:`pijul log`,out:`Change 7JTQXSL4DD3IS4UCXUZ7WFC4PQQ5DZEOFKJVAIHXC6Z26QA4WZVQC
86Author: nuempe (pmeunier) <[email protected]>
87Date: 2026-06-17 11:55:52 (CEST)
88
89    fix: increase timeout to 60s
90
91Change 5ID63T3LGRP6VDOV6ZOI73S4XK3SPM6P3UOWDAGYJAOEA7BBOOEAC
92Author: nuempe (pmeunier) <[email protected]>
93Date: 2026-06-17 11:55:52 (CEST)
94
95    init
96
97Change XHLYA3Q62O73LLOEIPTEW6ET3VYOG6FSY7CCXU6SFE7WKETWDICQC
98Author: 
99Date: 2026-06-17 11:55:52 (CEST)
100
101    `},{type:`cmd`,prompt:`origin $`,cmd:`cat config.ini`,out:`timeout = 60
102retries = 3
103feature_x = false`},{type:`comment`,text:`timeout=60 shipped. feature_x=false stayed local. Push the feature when ready.`}],V=[{type:`cmd`,prompt:`repo $`,cmd:`pijul init`,out:`Repository created at /tmp/nix-shell-1298810-1981740624/tmp.tYc65GNxAU`},{type:`cmd`,prompt:`repo $`,cmd:`printf 'version = "1.0"\\nauthor = "Alic"\\n' > manifest.toml`,out:``},{type:`cmd`,prompt:`repo $`,cmd:`pijul add manifest.toml`,out:`Tracked 1 path(s)`},{type:`cmd`,prompt:`repo $`,cmd:`pijul record -am 'add manifest (typo: Alic)'`,out:`Hash: SL3NC22D6QZJGR5ZBURWIRSAUP33EPBNONYZE3KZUY63N34HFRLAC`},{type:`cmd`,prompt:`repo $`,cmd:`printf '# My project\\n\\nA useful CLI tool.\\n' > README.md`,out:``},{type:`cmd`,prompt:`repo $`,cmd:`pijul add README.md`,out:`Tracked 1 path(s)`},{type:`cmd`,prompt:`repo $`,cmd:`pijul record -am 'add README'`,out:`Hash: HB5M4X6LZ77HP3FW5Z24AB2W2MFJAHNQ5E3ZSWRG72ZHVQCD76MAC`},{type:`cmd`,prompt:`repo $`,cmd:`pijul log`,out:`Change HB5M4X6LZ77HP3FW5Z24AB2W2MFJAHNQ5E3ZSWRG72ZHVQCD76MAC
104Author: nuempe (pmeunier) <[email protected]>
105Date: 2026-06-17 11:55:53 (CEST)
106
107    add README
108
109Change SL3NC22D6QZJGR5ZBURWIRSAUP33EPBNONYZE3KZUY63N34HFRLAC
110Author: nuempe (pmeunier) <[email protected]>
111Date: 2026-06-17 11:55:52 (CEST)
112
113    add manifest (typo: Alic)
114
115Change BWRXGTR4ZBYD3XSLGBKGA3COV5NY3ZARKH6RPWOGX3CSM5NFFSZQC
116Author: 
117Date: 2026-06-17 11:55:52 (CEST)
118
119    `},{type:`cmd`,prompt:`repo $`,cmd:`cat manifest.toml`,out:`version = "1.0"
120author = "Alic"`},{type:`divider`,label:`unrecord the manifest typo`},{type:`comment`,text:`Unrecord only the manifest change. README is independent — it stays.`},{type:`cmd`,prompt:`repo $`,cmd:`pijul unrecord SL3NC22D`,out:``},{type:`cmd`,prompt:`repo $`,cmd:`cat manifest.toml`,out:`version = "1.0"
121author = "Alic"`},{type:`cmd`,prompt:`repo $`,cmd:`cat README.md`,out:`# My project
122
123A useful CLI tool.`},{type:`comment`,text:`manifest.toml is back in the working tree with the typo. Fix it and re-record:`},{type:`cmd`,prompt:`repo $`,cmd:`printf 'version = "1.0"\\nauthor = "Alice"\\n' > manifest.toml`,out:``},{type:`cmd`,prompt:`repo $`,cmd:`pijul record -am 'add manifest'`,out:`Hash: MDJ44AQ6BSAPXPOBVFP4E2AZNJFC57N4QESHSV7B4NMBC7CRW2YQC`},{type:`cmd`,prompt:`repo $`,cmd:`pijul log`,out:`Change MDJ44AQ6BSAPXPOBVFP4E2AZNJFC57N4QESHSV7B4NMBC7CRW2YQC
124Author: nuempe (pmeunier) <[email protected]>
125Date: 2026-06-17 11:55:53 (CEST)
126
127    add manifest
128
129Change HB5M4X6LZ77HP3FW5Z24AB2W2MFJAHNQ5E3ZSWRG72ZHVQCD76MAC
130Author: nuempe (pmeunier) <[email protected]>
131Date: 2026-06-17 11:55:53 (CEST)
132
133    add README
134
135Change BWRXGTR4ZBYD3XSLGBKGA3COV5NY3ZARKH6RPWOGX3CSM5NFFSZQC
136Author: 
137Date: 2026-06-17 11:55:52 (CEST)
138
139    `},{type:`comment`,text:`Clean history. No rebase, no force-push.`}],H=w(`<meta name="description" content="Pijul is a free and open source distributed version control system based on a theory of patches."/>`),U=w(`<div class="home-wrap svelte-1uha8ag"><div class="hero svelte-1uha8ag"><div class="hero-bar svelte-1uha8ag"><span class="hero-tag svelte-1uha8ag">VCS</span> <span class="hero-sep svelte-1uha8ag">·</span> <span>
139pijul.org</span> <span class="hero-sep svelte-1uha8ag">·</span> <span>DISTRIBUTED · CORRECT · OPEN SOURCE</span></div> <div class="hero-body svelte-1uha8ag"><p class="hero-headline svelte-1uha8ag">pijul</p> <p class="hero-desc svelte-1uha8ag">A distributed version control system built on a mathematically sound theory of patches —
140        fast, composable, and correct by construction.</p> <div class="hero-actions svelte-1uha8ag"><a href="/downloads" class="btn btn-primary btn-sm">install</a> <a href="https://nest.pijul.com" target="_blank" rel="noopener" class="btn btn-sm btn-ghost nest-btn svelte-1uha8ag">nest.pijul.com ↗</a> <a href="/posts" class="btn btn-sm btn-ghost">blog</a></div></div></div> <div class="sect-head" style="margin-top: 2rem;">why pijul</div> <div class="feature-grid svelte-1uha8ag"><div class="term-panel feature-panel svelte-1uha8ag"><div class="panel-head">commutation</div> <div class="panel-body svelte-1uha8ag"><p class="svelte-1uha8ag">Independent changes can be applied in <strong>any order</strong> without changing the
141          result or the version identifier. No more <code>git rebase</code> ceremony.</p> <p class="feature-note svelte-1uha8ag">Feature branches are often just changes in Pijul. Keeping history clean is the default.</p></div></div> <div class="term-panel feature-panel svelte-1uha8ag"><div class="panel-head">merge correctness</div> <div class="panel-body svelte-1uha8ag"><p class="svelte-1uha8ag">Strong guarantees on merges. The <strong>order between lines is always preserved</strong>,
142          unlike 3-way merge which can silently shuffle content.</p> <p class="feature-note svelte-1uha8ag">When order is genuinely unknown, Pijul surfaces a conflict — never silently wrong output.</p></div></div> <div class="term-panel feature-panel svelte-1uha8ag"><div class="panel-head">first-class conflicts</div> <div class="panel-body svelte-1uha8ag"><p class="svelte-1uha8ag">Once resolved, conflict resolutions applies to the same two changes everywhere. Conflicts
143          never come back.</p> <p class="feature-note svelte-1uha8ag">Conflicts are not a failure to merge in Pijul, they happen between two changes and are
144          resolved by one change. Just like everything else.</p></div></div> <div class="term-panel feature-panel svelte-1uha8ag"><div class="panel-head">partial clones</div> <div class="panel-body svelte-1uha8ag"><p class="svelte-1uha8ag">Commutation makes it possible to clone only a <strong>subset of a repository</strong>.
145          Working on a partial clone produces changes that merge cleanly into the full repo.</p> <p class="feature-note svelte-1uha8ag">Ideal for monorepos: work on just the parts you care about.</p></div></div></div> <div class="sect-head" style="margin-top: 2rem;">get started</div> <div class="term-panel"><div class="panel-head">bootstrap — pijul is developed with pijul</div> <div class="panel-body get-panel svelte-1uha8ag"><div class="get-left"><p class="get-label svelte-1uha8ag">quick install</p> <pre class="cmd-block svelte-1uha8ag">$ cargo install pijul --version "~1.0.0-beta"</pre> <p class="get-label svelte-1uha8ag" style="margin-top:1rem;">clone source</p> <pre class="cmd-block svelte-1uha8ag">$ pijul clone https://nest.pijul.com/pijul/pijul</pre> <a href="/downloads" class="link text-sm" style="margin-top:0.75rem;display:inline-block;">more install options →</a></div> <div class="get-right svelte-1uha8ag"><p class="get-label svelte-1uha8ag">repository</p> <a href="https://nest.pijul.com/pijul/pijul" target="_blank" rel="noopener" class="repo-link svelte-1uha8ag">nest.pijul.com/pijul/pijul</a> <p class="get-desc svelte-1uha8ag">Hosted on the Nest — Pijul's own repository hosting platform.</p> <a href="https://nest.pijul.com" target="_blank" rel="noopener" class="btn btn-sm nest-cta svelte-1uha8ag">free hosting ↗</a></div></div></div> <div class="sect-head" style="margin-top: 2rem;">see it in action</div> <!></div>`);function W(e){let r=[{id:`silent-bad-merge`,title:`no silent corruption`,subtitle:`git shuffles lines without warning — pijul tracks line identity`,steps:R,split:!0}
145,{id:`resolution`,title:`resolution as a patch`,subtitle:`resolve a conflict once — pulling never brings it back`,steps:z,split:!0},{id:`selective`,title:`selective push`,subtitle:`push only the patches you want — no branch ceremony`,steps:B},{id:`unrecord`,title:`unrecord`,subtitle:`take back a change without rebase or force-push`,steps:V}];var i=U();h(`1uha8ag`,e=>{var t=H();l(()=>{s.title=`Pijul — A Distributed Version Control System`}),v(e,t)}),L(t(c(i),12),{get scenarios(){return r}}),n(i),v(e,i)}export{W as component};

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.