Twenty years is nothing
Version control has evolved from lock-based, centralized systems like SourceSafe and CVS to Git’s distributed, history‑everywhere model, which many see as a transformative but imperfect plateau. Commenters weigh Git’s speed and robustness against its confusing UX, poor handling of very large or binary-heavy repositories, and lack of semantic or AST‑aware history, pointing to alternatives such as Mercurial, Fossil, Pijul, jj, and CRDT-based designs as attempts to address these gaps. The exchange also highlights how implementation choices (e.g., Rust vs. Python), workflow patterns (rebasing, stacked commits), and hosting platforms (GitHub vs. self-hosted) shape both tool quality and developer culture.
Implementation languages and “written in Rust”
- Repeated debate over why projects advertise “written in Rust.”
- Supporters say language choice signals:
- Memory safety and speed without GC.
- Static, self-contained binaries and smooth tooling.
- A developer culture that cares about correctness and performance.
- Skeptics see it as weak marketing: if “written in Rust” is the headline, maybe there’s little else to differentiate.
- Some note language is predictive of project style and ecosystem fit (e.g., easier to contribute if you know Rust/Go vs Python).
- Critiques of Python/JS for performance and long-term stability; Go noted as similar to Rust in distribution but not in type/ownership guarantees.
Pijul, patch-based VCS, and CRDT ideas
- Pijul and Fossil highlighted as true Git alternatives with different designs; jj and Sapling seen more as improved Git/Mercurial interfaces.
- Pijul’s author explains:
- Design is patch/CRDT-based; conflicts are part of the model.
- Data structures were designed “like theorists,” then optimized.
- A custom Rust key–value store (Sanakirja) enables fast, generic, mmap-friendly storage and efficient forking, outperforming LMDB in their benchmarks.
- Rust chosen pragmatically for low-level control without C++’s debugging pain; might choose Zig today due to language evolution.
- Some argue patch-based VCS can be faster than snapshot-based Git for large repos, conflicts, blames, and binary files.
Git strengths, weaknesses, and workflows
- Widely praised for:
- Speed compared to older tools.
- Distributed workflow and offline commits.
- Flexibility and powerful data model.
- Criticisms:
- CLI UX is confusing; concepts leak internal implementation.
- Rebase, history rewriting, and stacked-commit workflows are hard; tools like Gerrit/Graphite/jj try to mitigate.
- Git stores snapshots, not explicit change history; file renames/splits and big refactors are hard to track.
- No empty directories; history of file splits/merges and semantic moves is weak.
- Git LFS seen by some as fragile and operationally awkward.
Centralization, history size, and partial clones
- Debate over whether full-history local clones were “unthinkable” 20 years ago; some recall CVS/SVN plus local scripts and large-enough disks, others emphasize network and storage limits of the time.
- Point that DVCS implies a practical cap: repo history must fit on the smallest dev laptop.
- Some argue most organizations are de facto centralized and would benefit from hierarchical/subordinate clones: partial history, partial trees, but still local branching and commits.
- Newer Git partial clone and sparse-checkout features mentioned as partial solutions.
Binary assets and non-text projects
- Git’s text-centric model works well for most software, but:
- Games, chip design, and media pipelines still favor Perforce or SVN due to large binaries.
- Git LFS criticized as buggy, operationally complex, and requiring extra server components.
- Desire for VCS that understands binary formats (e.g., semantic diffs for images) and large file storage natively; Pijul claims native binary support.
Semantic, AST-aware, and CRDT-based futures
- Multiple commenters suggest:
- Version control over ASTs or domain-specific structures instead of raw text.
- Better diffs/conflicts that understand moves, renames, refactors.
- One proposal: a Git successor storing character-level CRDT histories, supporting real-time collaboration and semantic commits; open issues include conflict surfacing and data deletion (secrets).
- Others argue such granularity may add noise and complexity; commits as human-chosen checkpoints remain valuable.
Historical tools and perspective
- Extensive reminiscences of VSS, ClearCase, Perforce, CVS, SVN, RCS, BitKeeper, and ad hoc zip/tar “versioning.”
- Lock-based centralized systems (VSS, some ClearCase/Perforce setups) remembered as painful but once considered “professional”; open-source workflows with CVS/SVN were seen as ahead of many enterprises.
- General sense that each generation thought its tools were good until the next major step (SVN, then Git/DVCS) exposed their limits.
Will anything replace Git?
- Some think Git is an evolutionary plateau; successors would need:
- Full Git compatibility and transparent use on existing repos.
- Simpler UX and better semantics (renames, AST-aware ops, stacked commits).
- Better handling of large repos and binaries.
- Others expect eventual displacement, citing the long history of VCS churn; still, Git’s network effects and “good enough” status may keep it dominant for a long time.