UXLO2KVDT7D5HJSSRWQHWAY2M6K57HWBKL45TDIXYJODEK57AB5AC
BZTIJPUBKOH4OHNCB5V2WUPZIO57MZHJYTIHC4POIW24V3RHBKWAC
BRKBOTWHOR6GA2DRF7KF6IGOM3FP33UMN6JGTD3GP2SQSO6DJDTQC
5LKTNB6ODFPX45VJBT5H34WZFJBVWWYSCS2HRMKKJPPO3M2M75NAC
UH3YXOLFMHJD6GJOW6P5BSHAM5XVV623ZBEYNKSF5YFFSGC7UWPAC
UYGSVBN7QR3YK6LTBMYIHDDVZPG25MBKPN2JLFDVCY3NEEPCQBAQC
S55XICBMLEIJNISCTFHJNSQ35TO7OHKF43X6LHH6JDTUOJMEYV2AC
WYULWETJ4VKT2UOTKJWJTBO7W2TDXUWMLCN7WT5543H7VQ57FGRQC
CBUCBYTVFSAQ3GYIJBE7MGYCEQ3SPDYVJ3OZ4JM2QM4TM6H6GFSQC
ARAFRHKULUG66WDRPKJB4GL5WCMP4LD2TRTYO3RA2T3XZDRLXEUQC
QEKU5M3OVXXVOSJUAXAL63VSYARZPXYMZRXPO73BVB574C4JDW7AC
JSFDZRYKCZ6TRVBUSA7WEXXVHGH5KCKZG2LBYNQUGMQVP373QQMQC
4AZS4L6BP7TTCR5RUB36TG5PTEEIMSTGKB5IVB5QNHJVMRF7LMZQC
KPHR32IR66UCKNT6ZSMILVAHDFQWWEW2X64QNHFEJOINV7IG5GMQC
36IPNPISP2QHGNUC73DWTSC2HH6PKKMD7KBRWC2GABY5D5IZ5BLAC
SQWPGFUETQPYAW2VZRIDZWGXQN4GCMSPHYQ4PLWMESLDJTPACGXAC
NYFLNSVVETUQ6ODIEMFKWUXPLWM2XQNSKLO5J7ZHCHP6L5JQLSEQC
LDVTVP2G3QAJ6RRRJRUI7LS36GEKVFE2LSGC4J5MOCTQT4K5Z5HQC
And his question proved that he had noticed an **entirely** different thing than I had.
Moreover, his 'discovery' - if you will - proved to be a **lot** more interesting than mine.
And her question proved that she had noticed an **entirely** different thing than I had.
Moreover, her 'discovery' - if you will - actually proved to be a **lot** more interesting than mine.
Now afterwards, I really felt bad about not being able to answer his question directly.
I had effectively told the guy that "Git will probably be around forever", even if I didn't phrase it exactly like that.
Now afterwards, I really felt bad about not being able to answer my student's question directly.
I had effectively told her that "Git will probably be around forever", even if I didn't phrase it exactly like that.
* Distributed
* Free & open-source
* Fast
* Optimized for branching
* Distributed <!-- .element: class="fragment fade-in-then-semi-out" -->
* Free & open-source <!-- .element: class="fragment fade-in-then-semi-out" -->
* Fast <!-- .element: class="fragment fade-in-then-semi-out" -->
* Optimized for branching <!-- .element: class="fragment fade-in-then-semi-out" -->
* **Optimized for branching**
* In the Subversion age, developers 'were afraid of branching', so they didn't do it!
* **Optimized for branching**
* Like Subversion, Git has 'easy branching'.
* In the CVS age, developers 'were afraid of branching', so they didn't do it!
Which were present on **every** slide.
They were obviously a major waste of space.
Also: the background gradient.
The page number at the bottom.
Which were repeated on **every** slide.
Disastrous!
Major waste of space.
Also: the background gradient.
What is up with that?
Nobody uses that any more.
The page numbers at the bottom.
Also, if more people know your product, then in theory they can come up with fresh new ideas that your product doesn't have.
Also, if more people know your product, then in theory there are more people that can come up with fresh new ideas that your product doesn't have.
These four Version Control Systems have been published after the large Distributed Version Control wave in March/April 2005.
These three Version Control Systems have been published after the large Distributed Version Control wave in March/April 2005.
---
## Veracity (2011)
* Distributed version control
* Issue tracking and wiki, also distributed
![Veracity logo](img/logos/veracity.png) <!-- .element: class="no-background" -->
<http://www.veracity-scm.com> <!-- .element: class="attribution" -->
---
## But
#### Veracity is not going to be 'the Git killer'
* Development status: web site appears unmaintained; latest release March 25, 2013
* Hosting platform www.onveracity.com hasn't been online since February 4, 2015
note:
Sorry if this is a bit of an anti-climax.
But in the talk abstract I included Veracity as one of the contenders.
And when I wrote the abstract I never thought about the fact that it could disappear from the Internet altogether.
Because that's literally what happened.
But no worries, I've found a replacement contender!
Which is Plastic.
* Fast branching
* Merge previews
* Both central and distributed
* Comes with **a lot** of GUI stuff
* Fast branching <!-- .element: class="fragment fade-in-then-semi-out" -->
* Merge previews <!-- .element: class="fragment fade-in-then-semi-out" -->
* Both central and distributed <!-- .element: class="fragment fade-in-then-semi-out" -->
* Comes with a lot of GUI stuff <!-- .element: class="fragment fade-in-then-semi-out" -->
* 'Plastic Gluon' is a version control component meant for artists and designers
* Image diffing
* References on their website are exclusively from game studios
* 'Plastic Gluon' is a version control component meant for artists and designers <!-- .element: class="fragment fade-in-then-semi-out" -->
* Image diffing <!-- .element: class="fragment fade-in-then-semi-out" -->
* References on their website are exclusively from game studios <!-- .element: class="fragment fade-in-then-semi-out" -->
* it's not open-source software
* Git users are not changing their VCS just for some *eye candy*
* it's not open-source software <!-- .element: class="fragment fade-in-then-semi-out" -->
* Git users are not changing their VCS just for some eye candy <!-- .element: class="fragment fade-in-then-semi-out" -->
* **distributed** version control
* **integrated bug tracking**, wiki, forum and technotes
* built-in **web interface**
* **autosync** mode
* show **descendants** of a check-in
* supports operations on multiple repositories (`fossil all`)
<ul>
<li class="fragment fade-in-then-semi-out">distributed version control</li>
<li class="fragment fade-in-then-semi-out">integrated bug tracking, wiki, forum and technotes</li>
<li class="fragment fade-in-then-semi-out">built-in web interface</li>
<li class="fragment fade-in-then-semi-out">autosync mode</li>
<li class="fragment fade-in-then-semi-out">show descendants of a check-in</li>
<li class="fragment fade-in-then-semi-out">supports operations on multiple repositories (<code>fossil all</code>)</li>
</ul>
* Written in C and SQL
* Is the VCS of choice for the SQLite project
* 'Github in a box'
* Free code hosting at:
* Written in C and SQL <!-- .element: class="fragment fade-in-then-semi-out" -->
* Is the VCS of choice for the SQLite project <!-- .element: class="fragment fade-in-then-semi-out" -->
* 'Github in a box' <!-- .element: class="fragment fade-in-then-semi-out" -->
* Free code hosting at: <!-- .element: class="fragment fade-in-then-semi-out" -->
* a repository is stored in a single SQLite database file
* contains relations between check-ins to be able to produce both ancestors and descendants of a check-in
* a repository is stored in a single SQLite database file <!-- .element: class="fragment fade-in-then-semi-out" -->
* contains relations between check-ins to be able to produce both ancestors and descendants of a check-in <!-- .element: class="fragment fade-in-then-semi-out" -->
* repository UI (`fossil ui`)
* wiki, ticketing & bug tracking
* embedded documentation
* technical notes
* forum
<ul>
<li class="fragment fade-in-then-semi-out">repository UI (<code>fossil ui</code>)</li>
<li class="fragment fade-in-then-semi-out">wiki, ticketing & bug tracking</li>
<li class="fragment fade-in-then-semi-out">embedded documentation</li>
<li class="fragment fade-in-then-semi-out">technical notes</li>
<li class="fragment fade-in-then-semi-out">forum</li>
</ul>
* **distributed** version control
* **simple**, because of its basis on a *sound theory of patches*
* **fast**, because it aims to fix the Darcs performance issues
* **interactive** recording
* distributed version control <!-- .element: class="fragment fade-in-then-semi-out" -->
* simple, because of its basis on a sound theory of patches <!-- .element: class="fragment fade-in-then-semi-out" -->
* fast, because it aims to fix the Darcs performance issues <!-- .element: class="fragment fade-in-then-semi-out" -->
* interactive recording <!-- .element: class="fragment fade-in-then-semi-out" -->
* written in Rust
* *bootstrapped* since April 2017
* free code hosting at <https://nest.pijul.com>
<ul>
<li class="fragment fade-in-then-semi-out">written in Rust
<li class="fragment fade-in-then-semi-out">bootstrapped since April 2017
<li class="fragment fade-in-then-semi-out">free code hosting at
<a href="https://nest.pijul.com">https://nest.pijul.com</a>
</ul>
* A patch is an intuitive atomic unit of work.
* It focuses on *changes*, instead of *differences between snapshots* (i.e. Git commits).
* Applying or unapplying a patch *doesn't change* its identity.
* The end result of applying several patches is always the same, regardless of the order in which they were applied.
* Pijul keeps track of 'dependent patches'
* No merges or rebases; applying a patch is like `git cherry-pick`.
<ul>
<li class="fragment fade-in-then-semi-out">A patch is an intuitive atomic unit of work.</li>
<li class="fragment fade-in-then-semi-out">It focuses on <em>changes</em>, instead of <em>differences between snapshots</em> (i.e. Git commits).</li>
<li class="fragment fade-in-then-semi-out">Applying or unapplying a patch <em>doesn't change</em> its identity.</li>
<li class="fragment fade-in-then-semi-out">The end result of applying several patches is always the same, regardless of the order in which they were applied.</li>
<li class="fragment fade-in-then-semi-out">Pijul keeps track of 'dependent patches'</li>
<li class="fragment fade-in-then-semi-out">No merges or rebases; applying a patch is like <code>git cherry-pick</code>.</li>
</ul>
pijul init demo
touch Sample.java
pijul status
pijul add Sample.java
mkdir directory
pijul add directory
pijul status
pijul record
`pijul init demo`
`touch Sample.java`
`pijul status`
`pijul add Sample.java`
`mkdir directory`
`pijul add directory`
`pijul status`
`pijul record `
(Here y means yes, n means no, k means undo and remake last decision, a means include this and all remaining patches, d means include neither this patch nor the remaining patches and i means ignore this file locally (i.e. it is added to .pijul/local/ignore).)
(Here `y` means yes, `n` means no, `k` means undo and remake last decision, `a` means include this and all remaining patches, `d` means include neither this patch nor the remaining patches and `i` means ignore this file locally (i.e. it is added to .pijul/local/ignore).)
* Killer features.
* Hosting platform support.
* Open-source community support.
* The disadvantage of the dominant product.
* Killer features. <!-- .element: class="fragment fade-in-then-semi-out" -->
* Hosting platform support. <!-- .element: class="fragment fade-in-then-semi-out" -->
* Open-source community support. <!-- .element: class="fragment fade-in-then-semi-out" -->
* The disadvantage of the dominant product. <!-- .element: class="fragment fade-in-then-semi-out" -->