Some interesting content about Git, and version control in general.
Explanations
- Difference between git pull and fetch - https://stackoverflow.com/a/15733096/1907765
- Content addressable storage (CAS) in Git - i.e. Git uses a cryptographic key-value-based object store to store all content. It's not file-address-based, all objects are converted into hashes and compared to one another for simplicity.
Articles about Git and VCS
- Differential synchronisation algorithm by Neil Fraser - https://neil.fraser.name/writing/sync/
- A complex algorithm which circumvents common problems with syncing in VCS like Git. Used by Google.
- Neil's Tech Talk on the same topic: https://www.youtube.com/watch?v=S2Hp_1jqpY8
- Reinventing the Git interface - https://tonsky.me/blog/reinventing-git-interface/
- has some interesting ideas about improving Git's interface using graphical tools, and solving certain problems
- Is Git the be all and end all of VCS?
- Some interesting comments, e.g. this one points out that Git struggles in large codebases, and instances where you don't need the whole repository, just a portion of it.
- Where you could e.g. check out one single file and upload it back. That would be an interesting change.
- Also, Git isn't "sharded", which means separating a database into smaller, manageable parts. This can apparently ease complexity.
- Also you can't actually version control manage things like Microsoft Word files or anything in rich text - it can only be plain text. This hearks back to UNIX days, but today might be considered a limitation. Surely a flexible system should be able to version control things besides plain text.
- And this comment which points out that Git is based on being fully distributed with more than one single source of truth, but most teams don't work that way and that it introduces unnecessary complexity.
- Some interesting comments, e.g. this one points out that Git struggles in large codebases, and instances where you don't need the whole repository, just a portion of it.
- https://arstechnica.com/information-technology/2017/05/90-of-windows-devs-now-using-git-creating-1760-windows-builds-per-day/ <- An article about how Microsoft transitioned to Git, and the problems they found in it
- They had to make a customised version of Git for several reasons. Apparently Git creates files unnecessarily which slows down work and causes git status to take ages.
- They changed it so that their modified Git only cared about locally stored files which had been modified.
- The competition to Git as a VCS - https://chambers.io/2018/04/17/git-vs-the-competition.html
- Mercurial is good and sleek but slow
- Perforce is old and works but paid
- Question on why there isn't a simpler tool than Git available - https://www.quora.com/Why-isnt-a-simpler-tool-than-Git-popular-for-version-control-especially-for-small-projects -
- An article about the "limbo" state in Git and why it's pernicious.
- "A principled approach to version control"- Loh et al. Interesting looking paper on algebraic approaches to version control
- Article from Joel Spolsky on why DVCS is great
- Similar interesting article about how strings work
- And one about the Law of Leaky Abstractions
- History of Git commands - https://stackoverflow.com/a/60611930/1907765
- Basically they used to be all one word (e.g. git-add) but this became untenable as the number of commands grew.)
High level problems with Git
- Greg Szorc's insightful article on the subject
- Greg Szorc's article on Git vs. Mercurial
- Paper by Perez De Rosso and Jackson about what's wrong with Git on a high level
- Paper by the same authors about redesigning Git (they created Gitless, which is a wrapper on top of Git which eliminates some confusing concepts)