SVN vs Git Centralized vs Decentralized SVN (and CVS) is based on having a centralized repository while Git is decentralized. In SVN, committing, checking out, merging, etc, all need to check into the central (remote) repository. Git's decentralized nature means that all commits, reversions, checkouts, merges, etc, all happen locally. You literally have an entire copy of the repository, entire history and all, and you manually sync up to the central source being used by your team (this is both good and bad depending on your situation). You can do more work without an internet connection than you can with SVN. Since you have to manually sync with the "source control hub" with git, there are extra tools added to be able to manipulate your commits before syncing/pushing out to the hub/public. You can combine commits and rearrange their order to have a clean patch history of each change. The manual syncing also promotes smaller commits because you don't have to worry about breaking someone else's working copy between your commits. A large change can be pushed out instantaneously to your team in a batch of numerous commits. This promotes and encourages people to commit often, helping developers even with their own work. Speed SVN's speed is limited to your network connection. With Git entirely localized, your speed is only limited by your local environment. Internet only comes into the equation when you push your changes to the hub. A merge involving a large amount of files is lightning fast when compared to SVN (I've had checkouts/merges/etc take 20+ minutes). Setting up a repo in Git is also very fast. Since it's decentralized, there is no need for the overhead of creating the centralized location for storage like SVN/CVS. Just "git init" and "git add ." and you're ready to go. Merging Git is designed for the ease of branching and merging. It's goal is that you can maintain multiple branches and merge them with ease. It promotes and encourages the developer to branch because it's so easy. Revisioning SVN uses incremental revisions for the entire repository, trunk, branches, tags and all. Git uses just hashes to identify a unique commit. It thinks more along the lines of "how many commits from HEAD" rather than specific commits. Staging Git has an extra spot between a modified file and a committed change called "staging". This can make it easier to develop, to maintain that "inbetween" spot and not lose your changes. If you've ever copied a file even when working with SVN or CVS, then you'll find staging commits valuable. --- Kathleen Murtagh On Wed, Jul 30, 2008 at 10:39 AM, Jerad Bitner <sirkitree@gmail.com> wrote:
This looks really good, and may just give me the excuse I've been looking for to get into GIT, as CVS is somewhat of a pain IMO... but what I have yet to see is someone explain the pros and cons.
GIT still looks to me like it's just a bunch more commands to try to memorize. Does anyone have some resources that clearly outline why anyone would want to use GIT over CVS or even SVN?
Thanks, ~Jerad
On Wed, Jul 30, 2008 at 12:57 AM, Gordon Heydon <gordon@heydon.com.au> wrote:
Hi,
This looks really cool.
I do all the e-Commerce development in git and esp when working with many branches it is so easy to keep it all in line with different versions.
Fixing a bug in 1 very can very easily be copied to another branch, and I find that they will convert 80% of the time with no manual effort.
However I don't like the CVS integration as much as I like the SVN integration. The SVN integration work much more like just another git repository and once you have made all the changes you can pass in all the commits at once. it is quite cool.
Gordon.
On 30/07/2008, at 1:25 PM, Marco Antonio Villegas Vega wrote:
Hello all,
I posted a little how to about maintaining drupal modules using git: http://drupal.org/node/288873
I'm sending this email because I see high activity on git related mails.
Hope this helps, ________________________________
Marco Antonio Villegas Vega ( __ - __ ) Ing. Informatica http://blog.pucp.edu.pe/marvil07 !DSPAM:1000,488fdef1230554881810528!