HEADS UP: FreeBSD changing from Subversion to Git this weekend

As far as users are concerned (i.e. non-developers), for 99 % of them there will be no change. freebsd-update(1) will continue to work. Those few who check out source code from the repository in order to “build world” will have to adapt their workflow, though, but it’s really not a big deal.
I see. I for my part do not check out source code; instead I do apply my own secondary patchsets on top of the source code that is in SVN. You can see this from my uname message:
FreeBSD 12.2-RELEASE-p2 #0 r368515M#N1130: Thu Dec 10 20:40:59 UTC 2020

This patchset (number 1130 in this case) is the collection of those fixes that are in sendbug waiting since 12 years for somebody to read them, among others. Therefore it is necessary that I do maintain these on my own.
 
I see. I for my part do not check out source code; instead I do apply my own secondary patchsets on top of the source code that is in SVN.
I’m sorry, I don’t quite understand … Where do you get the source code from if you don’t check it out from SVN?
 
You think I would have a mental defect just because I decide with whom I do business and with whom not?
Considering you can't stop talking about github when this thread isn't about github, the master repo isn't on github, and FreeBSD doesn't depend on github at all, maybe.
 
I’m sorry, I don’t quite understand … Where do you get the source code from if you don’t check it out from SVN?
Hm, sorry, I forgot. It just works. Must look into the code.

So, at first it decides if to do svn update or switch (from the config, the date and other options). It analyzes the result, and then decides upon a proper patchset, caring for jails and crossbuilds.
It then uses svn patch to apply the individual patches, verifies the result, requires interaction on conflicts, and finally uses svn stat and svn diff to store the state of affairs back into a new version of the patchset.
Finally svn revert, then the whole stuff is put into zfs snapshot, and that will be used for buildworld and portbuild.
 
So, at first it decides if to do svn update or switch (from the config, the date and other options). It analyzes the result, and then decides upon a proper patchset, caring for jails and crossbuilds.
It then uses svn patch to apply the individual patches, verifies the result, requires interaction on conflicts, and finally uses svn stat and svn diff to store the state of affairs back into a new version of the patchset.
Ok, I see.
Actually I think that your workflow would work better with Git and a local clone of the repository. Git was designed to make it easy to maintain your own patchsets. Granted, there’s a certain learning curve, because Git works quite different from SVN (or CVS) in certain respects. But it is worth the effort, and there are several good introductions and tutorials on the web (Imp’s blog contains a few links).
 
Considering you can't stop talking about github when this thread isn't about github, the master repo isn't on github, and FreeBSD doesn't depend on github at all, maybe.
You're right. Probably somebody has to create an off-topic threat for GitHub related discussions.
All that said, as a general rule, don't host materials on the GitHub, before reading its "Site Policy"
 
Ok, I see.
Actually I think that your workflow would work better with Git and a local clone of the repository. Git was designed to make it easy to maintain your own patchsets.
Yes, I was told that already, repeatedly.
But then, this was some times after the switch CVS->SVN, and I had already a learning curve with SVN, and then I found SVN can be scripted, and so it is possible to do such things. It is nittypicky, and sometimes annoying, but finally the crap worked properly. And for a few years now there were only minor modifications (like introducing the flavors into ports) and I had finally all the problems solved (including those mismatching libraries from wrong ports/INDEX, and other nuisances).

Granted, there’s a certain learning curve, because Git works quite different from SVN (or CVS) in certain respects. But it is worth the effort, and there are several good introductions and tutorials on the web (Imp’s blog contains a few links).

So it basically boils down to what was my first assumtion already: at least for this part of it, I can just tear it down and write it anew. And, what is worse, I am forced to do that, in order to be able to stay current with security fixes.
 
What makes You think I would have a mental defect just because I decide with whom I do business and with whom not?
Wasn't it always the fundamental right of the customer to decide if they want to do business with some counterparty?
Has this gone away? Are we now in China where everybody has to behave as BigBrother requires?
Please don't do that, cause this is now far from any sane discussion. Just for the records, paranoia is not only used as a term for a "mental defect" but much more often for being afraid of things for close to no rational reasons, and it should be *pretty* clear. Furthermore, nobody ever forced you to register with github (which is NOT "doing business" as long as you use just their free services). Of course, if someone decides to have his issue tracker on github, you just can't use it in this case. I think this is a pretty simple thing to grasp. Again, this whole thing has nothing to do with FreeBSD, as FreeBSD sources are ALREADY mirrored on github and nothing will change. The "master" repository will not be on github.

As for Git: just get used to it. Having read now you maintain local changes, I do the same! And it was one of the reason I always wished for FreeBSD to finally move to Git, because THIS is one of the things that are just painless with Git (and not so much with Svn).
 
So it basically boils down to what was my first assumtion already: at least for this part of it, I can just tear it down and write it anew. And, what is worse, I am forced to do that, in order to be able to stay current with security fixes.

Well, yes. The world changes and people have to adapt. This is the way.

Basically your workflow should continue to work for the lifetime of 12.x (the stable/12 branch). The release process of future 12.x versions (12.3 etc.) will still use SVN, and 13.0 will be the first release that will be built from Git. In other words, you’ll have to adapt to Git as soon as you want to switch over to 13.x.
 
Please don't do that, cause this is now far from any sane discussion. Just for the records, paranoia is not only used as a term for a "mental defect" but much more often for being afraid of things for close to no rational reasons, and it should be *pretty* clear.

Yes, and You know the word "derogative", don't You? *eg*
It is about "group pressure": making people do "what we all do". This is fine for youth groups - but here it just serves for some extremely rich companies to create market dominance, because they explictely build upon this phenomenon.
And I think one should be conscious when participating in that game, because it is actually a way of advertising.

Furthermore, nobody ever forced you to register with github (which is NOT "doing business" as long as you use just their free services). Of course, if someone decides to have his issue tracker on github, you just can't use it in this case. I think this is a pretty simple thing to grasp.
Well, I can use their issue tracker very well, only they can't use my fixes, because they won't get them. It's a very simple thing to grasp: it doesn't hurt me at all, because I have the same work with fixing the crap in any case, and so I just save the additional work of packaging the results in order to give them back to the community - and that's not my fault, because they are the ones who have decided to lock themselves up in an ivory-tower.
 
  • Thanks
Reactions: a6h
What do you mean, a ghost driver? Thousands!

(and seriously, it's your decision to refuse registering an account with github. It's just obvious you can't make that look like a problem for the hundreds of thousands of projects using their free services. So YOU won't report issues or even submit patches? Well then, they probably won't care…)
 
Basically your workflow should continue to work for the lifetime of 12.x (the stable/12 branch).
Great! That is good news for the src tree, and gives indeed ample time to adapt.

But what about the ports tree? I only found info that these will somehow be transferred at end of March21 - but couldn't find info about the cutover timeframe.
 
But what about the ports tree? I only found info that these will somehow be transferred at end of March21 - but couldn't find info about the cutover timeframe.
I'm reading that as the Q2 branch will be the last on SVN, but that's just interpretation. Would be interested as well. In fact, that's where I probably benefit the most, cause I do a LOT more changes on ports than on base :)
 
What do you mean, a ghost driver? Thousands!
In German it would be "millionen Fliegen fressen ..."

(and seriously, it's your decision to refuse registering an account with github. It's just obvious you can't make that look like a problem for the hundreds of thousands of projects using their free services. So YOU won't report issues or even submit patches? Well then, they probably won't care…)

Yes, and that doesn't matter to me, at all. But then, as is clearly stated in Liber Oz: "The slaves shall serve." (I also don't submit any more FreeBSD patches, as long as the old ones aren't processed.)

Furthermore, as was deliberately explained here, I could at any time set up my own git server and put the patched version onto that, in case somebody would want to use is.
 
I'm reading that as the Q2 branch will be the last on SVN, but that's just interpretation. Would be interested as well. In fact, that's where I probably benefit the most, cause I do a LOT more changes on ports than on base :)
Well I rather hope to postpone this for a while - I have just yesterday decided to finally tackle the IPv6 matter, and that will probably require quite a bit of rewriting in my firewalling toolchain.
 
I'm reading that as the Q2 branch will be the last on SVN, but that's just interpretation. Would be interested as well. In fact, that's where I probably benefit the most, cause I do a LOT more changes on ports than on base :)

Quote from “Big Picture Overview of FreeBSD's git migration”:

End of March, 2021Ports repo slated to transition to git
“The ports tree needs to make the switch just before a quarterly branch to avoid needing to mirror changes to subversion. Since there are a number of details to work out, they are planning to make the switch in March to allow time to consolidate their plans.”

I’m reading that as the 21Q1 branch will be the last on SVN, while 21Q2 (April) and onwards will be on Git.
 
Code:
git clone https://git.FreeBSD.org/src.git -b stable/12 /usr/freebsd-src
appeared to start the equivalent of an svn checkout to the last-parameter-destination, but I chose to halt the clone til I am further informed if it would only create the same amount of disk usage as the current /usr/src... as well as learning whether the stable/12 could be expanded to just clone a subset.
 
I did this:
Code:
git clone -b stable/12 --depth 1 https://git.freebsd.org/freebsd/src.git src.git
I used --depth 1 because I don't care about all the history; I just want the source code. Without that, it takes a whole lot longer to download, but the result, currently, is smaller than the SVN equivalent.

Comparing the same stable/12 checked out from SVN:
Code:
root@lt1:/usr # du -sk /usr/src /usr/src.git
4180812 /usr/src
1723368 /usr/src.git

And no, there is no way to clone just a portion (subset) of a branch - it's all or nothing.
 
Code:
root@lt1:/usr # du -sk /usr/src /usr/src.git
4180812 /usr/src
1723368 /usr/src.git

Not sure what’s in your /usr/src directory, but it should be a lot smaller.
Here’s how it looks for me:
Code:
$ [b]git clone -b stable/12 --depth 1 https://git.freebsd.org/src.git /tmp/src-12-git[/b]
$ [b]du -ks /usr/src /tmp/src-12-git[/b]
   1·405·256  /usr/src
   1·682·332  /tmp/src-12-git
This result is expected. The above git command does two things: First it retrieves a so-called “shallow” copy of the repository that contains only the stable/12 branch without history information, i.e. only the “head” of that branch. The repository is compressed by default, so it doesn’t take too much space. It’s stored in the .git subdirectory:
Code:
$ [b]du -ks /tmp/src-12-git/.git[/b]
     293·033  /tmp/src-12-git/.git
Second, that git command checks out the actual source tree from the repository that was just retrieved. This is called a “work copy” in Git terms. As you can see, the total space used (~ 1650 MB) is the sum of the size of the usual source tree (~ 1370 MB) plus the size of the shallow repository for this particular branch (~ 280 MB).
 
Git is not Github. This really needs to be emphasized. Linus himself is not a fan of Github.

No, there are quite many Git hosting services on the internet. GitHub might be the best known one, but there are many others. And of course you can run your own Git server locally if you want to.
And all you need to set up your own server is two machines with ssh access. There's really no concept of client and server in git(1), but let's call the machines "workstation" and "server" for clarity.

On the workstation you'd do something like
Code:
mkdir myrepo
cd myrepo
git init
vi foo.txt
git add foo.txt                                              
git commit -m "Foo is important"
You now have a local Git repo. Set it up on the server like this
Code:
git clone --bare ssh://workstation/~/myrepo
Now you have a complete copy of myrepo with all history, etc. on the server. However, due to the distributed-by-default nature of Git, the workstation is not connected to the server in any way. Let's connect it. On the workstation you'd do
Code:
git remote add origin ssh://server/~/myrepo
git push -u origin master
Branch 'master' set up to track remote branch 'master' from 'origin'.
Everything up-to-date
Now any time you git-push(1) your changes will be uploaded to server.
 
Git is not Github. This really needs to be emphasized. Linus himself is not a fan of Github.
Although I like github (and similar services and also similar software for on-premise installation) for the nice extra features they provide (and I couldn't care less what Linus thinks about that)…

Yes indeed, this misconception "GIT == github" is astonishing and somewhat alarming.
Reminds a bit of the "www == internet" misconception :/

I also have a few "bare" repos on my server with no additional software, just plain Git. And sure, they work well.
 
...Of course, if your project is NOT opensource, using github for it would require payment, and probably most companies use their own infrastructure instead.....
you can create private repo(e.g. fork FreeBSD into it) in GitHub for no cost and invite collaborators(which have a GitHub-account). afaik you also can in gitlab. there are paid services although I didn't get to the moment where I would need them(probably depends on size of project, `don't know).
at the moment freebsd`s GitHub-master-repo is out of sync with main-repo of fbsd`s own git-server because of incompatible hashes.
..
so, to say a bit clearer: as state of today /Dec/26/2020
https://github.com/freebsd/freebsd master branch
is out of sync
with https://git.FreeBSD.org

while

is in sync with
https://git.FreeBSD.org

so if one forks or clone freebsd-src you won't start with GitHub today(/Dec/26/2020).
 
.. so if one forks or clone freebsd-src you won't start with GitHub today(/Dec/26/2020)....
while it's possible to create your own GitHub mirror of src-main-tree TODAY (I did it like that), I guess that's only for us impatient who really rely on compiling with it right away.

while
is already on sync, I was told that the src-main-repo will come to GitHub the next days(perhaps minutes, perhaps seconds, who knows;-)
 
Back
Top