FreeBSD src repository has transitioned from Subversion to Git
cgit.freebsd.org
cgit.freebsd.org
https://news.ycombinator.com/item?id=25460544
I'm glad it's finally been done!
Looks like GitHub still has the old export as of 2020-12-24T15:30Z, but 5ef5f51d2 dated 2020-12-23T04:27:27Z marks the start of Git history for FreeBSD src!
SVN has 3 way merge too so this isn’t the issue it was in other VCS’s
>> The problem is all the drawbacks of trunk based development
Those were all addressed reasonably well by about 2014, e.g. upsource (my preference by far) or crucible. TeamCity’s merge after private build feature etc.
Ironically these days i see a big push to use git in a way that would work pretty well in svn too.
The biggest hassle with svn was long lived branches. Back then we encouraged devs to branch and then somehow smoosh it all back together (painful). Then we said ok do it more frequently in atomic commits (i liked that model) then DVCS took off largely in the open source world and now major dev houses (well i guess except google with p4 - but they do provide a git interface) all have come along for the ride.
Ironically with products like Stash/Bitbucket and Github Enterprise, we’re back to an SVN like model.
But I’d go even further and say: svn isn’t even a good choice for a basic feature branch workflow. Not that it’s impossible, but the added “convenience” of svn is much smaller than the gains of git.
I don’t think the “D” in dvcs is important. As you point out, most people use git with a blessed central repo because that’s what we want.
For SVN, we mostly had long-lived "release" branches. Things like pre-merge code reviews were very hard. If you wanted to send some incomplete code, you sent an email with . tar.gz file attached.
With GHE, everyone makes branches all the time. It works great for code sharing or review. And there are unique advantages too, like an ability to run a distributed set of tests on arbitrary unmerged fork/branch, which rely on branches being very cheap.
I like being able to commit while I am on a plane. (Not that this happens everyday, it’s more about the orinciple)
No central server to setup or required, period.
Whether it's doing it on your own or sharing with 100 random strangers, you don't have to setup an account for them.
Yes, SVN can handle patching, so you could email those patches also, but it's based on client-server, so someone has to setup the server and add new accounts.
Googlers have used it internally a lot as a client when their central server wasn't that, even though git itself struggled with the scale, which is why they hadn't changed over to it exclusively even server-side. If it was that complex, why would they do that?
> No central server to setup or required, period.
I've never seen a company work like this, though.
If you don't need access control, it's the easiest way to get started with source control for small teams
Someone should let every single person and organization that uses git know about this!
As a developer I love that git gives me the ability to create my own repo anywhere on any machine, just with git installed. Repos can be synced and patches exchanged in numerous ways and any decentral copy is a full backup of everything.
But as someone having worked in larger companies, there are huuge red flags with this that you wouldn't want the wrong people in your company to know about. Fully functional repos anywhere means central control is impossible. You can't just limit access in any meaningful way, you can't control info leaks, if someone can carry out a git clone on an USB stick. And full repo with history means that you always know everything about the work performance of all colleagues, past and present.
It's possible and we use it at work. Most major source control servers that support git also support user and role-based control over PR merges, force commits, etc.
There's little difference between a user that has a copy of the source as SVN and that of git, other than the git client itself allows the user to manage their commits on their local computer.
same with svn if that's your preferred workflow.
> you dont have to set up an account for them
of course not. they could just make a merge request.
Honestly I like both git and svn but I find this distinction to be contrived. I use svn in a decentralised manner daily with no problems
I only remember having to manage a server being annoying. If you're not pushing anywhere, isn't the Git workflow essentially identical, minus the server management chores?
I think you may be getting confused with CVS, where if you commit multiple files each will get its own version number like “1.34”.
Subversion creates commits across the whole repository. All files and directories you want to check in get a single revision number like “123”.
The svn file format vs the git pack format are very very different on-disk.
With git on the other hand, all the file storage is local to you machine regardless of which other remote git servers you may be using.
In addition, git blame doesn’t have to go through all history; the logical git storage model is object based on hash, so it’s really a set of queries for the contents of hash values that is used. Yes, it walks through commits, but at the lightweight metadata of trees which are akin to navigating a file system.
SVN is easier to learn and much more intuitive to use. But even if you're not a power user you get to its limits quickly. (E.g. svn afair does not support bisecting by itself, though there are external tools.) Given the world uses git you inevitably will have to learn git if you do anything with software.
I think Git is a real pleasure to use. Personally, with git-reflog, I think it's really difficult to mess up in a git repo (but, of course, if there's a will, there's a way).
I've worked with SVN on several repos and projects, and it's the VCS I like the least. It's not intuitive at all, less shell-scriptable than CVS (how do you `cvs diff -r1.{1,2} file.c` in SVN?), less portable and takes more time to setup (e.g., effectively less UNIX). I think the ViewVC interface is also one of the worst out of any other option out there, be that CVSweb or gitweb, both of which have a better usability, in my opinion. SVN repository is also a 100% monolith, unlike CVS and even unlike Git (in Git, you can't ignore individual files like in CVS, but you still can ignore unrelated branches for a checkout, for example, without the need to renumber the whole thing, which is a requirement in SVN if you want to get rid of any branch). Basically, my personal opinion, is that the monolithic and inflexible SVN is just broken by design for any distributed and large project the size of a BSD. It's still puzzling to me why it was chosen over Git back in 2008, the same year that DragonFly did select Git as replacement for CVS. If anything, with DragonFly project being smaller, they had less of a need for Git than did FreeBSD.
A merge commit is simply a commit that has more than one parent commits.
In reality, you can put whatever content on whatever commits as long as these rule don't break.
The git is just the program that you used to merge the file tree, while you can disgrace with it with '--no-commit' and modified the merged file tree as you want.
The problem is for more complex manipulations I do maybe every 6 months. The logic behind difference between commands and options is really not obvious, and some commands are very asymmetric (doing something can be simple and take one command; undoing it might take a completely different command with several options and complex references).
The concept is great and it works very well; the UI is terrible.
If only that was a thing for Perforce. There are some scripts but not really with proper streams support. Sigh.
SVN and even CVS include branch information on each commit, but git couldn't care less - it's up to you to infer it by unspecified means if you really care.
It's telling that the conversion metadata includes tags indicating the SVN path identifying the branches a given commit was made from - because this otherwise wouldn't be available. In principle I can just use that, but I still need a reliable solution for new commits.
Not convinced I'll find one.
---
BTW, whilst at it, any chance you can fix search by user-id? Currently freshbsd.org/search?project=freebsd&committer=phk doesn't produce the expected results.
Where in SVN it's implicit in the paths a commit touches and in CVS it's a specific field in the RCS metadata for a commit, in Git it's a big graph problem it isn't overly interested in solving.
And yes, people keep asking about the legacy username thing - I'll get to it :)
e.g. projects/aio_writev has 8 commits, but if name-rev is allowed to name that branch, it'll gleefully use it to name thousands of commits to main as well.
The problem with forums is that you can't really trust them. They're generally not archived well, UI is poor, editing of old messages can easily get abused (probably the reasons HN removes your ability to edit old messages shortly after posting).
Mailing lists are much less prone to censorship, are better for archival and preservation of knowledge (both for your own local archival, as well as the distributed global archiving of complete archives), interoperable, convenient and easy to use.
---
I mean, just take a look at GitHub issues. It's a total mess. Things get locked and deleted. Links get broken. Attracts thousands of useless comments on popular issues; never any sort of a summary for how the problem is resolved (if at all), the root cause of any issue, or why it won't be fixed. Any time I get a GitHub Issue as a hit, it's usually a total waste of time trying to make sense of it; much more so than the mailing list posts, which often have threading, less spam, and are easier to navigate. Yes, a special interface is a good thing in theory. But it's been a complete mess in practice.
Inaccessible.
Terribly indexed.
Awful formatting tools.
Encourages un-followable discussion branching.
Increasingly broken with modern mailing security mechanisms.
> The problem with forums is that you can't really trust them. They're generally not archived well, UI is poor [...] Links get broken. [...] Attracts thousands of useless comments on popular issues; [...] They're generally not archived well.
All this also applies to mailing lists.
> Things get locked and deleted.
This deserves a longer reply. List archives get lost as well, if they were available at all. I do agree that deletion rights given to maintainers is a stupid idea, it's very prone to misuse. But mailing lists also have that, maintainers can simply block e-mails reaching the list. At least with deletion people subscribed to new issues will always get them (in the case of GitHub).
> Editing of old messages can easily get abused (probably the reasons HN removes your ability to edit old messages shortly after posting).
Forum config problem.
> Mailing lists are much less prone to censorship
[citation required] Pretty sure they all have some moderation tools or it'd get totally out of hand either due to spam or by malicious actors.
> never any sort of a summary for how the problem is resolved (if at all), the root cause of any issue, or why it won't be fixed.
That's not specific to the tech used for discussion.
> But it's been a complete mess in practice.
But still less of a mess than mailing lists and that's what matters.
The BSDs have excellent archives of the mailing lists; FreeBSD, NetBSD and DragonFly have their own websites with complete or near-complete archives, including full threading and sub-threading support; all BSDs are also archived on marc.info, and plentiful of other sources, some of which do come and go; but archives themselves are downloadable in bulk from the underlying projects, so, archiving is generally a non-issue.
What formatting tools? Why would I need any formatting tools to hack the kernel? That's only a benefit that none are available.
Security mechanisms? How's GitHub any better? Anyone can make any account and pretend to be anyone. Or do you suggest GitHub introduce Account Verification, so that someone at Microsoft-owned GitHub could then decide whether or not you're an OSS contributor worthy of a Blue Checkmark to accompany your name? I think we did have people pretend to be de Raadt or Dillon over the years, but it's generally not really an issue; often just the April 1 jokes; very easy to verify based on headers.
> Forum config problem.
OK, now we're talking! So, how about all those forums fix their "forum config" problems, and then maybe we'll talk? Mailing lists are by far superior to what GitHub or any other popular forums actually do offer as of today. GitHub Issues, for example, doesn't even support threading within an Issue; unlike the mailing lists since decades ago. There's absolutely no archiving of GitHub Issues being done anywhere that I'm aware of, apart from user-initiated archive.today. So, even in such basic aspects, mailing lists are already superior. Not to mention that we have contributors from across the globe, whereas Microsoft disables (without notice) GitHub accounts of anyone who's a citizen or a visitor of the geographic places and peninsulas you aren't supposed to visit or originate from -- covering dozens of millions of global citizens, denying them access to code for no good reason.
A lot of those issues are fundamental to mailing lists and e-mails. They do apply.
> What formatting tools? Why would I need any formatting tools to hack the kernel?
Having text formatting tools is really useful when communicating things. If you don't need it, okay, that doesn't negate its usefulness for others.
> Security mechanisms?
DKIM/DMARC/SPF. The rest of your paragraph is tangential, applies to the entire world and all tech where identities come to play, with a few smaller exceptions.
> So, how about all those forums fix their "forum config" problems, and then maybe we'll talk?
You do realize that's an absolutely ridiculous demand, it's up to the project to have a configuration they like.
> GitHub Issues, for example, doesn't even support threading within an Issue; unlike the mailing lists since decades ago.
That's a feature, not a bug.
> So, even in such basic aspects, mailing lists are already superior
Yet in so many others it lags so much behind. In all the aspects you very conveniently did not address in your last comment.
> Microsoft disables (without notice) GitHub accounts of anyone who's a citizen or a visitor of the geographic places
There are more options out there in addition to GitHub.
> Mailing lists are by far superior to what GitHub or any other popular forums actually do offer as of today.
That's a very absolute statement. Just calling it "superior" would've been a stretch, "far superior" is borderline delusional.
> it's up to the project to have a configuration they like
Exactly. Our mailing lists are far, far superior, than any alternative forum setups I've ever seen. I do insist it's not just "superior" to most forums, but indeed "far superior".
> Having text formatting tools is really useful when communicating things.
Then why do you even visit HN? There's no formatting tools available here, is there?
I did, and actually you did too, but you also conveniently ignored those points. Which lets me know they hit the target very well.
> Our mailing lists are far, far superior, than any alternative forum setups I've ever seen.
Taking into account the last time you checked out a forum setup, then your arguments are understandable. If you take phpBB then of course it's going to be comparing shit with shit, but that's not really what we're discussing.
> Then why do you even visit HN? There's no formatting tools available here, is there?
How is HN related to to this discussion? It would be useful if it too had some formatting tools. Was this supposed to be a "gotcha"-moment? Because it failed miserably.
> I do insist it's [...] but indeed "far superior".
All that I can say here is that you have made up your mind and you have made your decision in the past.
Thankfully more and more projects abandon mailing lists and convert to something more accessible, more usable, they're also doing far better, with far more new people joining. Hm, in a sense people can be thankful even, it acts as a signal for people, if the dead hand of the past is there and doesn't want to let go.
If you wish continue as you have for the past few decades, do so, I can't force you to reconsider. But don't come crying when you lack new people contributing and maintaining.
OpenBSD probably has no plans to transition.
NetBSD has been testing Fossil, Git, Mercurial, for about over a decade now, yet somehow as of 2020 the sight is currently set on Mercurial (even though the current Git export is done through Fossil, continuously since at least 2011); whilst CVS still remains the only official master repo. http://wiki.netbsd.org/github/