this post was submitted on 15 Apr 2024
34 points (94.7% liked)
Git
2918 readers
1 users here now
Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency.
Resources
Rules
- Follow programming.dev rules
- Be excellent to each other, no hostility towards users for any reason
- No spam of tools/companies/advertisements. It’s OK to post your own stuff part of the time, but the primary use of the community should not be self-promotion.
Git Logo by Jason Long is licensed under the Creative Commons Attribution 3.0 Unported License.
founded 2 years ago
MODERATORS
you are viewing a single comment's thread
view the rest of the comments
view the rest of the comments
Reference syntax. Like what the fuck is the difference between
..
(2 dots) and...
(3 dots)? And is there....
(4 dots)?And I can never keep apart how to compare references. If I want to compare my feature branch with master, is it
git diff HEAD..master
orgit diff master..HEAD
? It seems like in git the syntax is reversed to mine, but I'm never sure. Maybe something likegit diff HEAD->master
would be more intuitive?And
git rebase --onto
. Fuck me did it take me a long time to understand that (if I understood it).Honestly, that's just git CLI interface stuff. Every time I've tried to read about the internal workings of git, the naming has thrown me off and stopped me from continuing. Like what the fuck is "git porcelain"? IIRC there's also
git plumbing
? But that doesn't even seem to be the internals which have another bizarre name?git
is a large series of Chesterton's fences that should be each examined. I'm hopeful that somebody or some org will come around to design a version control system from the ground up with documented architecture from the start (and not written in gosh-darn C).Anti Commercial-AI license
I agree that the UX of existing git commands is not great. They evolved in a particular insular environment -- Linux kernel development with heavy mailing-list usage and large multi-headed merges, with occasional pull requests and manual integration testing.
Check out my top-level comment for a link to git's data model. A data-first approach with
blob
,tree
,commit
, andtag
can be enlightening. The on-disk format tries to balance integrity, easy manipulation, disk space, and incremental updates; it's also weakly monoidal, enabling distributed development. Look up the history of Bitkeeper and git; this is "a version control system [designed] from the ground up with documented architecture from the start"! And there are many non-C implementations as a result, like pure-Python dulwich.