Git Is Not Revision Control
Sun 21 January 2018 by feldGit has always rubbed me the wrong way. The ability to rewrite history and not tracking file renames are a few of the reasons it has turned me sour, not to mention the awful inconsistent UX as brilliantly mocked in Git Koans. I'm not objective enough to come up with a solid case against git as a revision control system which is why this FreeBSD developer email from phk resonated with me enough that I flagged it and re-read it many times over the last year.
There was an internal discussion about the possible merits of switching to git to increase user contributions. This was his brilliant response, published with his permission:
On Sun, Feb 26, 2017, at 14:59, Poul-Henning Kamp wrote: It is fundamentally wrong to ask "SVN or Git ?" SVN is obviously a Version Control System, it has all the classic attributes of one, including such crucial elements as progressing version number a definitive timeline and imutability. Git is clearly not a VCS, and it has never tried to be one, and people calling it one doesn't change that. The absense of a progressing version number and lack of a definitive timeline, not to mention all the many "unnatural acts" you can do to a git repo are sufficient arguments to settle this point. No, Git is something else, it is a colaboration tool. Git is a tool which allows people and projects to manage, modify, fork and merge the many different views, instances, variations and modifications of a work in progress across barriers of distrust. The crucial word there was "many different", which is the exact opposite of what a VCS strives for. A lot of the features Git provides, features which are what makes it great as a colaboration tool, flies in the face or or directly invalidates the guarantees you normally expect from a VCS, most notably progression of time & version, immutability and consistency of view. But in many cases Git is an adequate substitute for a VCS, you just have to augment it with an out-of-band definition of which tree is the 'definitive', and settle who gets to define what 'a version' means. This is why github exists in the first place. In FreeBSD we have insisted on "proper version control" from day one, 23 years ago, and while it is a decision we should revisit periodically, everytime it has come up, it has been overwhelmingly confirmed as "the way we do things here". And this this thread, which is far from our first on the subject, fails to converge: One side desires better colaboration tools and the other side is not willing to give up good old-fashioned version control to get it, both parties failing to realize that neither SVN nor Git will ever be able to do both, because the requirements are fundamentally different and in conflict with each other. So the task at hand, if there still is one, is to ask how we can make it easier to use Git as a colaboration tool for our committers and down-stream users. Poul-Henning PS: A good place to start would be to "bless" the github mirror and make sure the pull requests there get dealt with: https://github.com/freebsd/freebsd/pulls -- Poul-Henning Kamp | UNIX since Zilog Zeus 3.20 phk@nospamplz | TCP/IP since RFC 956 FreeBSD committer | BSD since 4.3-tahoe Never attribute to malice what can adequately be explained by incompetence.
I originally intended to cite specific points made in this email but honestly it's too good to not publish in its entirety. It's impossible to refute this line of reasoning in my opinion.
FreeBSD Remote Serial Console Access With Dell and Cisco Servers
I have become allergic to Java. It seems every time I need to access a server console my system is throwing fits about Java security. I've spent hours trying to fix a Java issue which was preventing me from fixing a server I needed console access to. I will show …
read moreUsing FreeBSD as a Time Capsule for OSX
I've had both a coworker and a FreeBSD developer ask me recently how to use FreeBSD as a Time Capsule for Time Machine from OSX. There are a lot of tutorials out there and most of them are non-functional. This is possibly the simplest guide that is known to be …
read moreSpeeding up MySQL Import on FreeBSD
I was recently tasked with rebuilding a readonly slave database server which only slaves a couple of the available databases. The backup/dump is straightforward and fast, but the restore was being excruciatingly slow. I didn't want to wait a week for this thing to finish, so I had to …
read moreMonitoring FreeBSD Base System Vulnerabilities with pkg audit
The FreeBSD base system has been difficult to monitor for published vulnerabilities for a long time. This will improve when we achieve a packaged base system, but that leaves users of currently supported -RELEASE systems without a standardized option.
The freebsd-version(1) utility has existed since FreeBSD 10.0. This …
read moreMono's DNS is broken
I recently started playing around with Sonarr by porting it to FreeBSD. It's a pretty well designed app -- I'm not aware of an alternative with such a well thought-out interface and deep integration into the other programs it communicates with. I've never run program via mono before, so I was …
read moreRouting a FreeBSD Jail through OpenVPN
I decided I wanted to concoct a solution where I could force all applications in a jail or jails through a VPN connection without affecting the internet connectivity of other daemons on the system. After some headbanging I was able to make this work. The OS version being used in …
read moreBraindead FreeBSD Backups with Tarsnap and ACTS
Before I start this simple blog post you should be aware that:
- Tarsnap is the best *nix backup service that exists.
- You need to buy the Tarsnap Mastery book by @mwl because it's so good.
Now that has been said, let's start with the super basics. Do you know Tarsnap …
read moreIPv6 via 6rd on FreeBSD
My ISP is Charter and they support 6rd for IPv6. Unfortunately 6rd support does not exist in the stf(4) driver in FreeBSD yet. There is a work-in-progress implementation available from hrs in ports, net/stf-6rd-kmod. However, I haven't found very good documentation on exactly how to use it so …
read moreBSD License Audit
I recently did an audit of the "BSD" licenses in the FreeBSD ports tree. This pertains strictly to those defined as LICENSE=BSD which could be one of several licenses. It was an extremely tedious process manually verifying the license of each port, and except for a dozen which are …
read more