Git vs SVN comparison

Overall SVN easier to get into and is more accessible due to the
excellent app called "TortoiseSVN":http://tortoisesvn.tigris.org/ (TSVN).
It is a GUI tool that allows you easy execution of all important
standard workflow commands via good explorer integration.

Git has a not yet such excellent tools.
However "TortoiseGit":http://code.google.com/p/tortoisegit/ (TGit) is in heavy and rapid development.
Git GUI, part of the standard windows git package, and especially
the all-in-one package gitExtensions are work well.

For experienced devs, check "WhyGitIsBetterThanX":http://www.whygitisbetterthanx.com for an advanced
high level, brief and still extensive summary and comparison.

h2. Git

h3. Pros of git

* Upload and download takes less time due to very good compression.
* Overall very fast command execution (better in performance).
* You commit to your local repository first. This means you can commit
very fast without normal wait times. No need to have Internet connectivity.
You do the upload to the server of several commits in one go.
* *Git Bash* gives you the option to work in a Linux command shell.
Allows some nice advanced use (mass delete / rename etc) and
very fast typing.
* Tools:
** *Git GUI* has most of the needed git command available easily via key shortcuts.
The app is fast and the UI is fine.
** *GitExtension* has a nice all-in-one installer making it easier to install.
Key shortcuts missing and bit complicate multi window design, yet has easy
access to very very many git commands and settings.
* No messing with SVN folders (no .svn folder in each folder).
All the files of the local repository are in one .git folder
in the top most level.
* You can just remove or rename files via explorer (no extra
rename/delete command needed) (as git tracks content not files).

h3. Cons of git

* There is a transition phase when coming from SVN. Different wording,
to a degree different workflow, more complex.
*

These are all command line based videos explaining the basics of git throughly.

* "GitCasts: Normal Workflow":http://www.bestechvideos.com/2008/05/29/gitcasts-normal-workflow: 5 minute screencast.
This episode demonstrates how to setup your .gitignore file, how to use and
interpret git status output, how to add and remove files from your index,
how to commit and what git does in the object database during these operations.
* "GitCasts: Setup, Initialization and Cloning":http://www.bestechvideos.com/2008/05/29/gitcasts-setup-initialization-and-cloning: 5 minute screencast.
This episode shows you how to setup your Git configuration, how to initialize
a new repository and how to clone an existing repository over both
the Git transport and the HTTP transport.
* "GitCasts: Git Diff":http://www.bestechvideos.com/2008/07/12/gitcasts-git-diff: 9 minute screencast.
This episode goes over some of the common or interesting options to 'git diff',
showing how to see what has changed between your last commit and
your staged files, unstaged files, all changed files or another commit.
We also demonstrate how to create and apply patchfiles and
how to view changed file stats using diff.
* "GitCasts: Git Log":http://www.bestechvideos.com/2008/05/29/gitcasts-git-log: 6 minute screencast.
This episode is on git-log, which demonstrates most of the major features and
options to the git-log command. It includes showing the stat, short-stat and
name-stat options, the pretty options, the since and until limiters, the path
limiter and author field searching.
* "GitCasts: Interactive Adding":http://www.bestechvideos.com/2008/05/29/gitcasts-interactive-adding: 4 minute screencast.
This episode demonstrates how to use the git interactive add command.
It covers all of the major features of interactive adding, including status,
update, revert, add untracked, patch and diff.

Expert:

* "GitCasts: Branching and Merging":http://www.bestechvideos.com/2008/05/29/gitcasts-branching-and-merging: 9 minute screencast.
In this screencast, we take you through a workflow where we branch, stash and
merge several times. It demonstrates the branch and show-branch commands,
how to switch branches, how to stash changes, how to list and apply stashes,
how to resolve conflicts, how to create and delete topic branches,
and what fast-forward merges are.
* "GitCasts: Rebasing":http://www.bestechvideos.com/2008/05/29/gitcasts-rebasing: 10 minutes Screencast.
This screencast follows roughly the same course as the previous one on
branching and merging, only I replace merging with rebasing.
This screencast also demonstrates the interactive rebase command git rebase -i.
I also demonstrate some slightly more complex branching, by using both
interactive and normal rebasing techniques simultaneously on separate branches,
then choosing one and deleting the other.
* "GitCasts: Git Submodules":http://www.bestechvideos.com/2008/06/23/gitcasts-git-submodules: 15 minutes Screencast.
Needs submodules concept understanding!
Shows use of submodules quite extensively and well presented.
* "GitCasts: Browsing Git Objects":http://www.bestechvideos.com/2008/05/29/gitcasts-browsing-git-objects: 7 minute screencast.
In this episode, I show how to browse and inspect raw Git objects.
The major tools covered are the git cat-file and git ls-tree commands to
inspect the object contents, and then I cover some of the included graphical
browsers, gitk and gitweb.
* "GitCasts: Distributed Workflow":http://www.bestechvideos.com/2008/05/29/gitcasts-distributed-workflow: 14 minutes screencast.
This screencast demonstrates a distributed workflow. It takes two personas,
creating a project in GitHub and pushing to it in the first persona, then
cloning that project in the second. The second sets up a public, read-only
HTTP repository on his own server. The first then fetches from that, merges
changes and pushes back to GitHub. It also demonstrates an instance in which
the Author and Committer fields can differ for a commit.

h3. Links

* "Git home":http://git-scm.com

* "Git Community Book":http://book.git-scm.com/: Welcome to the Git Community Book.
This book has been built by dozens of people in the Git community,
and is meant to help you learn how to use Git as quickly and easily as possible.
* "GitFaq":http://git.or.cz/gitwiki/GitFaq: Official FAQ. Lots of good info.
* "GitTips":http://git.or.cz/gitwiki/GitTips: Many useful tips.
* "GitReady":http://gitready.com/: If you're looking for pointers (no pun intended) on how to use git,
look no further! The goal with this site is to make it usable as a way for beginners to get off
the ground using Git and to show those who are already familiar with Git some new tricks.

* "Git bash aliases":http://git.or.cz/gitwiki/Aliases: With aliases, you can avoid typing
the same commands over and over again. Since version 1.5.0,
Git supports aliases executing non-git commands, by prefixing the value with @!@.

* "WhyGitIsBetterThanX":http://www.whygitisbetterthanx.com: Here is why people are switching to Git from X,
and why you should too. Just click on a reason to view it.

* "Git-presentations":http://github.com/schacon/git-presentations/tree/master by schacon
** Basic git talk: "60 minutes screencast version":http://gitcasts.com/posts/railsconf-git-talk.
High level overview of Git, why people use it, comparisons to SVN (including benchmarks), then a rundown on basic usage
- setting up, workflow (edit/add/commit), what's happening behind the scenes, branchingand merging, log, diff, etc.
About 1 hour if you talk as fast as I do and there aren't any questions, but it's taken me close to 2 hours before with
a chatty audience.
** Git world economy talk:
This is a short, 30 minute or so talk that I tend to give at larger companies that is very high level and fast paced,
intended to convince people to move their personal and company open source projects to Git and GitHub. This talk is
about half high level Git evangelization, then half GitHub evangelization.
** RailsConf08:
The first big talk I gave on Git in early 2008. There are over 500 slides here, but I gave them fairly easily in about
45-50 minutes. I did a screencast of this deck, so you can see the presentation being given (url in the readme in that
subdir). It introduces basic Git concepts, starting from the internals, then goes over all the porcelain you use most
often. This is a bit old (pre 1.6), it still assumes you have all the executables in your path rather than in libexec,
and I've since moved away from talking about internals off the bat (Basic Git Talk still goes over some internal
concepts, but much more gently and farther into the presentation, I think.
** Sor09:
This is the talk I gave at Scotland on Rails in 2009. It has a lot of the Basic Git Talk, plus a number of advanced
commands (revision selection, bisect, rebasing, etc). It is a large deck, over 500 slides - it will take at least 2
hours to get through. I did 80% of it in 45 minutes, but I was in overdrive., One could easily split it into two
shorter presentations.

h4. Handy extension

* "Git Remote Branching":http://github.com/webmat/git_remote_branch: git remote branch is a simple command-line tool
that makes it very easy to manipulate branches published in shared repositories. Very useful script written in Ruby.
Can be used to simplify managing remote branches (create, track or remove)
* "Experimental Client - NetBeans Git Plugin":http://www.nbgit.org: This is only a wrapper,
you still require a git implementation (MSYS/CygWin).

* "Installing Subversion":http://www.youtube.com/watch?v=2LU6LDXJm7U: 6 minute screencast.
Nice basic install guide and intro to TSVN for non IT people.
* "Basic SVN":http://www.vimeo.com/2260989: 13 minutes screencast. Basic intro to Tortoise SVN,
and some of the basic function that should be used when working on a project.
* "Tutorial: using tortoisesvn, subversion on windows":http://www.vimeo.com/1155196: 20 minute screencast.
Nice introductory tutorial on subversion using tortoisesvn covering creating
a repository, checking in, merging and some basic version control issues.
* "Learning how to resolve conflicts within Subversion (SVN) using TortoiseSVN":http://www.bestechvideos.com/2008/08/11/dimecasts-net-34-learning-how-to-resolve-conflicts-within-subversion-svn-using-tortoisesvn
6 minute screencast. Nice short video explaining conflicts and how to resolve them with TSVN.
* "Tutorial SVN":http://www.youtube.com/watch?v=d1RVEtsLWyE: 3 minute screencast.
Explain in French how to setup a repos with TSVN.

Advanced:

* "Best Practices for Subversion (SVN)":http://www.youtube.com/watch?v=MfLLDg7zWQg: 8 minute screencast.
Somewhat confusing as voice and text are not properly linked. Fair idea to listen
to voice *only* first and watch it a second time without sound.
That said good video sharing some thoughts about standard SVN directory structure
and directory design, updating, commit logs and binary file handling in SVN.
* "Creating a Branch in SVN with TSVN":http://www.youtube.com/watch?v=7j4tvvYSTIg: 3 minute screencast.
Short, nicely explained and well done.

Expert:

* "Apache and TortoiseSVN":http://www.vimeo.com/2182829. 20 minutes screencast.
In case you want to setup your own SVN repository on a server with apache.

h3. Links

Basics:

* "TSVN @ wikipedia":http://en.wikipedia.org/wiki/TortoiseSVN: Short and good feature summary.
* "TSVN home site":http://tortoisesvn.tigris.org/: Features of TSVN section contains many links to
pictures to give you an good idea of the tool and its look.