I’ve been looking into Git recently, not because I use or plan to use it, but I’m trying to figure out why it’s suddenly the go-to for source repositories (I’ve heard rumors that some companies actually use Git… internally?!).
What Sounds Good
“Distrubuted architecture”
“offline development”
“push/pull contributions”
However, these are all just buzzwords.
Why It’s Not “Good”
Nothing is truly distributed.
For something to be truly “distributed”, it must exist only “in the ether”. However, there is no truly distributed system. Skype has “super nodes”, computers that must do nothing but act as gateways for Skype connection information, these are run by Skype. BitTorrent usually requires a master seeder and a central distribution point for the torrent files themselves (Pirate Bay hosted torrent files, but did not seed), otherwise anything shared via torrent is only short-lived (once the seeders are gone, so is the file). With Git, you have GitHub. GitHub acts as the master repository. Sure, anyone can replicate your repository, but the developers using GitHub certainly aren’t going to use “Joe113465” as the source for anything. I imagine any company using Git internally also uses a master respository, and therefore the distributed nature is useless.
Lets not forget that being “distributed” means every single person who replicates the repository has their own copy of the data. That sounds fine when every person is in a different country, but when you have one thousand employees all working at the same company, your employees all have (at least) 1000 copies of your repo. Even worse, if you “encourage” your employees to do their development on network shares, your IT department is responsible for providing storage and access to 1000+ copies of the SAME data. I’ve heard rumors about how expensive SAN/networked storage can be, and I can’t imagine any company wants to have to pay for that.
Off-line Development? Sounds rogue to me.
Off-line development sounds good on the surface. ” I can make updates on the plane!” And lets face it, in today’s world, that’s about the only place a tech-savvy engineer DOESN’T have access to the internet. How long would someone be flying that they would need to make multiple commits and/or check multiple revisions of a file? If you KNOW that you will need this data, you could easily check out these revisions ahead of time using centralized CMS. And if you need to make multiple commits, it’s not that hard to just make a copy of the file when you’re done so you can commit it the next time you have internet access. Really, there’s no reason to move to an entirely different CMS like Git JUST so you can work off-line.
And besides, how much ACTUAL work can you do while disconnected from the rest of the world? Can you really keep track of all the problem reports or change requests offline? But at the same time, you couldn’t possibly keep track of all the corresponding changes YOU are making to the source code? What if someone sent you an email with the details you need, or worse, sent you an email with changes/revisions SINCE you got on the plane? You might do 4 hours of work, then find out Joe sent you the wrong data.
Contributions Cannot be Ignored
When someone makes a pull request to your repo, they have already PUSHED their files to your repo, and the request show’s up in your repo overview. YOU must take time to address this requests, regardless of it’s value. I could go onto GitHub right now and push all kinds of nothing to various repos, and someone will have to waste their time clearing them out (or they would build up eternally). I won’t do it, but I could. There is something to be said about centralized servers where you can control the access, but granted, this is (should be) a moot point where companies use Git internally. I just don’t understand under what situation having a stranger push data to your repo could be beneficial. What happened to communicating with other developers? Synchronizing what needs to be done and where? If Joe makes a change in his branch, why can’t he just send me an email saying he made a change he wants me to check out? Did the whole CMS really need to be designed around the ability for Joe to push his changes to my repo then send me a “pull request”?
What’s It All Mean?
It doesn’t really mean anything. My opinion on the matter is totally irrelevant. Some people see benefits and choose to use Git (Linus Torvalds obviously saw a benefit when he created it). However, I imagine most other people use it because “it’s Git”. GitHub seems to really be helping out the adoption of Git. Not sure what happened to SourceForge or why people switched or choose GitHub over SourceForge (especially when SourceForge lets you choose between Git, SVN, or Mercurial). I suppose it’s how FireFox got so popular over Opera, then Chrome over FireFox, marketing. Anyway, I just needed to rant.