Hauska versionhallintajärjestelmä, jonka perusidea on se, että versionhallintajärjestelmän tehtävä ei ole seurata tiedostojen (tai tiedostopuiden) tilaa eri ajankohtina vaan tiedostoihin tehtyjä muutoksia. Tiedostopuun tietty tila määritetään vain joukkona muutoksia tyhjään puuhun.
Erityisesti, darcsissa branch ("haara") ei ole tietystä projektin tilasta luotu vaihtoehtoinen jatko. Mitkä tahansa kaksi joukkoa muutoksia ovat toistensa haaroja, mikäli niissä on yhteisiä muutoksia. Darcs ei piittaa, mikä muutos alun perin edelsi mitäkin tai missä vaiheessa mikin muutos siirrettiin näiden haarojen välillä ja mihin suuntaan. Darcs vain huolehtii siitä, että samat muutokset tuottavat täsmälleen saman lopputuloksen riippumatta siitä, missä järjestyksessä ne on saatu.
Lähestymistapa on sikäli hyvin perusteltu, että muutoksista (konteksteineen) voi aina konstruoida niiden tuottaman tiedoston, mutta kahdesta tiedostosta ei voi yksiselitteisesti rekonstruoida niiden välisiä muutoksia. Lisäksi muutosten seuraaminen avaa oven erilaisille muutostyypeille, eli perinteisten patch-hunkien lisäksi esimerkiksi sisällön siirrolle paikasta toiseen, tiedostojen lisäämisille, poistoille ja uudelleennimeämisille, tietyn merkkijonon jokaisen esiintymän vaihdoksille ja niin edelleen.
Darcs sisältää vasta osan näistä muutostyypeistä, mutta osaa uudelleenjärjestää muutoksia siten, että niiden yhteisvaikutus pysyy samana. Tämä auttaa esimerkiksi tuomaan kahdessa paikassa tehtyjä muutoksia yhteen.
Darcsin tiukka muutoskuri aiheuttaa sen, että samat muutokset sisältävä tiedostopuu näyttää aina samalta, riippumatta siitä, missä järjestyksessä nuo muutokset on siihen tuotu. Tämän takia myös kahden muutoksen välinen konflikti on Darcsissa versiosäilön tila eikä työpuun tila, kuten useimmissa muissa versionhallintajärjestelmissä. Darcs sovittaa konfliktit yhteen muodostamalla automaattisesti uuden muutoksen, joka peruu molemmat keskenään konfliktissa olevat muutokset. Tämän jälkeen käyttäjä voi tehdä uuden muutoksen, jossa yhdistellään semanttisesti konfliktoivat muutokset.
Itse muuten haluaisin, että darcsin muutostyypit olisivat vähän toiset: riviorientoituneiden hunkien sijaan haluaisin merkkiorientoituneet, tunnisteen uudelleennimeämispatchin haluaisin korvattavan yleiskorvauspatchilla, ja sitten pitäisi olla patch-tyyppi sisällön siirtämiseksi paikasta toiseen. Ja darcs voisi olla vähän innokkaampi arvaamaan, milloin kyse on uudelleennimeämisestä...
Lisäksi minulla on toisenlainen ajatus konflikteista. Darcsissa konflikteja sisältävät repositoryt ovat keskenään samanlaisia, niissä konfliktissa olevat muutokset peruuntuvat. Haluaisin, että niin kauan kuin konflikteja on, jokainen näkee "oman" (ts. ensin saamansa) muutoksen. Jos konfliktin haluaa ratkaista, pitää perua molemmat muutokset (softa voi auttaa). Tällöin muutokset voivat "tunneloitua" sellaisten muutosten ali, joiden kanssa ne ovat ristiriidassa.