The Rise of Git
snydeq writes "InfoWorld takes a look at the rise of Git, the use of which has increased sixfold in the past three years. Buoyed in large part by interest among the Ruby community and younger developers, Git has been gaining share for open source development largely because of its distributed architecture, analysts note. And the version control system stands to gain further traction on Subversion in the years ahead, as Eclipse is making Git its preferred version control system, a move inspired by developers and members."
git is better than all the other VCSes
-- Cameron Eagans http://cweagans.net
This may be due in part to the way github integrates social networking and coding-- I'm unaware of anything similar for SVN, Perforce, Bazaar, Mercurial, etc...
Technical aspects aside, GitHub is probably one of the most significant factors in the adoption and promotion of Git.
Yet another DVCS article that doesn't mention Bazaar at all. And cursorily swats away Mercurial as "not as large a community."
It seems like just about every argument in favour of Git could be equally applied to any other DVCS. On top of that, the only thing it has going for it is a larger community (and being the creation of Torvalds).
I've argued to wit's end that Bazaar is superior to Git in a multitude of ways (branches as separate file-system directories, optional ability to work in bound mode as with Subversion, revision numbers, explicit notion of a 'trunk' versus merged branches, explicit moves/renames rather than heuristics, commit metadata). Basically Bazaar has a much richer data structure than Git. The last point (commit metadata) is crucial: because Git lacks commit metadata, it is impossible to meaningfully use any other revision control system in conjunction with Git -- what a selfish decision.
Yet all I ever hear is "Git is better than all the other revision control systems because [generic reasons why DVCSes are better than centralised ones]." Such is the case with Scott Chacon's site Why Git is Better Than X, which I wrote a rebuttal of at Why Git Ain't Better Than X.
Sometimes after spending a whole day amongst non-geeks, doing non-geeky things, I come here and read the names of some of the things these technologies are named.
Git? Ruby? Subversion? Eclipse?
I get this distinct hillbilly feeling after reading some of the names the open source community has come up with for their projects of late. Mental images of tie-clad programmers in a rusted pickup truck waving corded mice over their head while techno music plays kind of images. Then I hit page reload, and the feeling fades... until I think of Richard Stallman.
#fuckbeta #iamslashdot #dicemustdie
'nuff said
I switched away from git to svn for a while since the "store the entire repository in your local project" design was killing my disk quotas, and I just didn't need all the fork/merge functionality so svn seemed simpler.
After the half dozenth time of blowing away my local svn project because something was royally screwed up again I decided to go back to git.
There's something to be said for a system that just works and doesn't end up with you spending hours screwing around with your version control system instead of getting your work done.
I stole this Sig
The lack of decent tools is going to slow adoption of git, particularly in corporations. I've yet to see a tool that can handle even a simple daily workflow so I've stuck to cli, gitk and git-gui which are all clunky. egit has definitely improved it still feels out of place and I believe is missing features (does it even support autocrlf yet?)
Corporate projects will almost certainly have a centralized repository and while git can deal with this, its possible to paint yourself into a corner where its painful to recover.
For reference, I've been a daily git user for ~16 months both at the company I work for and as a committer at Eclipse.
If you are on a Mac at least, you have a number of options - Tower is a very good client, though sort of expensive. GitHub has a well written Mac client app as well (it's free).
There are other free solutions too, GitX is a pretty robust one.
I find any of these handles day to day use of Git pretty well.
"There is more worth loving than we have strength to love." - Brian Jay Stanley
I think Git has/had a lot of things driving people that way:
1) Linus using Git of course drove a lot of Linux people to use it.
2) As others have mentioned, huge use in the Ruby community
3) GitHub, making it incredibly easy (or as easy as possible) for anyone to get started with a git project that would be hosted remotely.
4) iPhone developers, there are quite a lot of them now and many have seemed to standardize on git (in fact it's the primary SCM supported by XCode now).
Above all though I think it's probably GitHub making this all happen. Until now it was a fair amount of fiddly configuration to set up a remote SCM server, so few bothered unless you had a project with a few people and some dedication. Now I wouldn't dream about doing any project, no matter how small, without it being hosted remotely. GitHub makes it as easy as I think it can be for people who would not otherwise use SCM at all, not even locally, because they help with setup and then add the extra value of holding code safely on a server to entice you to use it.
"There is more worth loving than we have strength to love." - Brian Jay Stanley
Git has some nice advantages, especially in distributed environments.. but I still prefer svn because it's just a lot easier to use. I'm sure it's good for merging, but as a developer it ends up being a headache. For instance, if you want to check in a group of specific files and not every change you've made.. PITA
If you need web hosting, you could do worse than here
Ok. You have a small project/sprint? Just cp your source code periodically (or rsync). You have a couple of developers on the project, use svn. But over time, the most useful projects, I predict, will be so complex that more and more code and complex algorithms will be required to _generate_ the end source code. Git is the best tool to support that for that today; and, using Git is a full skill in and of itself, a testament to it's flexibility and a warning to those in small projects trying to avoid the costs of bureaucracy.
Git's distributed design mirrors the distributed developer pool (distributed just means global--i think:p). This is why it is a natural development in code-tools. Wait. Did someone just tell me that the Linux kernel is developed using Git? (cups ear to the air)
hg > git > svn
Exactly who the fuck has 50GB in one source code tree?
--
BMO
Those who store data, images, other binaries like built executables and other artifacts alongside the code.
You can argue that you shouldn't do that, but there are times when it's difficult to avoid, and if you need to be able to keep versions, it can be done easily with something like SVN.
I think GIT has it's advantages, but to reject all predcessors and raise it up as the only way to go is foolish.
These posts express my own personal views, not those of my employer
Visual Studio rocks!!! Pwns all this stuff.
I use Git on my project which has only one developer (me, of course). I can't imagine working without source control.
[...] will be so complex that more and more code and complex algorithms will be required to _generate_ the end source code. Git is the best tool to support that for that today; and, [...]
I'm curious. How would you use git to support code generation?
If it weren't for this (http://fimml.at/#glip), I probably wouldn't use Git. I know it ain't real Git, but it does a good job of fooling my Git client, and it lets me put up a repo on my webhost.
Winning!
"Good, Fast, Cheap: Pick any two" -- RFC 1925
Since the idea behind Git is that since it is distributed, and doesn't need a master repository, I guess it didn't make sense to have revision numbers when it was created (for the Linux kernel). This is because when two people make separate revisions at the same time on their local repositories, a linear revision number would conflict.
However, I've never actually used any Git project/repository which didn't have a master repository. This is both local repositories for my own projects on my Dropbox folder, and professional repositories I've used (Android and the various repositories at the company I work at), And especially at work, it has been annoying that we didn't have revision numbers.
I wish Git would get a new feature added: the ability to assign a repository as the "master" repository, and in turn the ability for the master repository to assign revision numbers. If people are wondering how that would work considering people make commits on their local repository and then push them to the master causing possible conflicts, the revision numbers wouldn't get assigned until they hit the master branch and they also split it up for merges:
5
/ \
4.1 4.2
\ /
3
(or something similar to the above)
Lots of people who use an alternative VCS like Mercurial, Bazaar, etc., bitch about Git because the lack of revision numbers. To those who are unfamiliar, each commit in Git has a SHA1 hash which is used as an identifier instead of a revision numbers. Unfortunately, they are very unwieldy to communicate to others. At work we always use the name and date-time instead, but that has problems as it doesn't convey the branch for instances when it matters.
Just because the U.S. is a republic does not mean it is not a democracy. Democracy/republic are not mutually exclusive.
#1 reason I like Git is:
With tortoiseGit, you can right click on any folder and choose "create repository here"
And than you're done.
Its that easy
So far, most of the complaints I'm seeing are developers who just don't know what they're doing. "I've yet to see a tool that can handle even a simple daily workflow..." It's called a portable Bash shell with Git, and it's amazing, especially on Windows. How hard is to commit to a Git repo? You need a tool to help you do that? Are your developers afraid of a shell? Surely not. "Until now it was a fair amount of fiddly configuration to set up a remote SCM server, so few bothered unless you had a project with a few people and some dedication." I'm not saying you're wrong (you're not) but it saddens me to think that the "typical developer" can't be bothered to set up Git and SSH on a remote server.
There's something about "gitorious" that doesn't square with the hills of the Appalacians. You can go too far. Feynman had a point in complaining about the brethren of the elusive squirtino, which is in the news lately.
One the hillbilly side of the fence I've got a finger named "git". BitKeeper was a nice product, and a nice lesson. Thanks for all the fish may you rot in hell. After MySQL, we should have known better. Certified 100% hillbilly free by Sir Lawrence Ellison.
Also, the purple rat is not dead yet, but appears to be pushing up the daisies really slowly. Good god, it 1.0-ed when I wasn't looking! Meanwhile, the hummingbirds are feeding elsewhere.
Do your Gaga friends have culture? Of late? Just wondering.
Does that mean there's a way to use git on Windows that doesn't completely suck?
My previous conclusion looking into git was that if you weren't using the command line in Linux the git developers would just as soon see you die in a fire.
Meh, call me when there's tortoisegit, and by then it will be too late.
I had a small role in getting the PostgreSQL project to convert from CVS to git. There's a good summary of what happened at Lessons from PostgreSQL's Git transition. With a pretty conservative development community, the bar for converting from CVS to git was set pretty high: the entire CVS repository had to come through, such that every single release ever tagged could be checked out and get exactly the same files as checking it out of CVS (a little binary diff tool was used to confirm). With around 15 years of history in there, that took some upstream fixes to the cvs2git tool to finally accomplish; it took just over a year to work out all the details to everyone's satisfaction. My checked out copy of the current repo is 272MB right now, so neither small nor giant.
I would say that everyone who works regularly on the code is at least a little bit more productive than they used to be, with the older CVS experts having seen the least such improvement. But some people are a whole lot more productive. I'd put myself in that category--my patch contribution rate is way up now that it's so much easier to pop out a branch to hack on some small thing and then submit the result for review.
And the conversion seems to have improved the uptake of new developers getting involved in working on the code. Having to deal with CVS was a major drag for younger developers in particular, and Subversion is equally foreign to most of them now. As suggested in the article, anyone under 25 will only touch a corporate style CVS or Subversion repo if dragged kicking and screaming into it. As more of that generation rises through IT, old style repos will continue to get shredded at a good rate every year. It could have been any of the DVCS systems that ended up in this position, but git was the one that got the right balance of feature, innovation rate, and publicity. Now that it's got such a wide user base, too, I don't see any of the other VCS software options competing with it successfully in the near future.
Another major push for Git: It's used by Google for Android (Google uses Gerrit Code Review rather than regular pull requests) and has subsequently been used by many Android development teams (such as CyanogenMod) even if not for Android ROMs themselves, but just for apps and whatnot.
And yes, Github makes it incredibly easy to get large groups collaborating together on projects using Git. No doubt about that.
Meh, call me when there's tortoisegit, and by then it will be too late.
You missed the call, it was a while ago. I considered TortoiseGit mature enough to use around V1.3, which was January of 2010. The upward spike in downloads shown on their page, which really took off around V1.2, shows quite a few people agree.
I've been using TortoiseGit for some time, and it's pretty awesome.
I only remember one problem. I'm not sure exactly what happened, but it had something to do with the combination of (1) trying to hide the index from you (which I'm actually totally behind in its case) and (2) something getting into the index by other means. I think what I was getting was an empty commit dialog even though there was uncommitted stuff in the index. But that was easily solved via the command line, which may have been how I got into that state to begin with. That problem was a while ago so I don't recall really what happened. :-)
You have a small project/sprint? Just cp your source code periodically (or rsync).
Never, ever, again, no. Whatever I code, big or small, it ends up in SVN or GIT. Never again will I be searching files for older revisions, and I can't understand how some people can handle professional projects without it.
http://www.youtube.com/watch?v=HtyO4tmpPdk
Thank you git for giving me reasons to use such an awesome word. In normal conversation.
Once you start despising the jerks, you become one.
have you considered "git tag" + "git describe"? I give each release a version number tag (eg 1.21.1), and then "git describe" gives a "last tag + offset + UID" string (eg 1.21.1-35-g86897b0) which works wonderfully for things like package names (eg libfoo_1.21.1-35_amd64.deb)
I mod down anyone who says "I will be modded down for this", regardless of the rest of their comment
sac longchamp have superior craftsmanship and design ,so that many people like to own them blah blah blah
But do they support any workflow?
And here I thought it was just me thinking the gits were on the rise!
I find SmartGit more useful for day-to-day stuff.
I have TurtoiseGit installed (and it works) but i never use it. Having the correct icons show up in Explorer is nice though.
Hivemind harvest in progress..
Tom Lord, developer of rival Arch must be spitting blood at the success of Git.
I followed Arch's development back in 2004 and quickly lost interest. The last crazy thing I remember was Tom trying to build a home-brew LISP derivative *into* his version control system. It was going to revolutionise everything. He even wrote a long manifesto-cum-design document in three parts. At that point I gave up and moved to Subversion. I just wanted a modern version control system that worked.
In Eclipse you now also have top tier support for Git through the EGit plugin. This is sitting over a pure Java implementation of git called JGit (i.e. no need for msysgit). It works pretty well and in the manner you would expect if you've ever used a VCS with Eclipse before. JGit and also powers Gerrit which is a git server and web app that slots a code review & approval system into the workflow.
(Just for clarification: I've used both Bazaar and Git extensively.)
"Externalized" branches are still a bad idea. I've admin'ed a Bazaar installation and the fact that every group had its own convention for laying out branches in the file system was a complete pain in ass. (Some had multiple levels of directories, others only one, etc. etc.). It's bad from a scripting perspective and from a consistency perspective. It does not add any functionality that you actually need, but it does add a lot of incidental complexity.
There's also the fact that disconnected development requires you to predict in advance what branches you're going to need. Having all the branches in the same repo (i.e. it costs nothing to sync all of them) is a huge advantage here.
Re. revision numbers: Revision numbers are a fundamentally flawed model in a distributed world. In a distributed system there can be no consistent numbering unless you can and do enforce a global total order... which neither Bazaar nor Git do. The only sane thing to do is to use a "content" hash. The fact that Bazaar just lies to you and pretends that there is a global total order is not a plus. In practice, it led to unnecessary confusion because you always have to refer to branch and revision number, but people being what they are, they often forget that. The fact that a content hash identifies a given revision globally and uniquely means that you even don't have to care where you get the repository data from as long as the hashes match.
IME Bazaar is also a lot buggier than Git, presumably because of an internal model which is a lot more complicated than Git's. It's got a huge test suite, but we regularly ran it various obscure errors. It's also (still!) a lot slower than Git.
HAND.
Community matters.
I don't think that too many really believes it's better than other DVCS. Instead it is exactly these the facts: Eclipse adopts it. They adopted it simply because community is large and getting bigger.
Same thing with programming, clever programmer comes up a nifty solution but usually too late. Community on the other hand has already adopted something that was there already, usually hacked together in a hurry. In the end enterprises etc. will adopt the one with bigger community, while it might be really shitty underneath. (Want examples? Look at the CMS floating around, haven't seen any that is programmer friendly with large community)
True Git !
...is due to the influx of British entertainment in America. The Harry Potter series uses "git" a lot, as well as my 2nd favorite British-ism, "numpty" (first being, "all sixes and sevens" which barely beats out not understanding what somebody is "on about" and the ever-confusing, "my father is called William" as opposed to him being named something.
Oh wait, this is a thread about some nerdy open-source stuff? My bad. Carry on.
I used to have lots of problems to when I first tried TortoiseGit a little while ago, but then it suddenly stabilized. I haven't had a crash or failure from it for a while now. Might want to give it a try again.
I have seen open source projects like GNOME convert from subversion to git. Many of the git users were arrogant about the greatness of git. They all felt this way because Linus create git just like the Linux kernel. However, this does not mean git is better then others, such as, Mercurial.
And thats it.
For the most simple task, namley insuring yourself against loosing some version of some file in the process of editing it, git has incredible low requirements for understanding, infrastructure and a very good support for plain local operation.
I explained simple git usage in 10Minutes a colleague who never use a VCS before how to manage his files.
Me and my buddy are currently moving to Git as the center and foundation of our web development pipeline.
And while I have to hand it to Linus that distributed is the way to go nowadays I also have to say that there are quite some obstacles when attempting the switch.
1st of all: For n00bs in Git or Versioning in general there is still a lack of 'hand-holding' when it comes to finding the correct strategy. Switchers do need a little help whilst on the way to noticing that their brain has been damaged by thinking in concepts of centralised versioning.
For example it was a bit of a hassle to find a correct zero-fuss substitute for 'svn export' in Git. Export is needed for web development, especially in enviroment where not everything is handled by a CI server or a build system. Curiously enough, this problem forced us to understand Git better, in that everything that is considered a big deal in centralised enviroments like SVN is considered standard in-between/throwaway procedure in Git. Turns out best way for us to do an export in Git was to git clone a working tree, copy our deployment stuff and delete the entire cloned repository again.
2nd: Usability and real-world scenarios/examples of usage in the docs that take non-kernel development scenarios into concern. (This is simular but not exactly the same as point 1) While I have to admit, documentation is improving by leaps and bounds as we speak, there are still some gaps to close in this department. The PDF version of the Git book sucks and I still find the hurdles in understanding Git usage models and terminology to difficult to understand intuitively and not explained good enough for the versioning/decentralised layman.
3rd: Tooling. Tooling has improved massively in the last 2,5 years but as far as my spoiled ass can tell I could still use some neater FOSS Git Gui options than the ones available. Git Tower for Mac OS X is my benchmark here. It's an awesome commercial tool, but I'd like something like that in x-plattform FOSS. ... Did I mention I consider myself spoiled? :-)
All in all I think in the recent Thin Client / SOA craze under a new name called 'cloud-computing' - which appears to finally catch on full scale - there is no alternative in moving to distributed versioning in order to keep your shit under control as a computer professional.
Might aswell use Git for that. I expect to have all my stuff - code and documents - versioned and pipelined by the end of the year, in multiple repositories and lingering cloned across various on- and offline drives, archived, backuped, stored and versioned. Completely independant of any computer I may be using at the time.
It that respect the pain of going Git full scale is more than worth it.
My 2 cents.
We suffer more in our imagination than in reality. - Seneca
love to passionately rally around stupid causes that nobody else cares about.
Subversion is so annoying to use that it boggles my mind. You have to be incredibly deliberate in your workflow or you're screwed.
Intermediate stages before pushing to a server are a boon for the clumsy and hasty like me. I often instinctively run the last command when I want to test a program, and sometimes it's not `python x.py`, but `svn ci -m "blah blah blah"`. In Git, as with many other DVCSs, local commits (and the ability to change commits after the fact) ameliorate this issue. Also, the ability to be able to work and snapshot your progress as you go even while offline is incredibly useful.
There's also a lot more about svn that can be annoying. For instance, the output of `svn log` is not paged by default, so all you get is a massive info dump with absolutely nothing usable because your terminal can only hold so much output history. This is especially frustrating over ssh.
Basically, while svn is definitely my favorite client-server VCS, it still has a lot of problems and is far less safe and simple than Git or another DVCS.
I've used CVS and Visual Source Safe ( with SQLServer the only two pieces of MS Software I will ever praise ).
VSS was easy and intuitive to use. Like everyone CVS is a PITA and I feel like I manage my files instead of it managing for me.
What does GIT have over other version management systems?
Easier to use? Easier to install?
If someone who hacks on Git is reading these posts, when are we going to have a single command to cleanly remove submodules as well as better support merges and rebases where submodules are changed or moved? Submodules are extremely awesome and I love the feature but doing anything more than adding them is a PITA.
Such as the Linux kernel.
You're quite the comedian!
Mercurial has 95% of Git's functionality and is far easier to use. The extra features are simply not worth the headache.
Git's Windows support is atrocious. The installation process is an easy indication of that. Mercurial is packed of "just works" moments.
Whoever does the merging into your "master" repository has the ability to make it look however they want. If your devs really dislike SHA1s, then request that the master repo start employing tags. It's not hard; after the repo admin merges in new code, he can tag it according to whatever convention you like.
This is way better than arcane auto-generated version numbers. Will this small workflow change, you can have "meaningful" version numbers.
My favorite thing about Git is this: it is possible to make an extremely consumer friendly code repository. As "master" repo admin, you have the power to reorder, tag, squash, fast-forward, not fast-forward, whatever, until everything is just right. Then you can push to the master repo and listen to the oohs and ahhs as your devs (and later, your maintenance programmers) easily grok the gitk graph.
and avoid breaking APIs willy-nilly. Instead you: provide the new API and deprecated the old in version n and remove the old API in version n+1 (or +2, or whatever).
If you have such a huge system (12 modules each of which is apparently too big for git), it's a very worrying sign that you're breaking the inter-module API often -- it probably means the modules aren't actually modular.
HAND.
I love SVN, it works great, and the central repository model works great in almost every situation. But, recently, I've began using Git for my own projects because I dual-boot Windows and Linux. Allow me to explain.
With SVN, I have to maintain two different working copy trees: one for Windows, and one for Linux. This is because since they have different file addressing styles, they reference the central repository differently. So I can't just use the same working copy on both.
But Git fixes this problem by not caring where it is or where anything else is (unless you set up an origin, of course).
Another thing I like about git is that's it's practically impossible to break a project tree, as opposed to SVN where it's very easy. Your tree is completely clean except for a .git file at the very top. Though one thing I dis-like about it is the fact that I can't extract just a small part of a repository.
How disappointing... I thought this would be about Obama's election.
Commit messages are metadata and you can put whatever you want in there. But if you are looking for something more structured: git notes. Probably the most important metadata that git saves though are merge commits. It is extremely useful to know the development history of a merged branch.
Most of the other things you list are merely different design decisions.
Fascism should more properly be called corporatism because it is the merger of state and corporate power. -- Mussolini
We were evaluating a source control system for my company, and we would have probably chosen Git but the sole major complaint was its limited support for Windows. When Windows users go to install Git on the main web site and are told that it's a beta version, it makes them feel like second class citizens in the Git world. Given that 80% of the desktop market is Windows, if I were on the Git development team and I were interested in attracting more users, I would definitely make Windows support a top priority.
Torvalds covered this issue in his google talk video about git. There's is no way this numbering scheme makes sense with git. Take a look at git rebase and git cherry pick to quickly see why your numbering scheme is not appropriate. With the ability to reorder commit history at will there's just no room for CVS like numbering schemes.
If you're not familiar with git, I urge you to take a look at Torvarld's talk on git.
Something that is overly complicated and not quite "right" is the product of choice for the Open Source community. Typifies 99% of all open source projects.
SVN was promised as the solution to everyone CVS woes. In the end it solved one or two problems and created a half dozen new ones more severe than anything wrong with CVS. At least, with CVS, when the crap hit the fan you fired up your favorite text editor and fixed the repository.
Git on the other-hand, when managed properly, doesn't seem to push people into corners that are extremely difficult to recover from.
As I stated in the OP, this would ONLY work with a centralized repository setup, not a distributed one. The Linux kernel wouldn't make much sense with revision numbers. What I was thinking was that you could assign a repository to be flagged as the master, since in my experience I have worked exclusively with repositories that actually have a "master" repository.
And as I rebase and cherry pick all the time, I figure it would really hurt revision numbers, but other DVCSes seem to have tackled this problem. I don't know how, and I haven't thought it through enough. Personally, I think it would be fine for me to say "10th revision since this tag" and since the commit history could change, the revision numbers could change because it could become the "15th revision since this tag". The SHA would remain the same as the revision changed. And remember: this is only a people problem I'm trying to solve (communication, inherit description of the commit without looking up the SHA, etc.) Also, other posters have helpfully pointed out to me git describe, which I think I'll take a look at and start using.
Just because the U.S. is a republic does not mean it is not a democracy. Democracy/republic are not mutually exclusive.
Anybody have recommendations for the best way to learn Git?
And before you say, "just install it and use it", which I will, I'd like to learn from others' insights and mistakes, be it a book, web tutorial, class, etc. to save some time in the learning process.
My God, it's Full of Source!
OUTSIDE_IP=$(dig +short my.ip @outsideip.net)