Cool, I hadn't seen this thread. And here was I trying be all political and stay on topic. Not anymore....
![Laughing :lol:](./images/smilies/icon_lol.gif)
.Here follows my full opinion of git vs svn. This is a long rant, you've been warned. I would like to start by clearing some stuff up:
1) You guys have done great, and whatever scm you use has had minimal impact on what you've accomplished and it will keep being that way
2) Programmers are passionate about their tools. Editors and source code management (other than language choice) are the biggest decisions a programmer makes on what kind of tooling they use. Even if they end up being close to inconsequential they matter to that human part of us.
3) Git = decentralised SCM, Svn = centralized SCM. These terms are used interchangeably.
SVN vs Git
Synopsis: Centralized SCM (read svn) is shit, De-centralized source code management (read git) is less shitty. Use git.
Why is SVN shit?
SVN is a fine code archival program, but it can't branch worth shit. Once you have more than one commiter it becomes unwieldy and it requires a very coordinated group to keep things straight (I would not call open source voluntary development very coordinated). That's why most svn projects avoid branching and only do it when absolutely necessary. And then its mostly unmergable branches. Like release branches where the code gets back ported from mainline to do bugfixes and maintenance releases. Notice that branches in svn are more like placeholders where code goes to die because merging is so painful. Why is merging painful you might ask? Well because people (OS programmers specially) tend to want to do whatever crazy thing they feel like that day. When you have multiple people committing into the same repo they tend to fuck shit up, this in turns pisses off the lead devel because it breaks his house of cards and adds management overhead to a project. When more than one person sharing one repo it's basically a race condition constrained by politics. It will always break.
Why is Git less shity?
Instead of trying to make everybody live harmoniously in one repo, git embraces the chaos and lets people do whatever they want in their own little world. They only have to agree at the point of exchanging code, nobody inflicts anything on anybody. If a repo won''t merge with my code, i just tell the developer to fix his shit or it wont go in. Or if i feel benevolent (or the other developer is the lead). I pull his code into another branch and merge it into my stuff. This seems like a lot of work. It isn't, these systems are built to find the best merge path to and from different points in the tree. All you have to do is make sure those paths exist. It's still shity because you have to talk to people and agree on how things are going to be done. You have to be mindful of where you are in the tree and how your code will find it's way home to mainline, this becomes second nature after a while, like driving stickshift. But this way you don't break the tree when you cock it up.I see kb1gtt's comments about git being hard to learn. He's right, but the same can be said for any good tool, in his side of the project it's oscilloscopes, voltmeters, test circuits, EDA programs... etc. None easy to use but very powerful and easy to use once you know your way around them. For storing binary bits and bobs (like the ones in the hardware directory), it sucks just as bad as any other scm. Binary and scm don't work together and I don't know how to solve it. It's one of those things you just have to work around
![Sad :(](./images/smilies/icon_e_sad.gif)
.
Use git?
Using git as a group is not as hard as it looks but you have to stop expecting svn things from it. File locking in git is a non-sequitur for example; so is version numbers and linear code paths. Embrace branching and merging as the main way to share code. So what would development look like in a de-centralized rusefi world? Here are a couple real world examples, isolating large changes in the code and filtering contributions, i leave implementing those things in svn as an exercise to the reader:
There is a new version of ChibiOS, it makes coffee and give bj's so of course you really want it managing your engine. The proper way to do this IMHO is to branch off into a chibios_upgrade branch, break the codebase all you want and make it fit. Meanwhile the mainline known as "master" in git parlance only takes in higher level changes and fixes that won't be touched by the chibios upgrade (like the next example). You can merge those changes from master into the chibi_os branch as you do the upgrade if you like. Then once the chibios_upgrade branch is ready to be used by the rest of the coders; merge it into master. The system will understand what the merge path is and just do it, provided that you haven't done any chibios specific changes in master, even then there are things called merge strategies that allow you to specify how merging is to occur and over-ride changes depending on the merge direction.
Spags freaky a/c code, some crazy programmer lives down in the caribbean where it's always warm and he want's a/c. So he writes this a/c controlling code, some of it looks good but you're not sure about other things. You have two options, you can ask him to modify the code and change the things he doesn't like and put it in a for_mainline branch. You check that the code fits your criteria and merge it when it's ready. When he updates his repo to yours; the code will have come full circle and nothing will have broken, the system will just get it. Option two, he's an asshole and tells you to fuck off if you don't want his perfect code (not really but i'm not calling anybody else an asshole). You tell him to fuck off but then comes summer, it gets hot and there is newfound use for that code. You pull his code into your repo, hack it up on a incoming_asshole branch and once it's ready merge it into master. Again the system gets it.
These are things that have happened and are going to keep happening, i think de-centralized code management offers the saner solution to these insane problems.
P.S. How hot does it get in russia, do you guys even need a/c?