Impaler[WrG];9081843 said:
Not sure what you mean here, SDK mods can indeed usually be combined without a problem but merging and diffing code between different SVN repositories is a pain, if you want someones mod they need to send you a diff or you need to check out their whole project and make it yourself. Git looks to be an easier solution to the code sharing hurdle. Also the ease of creating branches in git would encourage many small branches of limited scope and complexity.
That. ^
This is the very reason why this is an excellent idea. It's not about creating one dll to rule them all, or some centralized project, etc. It's all about making easy to combine the changes from different people: just pick what you want, then add your own features and magically keep everything in sync. You do not even need to ask for commit rights, you can commit locally.
For example I would like to modify the dll just to fix the civ5 bugs that plagued IGE. My dll would be only about bugfixes and optimizations. I would like to make possible for other modders to quickly add my code to their codebase, so that they can make IGE compatible with it and improve the civ5 experience, then keep things in sync. Git is the perfect solution for this.
Can someone please explain (I do really want to know) why git is better than what we have now?
Initially SVN was limited because of the data structures were lacking and that made merging branches very hard (it was nowhere stored that a merge was the result of a merge, so as your two branches evolved, it was difficult to keep them in sync). That was fixed later but it partially explains why distributed source version control systems (DSVCS) have such a good reputation and SVN such a bad one.
But let's forget the past and look at the present. Here are the differences that make Git good for what we're discussing :
* Git is decentralized: you get a snapshot of the online repository and create your own local repository where you can commit to. That repository still contains all the references to the online repository. So that means that any user, without any commit right, can commit locally, do his stuff, merge, branch, etc, all of that even being offline, then submit everything later. Work, complete, then commit/submit: it works better that way for decentralized and open-source projects. And potential contributors without any right can work first, ask later: a great incentive.
* The data structures are far more flexible (a graph instead of a tree): you *always* fork and implicitly create branches. Contrary to SVN, it's not about "first update to most recent version, then commit": instead, everyone is working on his own fork and end up what he's doing, then merge into any online version. You can also think about all commits being unversioned patches. It makes easy to merge patches together, keep them in sync, etc. Want to include a patch from July into a version from March, or the opposite? Or remove the changes from a patch from two months ago, locally or online, without removing the changes made after that? No problem. Internally, things are not ordered according to a stupid version, but according to how they were created. Tree versus graph.