Getting started with Git
New jobs always come with learning "opportunities"; this one was no different in that respect. Once this long-time vi bigot learned enough emacs to create a daily security update, the big learning challenge was Git. I have used many different revision control systems along the way, starting with sccs, through RCS and CVS, to subversion – and a dash of mercurial. Git is fundamentally different than all of those – though mercurial is close – its learning curve is steep, its usage model is radically different.
One of the major differences is that Git is a distributed revision (or version) control system, while most of the others are centralized. In a distributed system there is no central repository that everyone uses to put their changes into, there are, instead, numerous repositories, each residing on a developer's machine. Typically, those developer repositories have been "cloned" from a master repository somewhere. Each developer then owns their repository; they can make changes, commit them, make branches, tag releases, etc. – all without ever contacting the master repository. When they are ready to share their changes, they either "push" them into a repository, or, more likely, ask a repository owner to "pull" changes from a specific branch of their repository.
Another reason for the steep learning curve is that Git started out as a fairly low-level tool, just providing the "plumbing" for version control. The intent was to add more user-friendly interfaces to the plumbing, so-called porcelain, as time went on. As Git matured, the porcelain has moved in with the plumbing, so the core Git package has had many of the rough edges filed off, but it is still lower-level than most other revision control systems. In my Git learning journey, I found a number of helpful sites, that can help get users up to speed rather quickly.
For users who want to learn Git so they can look at Linux kernel source, the best starting point is Jeff Garzik's "The Kernel Hackers' Guide to Git". It provides a quick overview of the commands needed to grab a copy of Linus's kernel tree, make branches from it, commit to it, and keep it up to date. The main missing piece is on using tags, which is how different versions of the kernel are represented in the repository.
If managing a project with Git is in the cards, the right starting point is: "A tutorial introduction to git". This covers the basics of setting up a repository to hold a project and importing the project's code. It also has sections on many of the tasks that a repository user will need to commit their changes, create branches for parallel lines of development, follow the history of changes, and collaborate with others. The second part of the tutorial covers some of the internal workings of Git: the object database and the index file.
Those coming to Git from another version control system may want to look at the tutorials specific to their tool. CVS and subversion have their own tutorials, each geared towards users converting from those centralized version control systems. The "git for CVS users" page is a bit terse, often referring to the tutorial above, but it does provide some of the basics a CVS user will need. The "Git - SVN Crash Course" on the other hand is fairly in-depth coverage, presenting the exact Git equivalents for a large number of svn commands and concepts.
Once the basics have been mastered, it is time for the serious reference material, which is where the Git User's Manual comes into play. It contains multiple chapters covering every facet of Git, including a detailed look at the internals of Git, its storage formats and the like. When trying to do something more complicated than is covered in the narrowly focused tutorials, the User's Manual is the place to go.
Git commands are typically invoked from the command line as subcommands of the git command: git commit for example. When trying to track down the most serious reference material of all, though, using an alternate syntax to refer to the Git subcommands is required: man git-commit for example. From the command line, man git is a good starting point; the same information, with nice clicky links, is also available here.
With these reference materials at hand, it should be fairly straightforward to get up and running with Git. For me, at least, there is still a lot to learn, but with these sites available, I am mastering more of it each time I dive in. If still more information is needed, the GitWiki and its documentation page are the next places to try.
Posted Aug 16, 2007 4:07 UTC (Thu)
by dadillow (subscriber, #10345)
[Link]
Posted Aug 16, 2007 10:06 UTC (Thu)
by modernjazz (guest, #4185)
[Link]
Posted Aug 16, 2007 11:26 UTC (Thu)
by daenzer (subscriber, #7050)
[Link] (2 responses)
Just a warning for people coming from other SCMs, not criticism of this
Posted Aug 16, 2007 18:34 UTC (Thu)
by scripter (subscriber, #2654)
[Link] (1 responses)
Posted Aug 23, 2007 8:36 UTC (Thu)
by arcticwolf (guest, #8341)
[Link]
Seriously, stop whining.
Posted Aug 16, 2007 22:44 UTC (Thu)
by Algol (guest, #2681)
[Link]
http://www.youtube.com/watch?v=4XpnKHJAok8
Posted Aug 17, 2007 16:38 UTC (Fri)
by giraffedata (guest, #1954)
[Link] (3 responses)
As described by the article, the learning curve for Git is shallow, not steep. A learning curve is a graph of productivity on the vertical axis against time on the horizontal axis. A tool with a steep learning curve is one you can learn completely in a few minutes.
The article probably means to say metaphorically that learning Git is a steep hill to climb.
Posted Aug 17, 2007 18:25 UTC (Fri)
by bronson (subscriber, #4806)
[Link] (2 responses)
http://www.wsu.edu/~brians/errors/steep.html
Posted Aug 17, 2007 20:33 UTC (Fri)
by giraffedata (guest, #1954)
[Link]
I agree, if the cause is getting everyone in to stop using the term incorrectly. But that's not my cause (and if it were, my contribution to it would be too insignificant to justify typing in a comment).
I very much doubt that. Anyone who looked deeply enough to see a graph would see the real one. Either they're visualizing climbing a hill or thinking of "steep penalties" meaning "high penalties."
There are also people who use "learning curve" all by itself to mean "learning requirement," as in "we'd like to switch, but there's a learning curve." This falls in the same category of using fancy words to sound smarter as "we need connectivity" to mean "we need a connection" or "we'll sell it at a higher price point" to mean "we'll sell it at a higher price."
Posted Aug 20, 2007 4:41 UTC (Mon)
by pjm (guest, #2080)
[Link]
If a tool requires a lot to be learned before I can be productive with that tool, then I will do a lot of learning early on, so such a graph would indeed be steeper than for a tool requiring very little knowledge in order to be productive in it, where one can afford to take one's time in learning more about it.
A few more useful tidbits: 'git <command> --help' will bring up the man page for that command, and 'git --help' will bring up a list of common commands.Getting started with Git
Just a general comment: judging from the last several LWNs, two editors Improved LWN
are even better than one. LWN just keeps getting better. We're lucky to
have you.
I'm not convinced of the usefulness of tutorials for CVS or SVN etc.Getting started with Git
users. Git is just fundamentally different, and trying to treat it like
something else can be confusing rather than helpful.
excellent article.
The workflow of Git is completely different than when using centralized systems like Subversion. I've written up my initial impressions of Git: Git underwhelms.
Git fundamentally different
Wait, are you serious? I checked out your post, hoping to get a list of actual issues and shortcomings with git, and now you seriously want to tell me that your most urgent complaints about git and git-svn, respectively, are "noone else in my company uses it" (boohoo) and "I have to get used to a new tool" (again, boohoo)? As the kids way say these days - "I LOL'ed".Git fundamentally different
Worth watching (for those that might have missed it):Getting started with Git
Getting started with Git
Much like hacker or begging the question, this is a lost cause. For better or for worse, "Steep learning curve" has come to mean "very difficult to learn." Perhaps people think that the vertical axis is 1/productivity or difficulty or something.Getting started with Git
Getting started with Git
Much like hacker or begging the question, this is a lost cause.
Perhaps people think that the vertical axis is 1/productivity or difficulty or something.
Without having come from a cognitive psychology background (see http://en.wikipedia.org/wiki/Learning_curve), I'd have thought that a learning curve would have the amount learned as the y axis, not productivity.Learning curve