Slashdot Mirror


Git Adoption Soaring; Are There Good Migration Strategies?

Got To Get Me A Git writes "Distributed version control systems (DVCS) seem to be the next big thing for open source software development. Many projects have already adopted a DVCS and many others are in the process of migrating. There are a lot of major advantages to using a DVCS, but the task of migrating from one system to another appears to be a formidable challenge. The Perl Foundation's recent switch to Git took over a year to execute. The GNOME project is planning its own migration strategy right now after discovering that a significant majority of the project's developers favor Git. Perhaps some of the projects that are working on transitions from other mainstream version control systems can pool their resources and collaborate to make some standardized tools and migration best practices documentation. Does such a thing already exist? Are any folks out there in the Slashsphere working on migrating their own project or company to a DVCS? I'd appreciate some feedback from other readers about what works and what doesn't."

83 of 346 comments (clear)

  1. Git links by Anonymous Coward · · Score: 4, Informative
    1. Re:Git links by Bananenrepublik · · Score: 4, Interesting

      whygitisbettertanx.com claims that mercurial doesn't have cheap branching -- the only advantage he sees git having over hg if leaving aside github. I'm surprised by this statement because I use hg branches everyday. The things he describes can all be done straightforwardly with hg, so I'm asking: can anybody in the know tell me if and how git branches are in any way more powerful than hg branches?
      FTR I love hg, and I see no reason to switch to git, even though the whole bandwagon movement seems to have jumped on the git train.

    2. Re:Git links by Anonymous Coward · · Score: 4, Insightful

      If you love Hg, there are no strong reasons to switch to Git. None whatsoever. In the same coin, if you love Git, there are no strong reasons to bother switching to Hg, either. Both are *really good* at what they do, and they do it very well. Unlike, say, SVN, which really is for the i'm-too-dumb/lazy-to-use/learn-something-better crowd.

      And it is *trivial* to learn to use both git and Hg at the same time if you already know one of them, so you can work properly on projects that use either one without much fuss.

      That said, git is evolving a lot faster than Hg. Which could be a reason to either avoid git over Hg, or to avoid Hg over git, depending on your own view of such matters :-)

    3. Re:Git links by grumbel · · Score: 5, Informative

      Some things git is bad at:

      - no of partial cloning, so a big history means lots of stuff to download, this is especially bad when it comes to binary files
      - no way to download just a single file or directory, a user always has to clone the whole repository

    4. Re:Git links by Drinking+Bleach · · Score: 3, Informative

      For problem one: git clone --depth 1 (or however far back you want your history to go); note this severely cripples git's abilities and isn't very useful at all unless you're on dialup still.
      For problem two: this isn't a real problem with git, but rather with your organization. Multiple projects don't belong in the same repository, it's as simple as that.

    5. Re:Git links by grumbel · · Score: 4, Informative

      Problem two *is* a problem with git, it has nothing to do with how you organize a project, since you can never guess what a user might want. Simple example: I would like to look at the latest version of a file in the linux kernel, with git I have to download the whole beast when all I want is a single file, which is neither pretty nor fast.

    6. Re:Git links by bheading · · Score: 2, Insightful

      What you're supposed to do in Git is organize your source code into submodules. This takes very little effort, but you have to do it when you migrate.

      SVN does let you check out subdirectories, but that is a strength which is perversely afforded by one of its main limitations. SVN does not track the state of the repository globally. Of course, if you want to track the whole repository state, then you cannot allow people to modify subdirectories independently.

      I do typical corporate development, and I don't think centralized repositories are best. I love being able to create my own independent sub-project and ask other developers to contribute to it. What possible reason would there be to not have that functionality ? You do need development and delivery processes to govern where people do work and where it is delivered to, but you'll need those irrespective of which SCM you're using.

    7. Re:Git links by bheading · · Score: 2, Interesting

      That is a fair point - git isn't good for looking at isolated parts or individual files in a repository. But I see it really as a matter of optimizing for the common case. Normally, I need to see the whole repository. Normally I don't need to just look at one file. Git will checkout an entire repository along with all the history faster than SVN will, in the tests that I did.

      BTW if I just want to look at one file in Git I use the web interface. That gets around the problem by querying into the main repository.

    8. Re:Git links by Drinking+Bleach · · Score: 3, Informative

      I hadn't really thought of that, I had assumed you were referring to Subversion's rather common case where multiple projects are stored in the same repo, and you checkout different directories to access one of them.

      Anyhow, most, but not all, public git servers have a gitweb or similar attached, which will at least let you browse and download files from the tree if you need to. For example, grabbing the latest README of Linus' Linux tree can be had via http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=blob_plain;f=README;hb=HEAD

      Git itself doesn't provide any mechanism for it, however, but it's fairly unusual to be interested in a specific file rather than the entire project.

    9. Re:Git links by maxume · · Score: 2, Informative

      Unless you are intensely involved in a project, browsing for the single file using some alternative interface is probably going to be easier. I.e.:

      http://github.com/github/linux-2.6/tree/master/kernel/fork.c

      That doesn't work if the repository doesn't have an alternative interface though (but for projects you are involved in, the download only needs to be the difference between the internal and external repositories, not the entire history).

      --
      Nerd rage is the funniest rage.
    10. Re:Git links by Anonymous Coward · · Score: 5, Insightful

      Unlike, say, SVN, which really is for the i'm-too-dumb/lazy-to-use/learn-something-better crowd.

      I'm part of the "SVN is working just fine" crowd. If you want people to switch, being a condescending asshole is generally a great way to prevent that and make them more entrenched.

      Frankly, no one, including yourself, ever mentions a reason WHY I should switch. I think you should eat pickles for breakfast! Why? *silence* ... dumb ass.

      Until this article, I didn't even know it was a distributed system. I'm still not sure why I should care. I haven't cared enough to look into git because I'm busy, my time is important, and SVN works flawlessly for me. As far as I know, you're just the type of person that needs a high performance sports car to drive back and forth to work.

      So, the next time you're trying to convert people to your new religion by calling them imbeciles, you might want to consider throwing in at least ONE selling point before your vanishing attention span drags you off to a new shiny. K? Thx

    11. Re:Git links by Bromskloss · · Score: 3, Interesting

      For problem two: this isn't a real problem with git, but rather with your organization. Multiple projects don't belong in the same repository, it's as simple as that.

      I have been wanting to start with Git, but I find it too hard to know what should go into different repositories and what should be in the same.

      First example: I might be writing a book in book/ and keep all images in a subdirectory book/images/. I think it is not far-fetched that I might want to work on only the images without downloading all the other, possibly huge, subdirectories.

      Second example: Say I write a scientific article for which I compute a lot of numerical data. Then I write a second article, which builds upon the same data. Should the two articles go into the same repository, so that I can easily pull and compile everything at once with all dependencies in place, or should they be kept separately, so that I can work on the first article without dragging the other one along?

      --
      Swedish plasma phys. PhD student; MSc EE; knows maths, programming, electronics; finance interest; seeks opportunities
    12. Re:Git links by davebaum · · Score: 2, Informative
      Git and Hg branches are actually quite different. In Git, a branch is just a pointer into the DAG of changesets. If you are "on" a branch and commit, the pointer is moved to the new changeset. But you can manipulate that pointer arbitrarily and point it at any changeset. These pointers are local to a single repository, although I think you can map them so that branch X in repo A corresponds to branch Y in repo B, etc.

      In Mercurial, every changeset is marked as belonging to a single branch (the default is a branch named "default"). This marking happens at commit time and cannot be changed afterwards (short of creating a new commit). Typically a changeset inherits the branch name of it first parent, but you can always mark it differently before the commit. So instead of a branch being a pointer to a single changeset, it actually identifies some subset of the DAG, and when you refer to a branch you are asking Hg to figure out the tip of the DAG subset marked with that branchname. Note that since the branch name is recorded internal to the changeset, it remains the same for all clones of the repository.

      Personally, I think the git mechanism is more flexible, but the hg mechanism suffices just fine for basic use cases, and leads to fewer surprises among new users.

    13. Re:Git links by fahrbot-bot · · Score: 2, Interesting

      it's fairly unusual to be interested in a specific file rather than the entire project.

      Except if one is simply reviewing a specific file or files - for a code review, debugging, or copying pieces to another project. I do this all the time when helping others on their projects. I don't need (or want) the whole hot-mess...

      --
      It must have been something you assimilated. . . .
    14. Re:Git links by EsbenMoseHansen · · Score: 4, Informative

      In case you were looking for answers rather than abuse: I have used both. For me git does what svn does, plus the following in order of most important first.

      1. Locals checkins, that is, you can check in even if offline (on the train, net down, whatever) and you can commit without the rest of the developers getting it. The latter is nice if, say, you have to write an email first to tell the other developers first.
      2. If you want to checkout your code on some meaty machine to test, without pushing the commit to the central server just yet
      3. Have a full tree locally, which means that history dependent operations works offline and fast
      4. Local branches - the advantages is quite obvious

      Of course, this is for me, and all points might be irrelevant for you.

      --
      Religion is regarded by the common people as true, by the wise as false, and by rulers as useful.
    15. Re:Git links by doti · · Score: 2, Insightful

      The right way to do it, at the photo editing side, is to keep the original photo and define a file format for the edits. *Then* VCS would make sense for them.

      --
      factor 966971: 966971
    16. Re:Git links by Kent+Recal · · Score: 2, Insightful

      Sorry to burst your bubble but most software projects do involve artwork and it makes a lot of sense to version that, too - along with the source code.
      Do you think artists never make mistakes? Do you think nobody ever wants to go back to an older version of a button-image after a while because the new one wasn't received well?
      Well if so then let me welcome you to the real world.

    17. Re:Git links by ckaminski · · Score: 2, Insightful

      SVK. And you get compatibility with SourceForge repos, and tools like TortoiseSVN and subclipse.

    18. Re:Git links by petermgreen · · Score: 2, Insightful

      A source controls systems PRIMARY function is to keep track of how things changed over the history of a project.

      So if you have a project that contains binary files like photos as well as code it makes sense to choose a version control system that can handle both at a tollerable speed so they can be versioned together.

      P.S. I can think of ways to merge changes in images so if your vcs allows you to hook in custom merge tools you could probablly add image merge support (whether the results would be what you want is another matter of course).

      --
      note: i'm known as plugwash most places but i screwd up registering that here somehow in the past and now can't register
    19. Re:Git links by mgiuca · · Score: 2, Interesting

      I'm a Bazaar fan. That isn't to say I'm not a Git fan, I just prefer Bazaar (by a small margin, for a handful of reasons).

      That website makes a really good case, but I think they should remove "Bzr" from the "Cheap Local Branching" section. I could s/git/bazaar that entire section and it would still be almost correct.

      Bazaar has a totally different view of branches, but it gives you all the same flexibility as Git. The only thing is that Bzr branches are full copies of the entire repository - so they aren't "cheap" by default. To mitigate this, you simply create a "repository" one directory level above the branch, and then all the branches share data and are very cheap and fast.

    20. Re:Git links by prockcore · · Score: 2, Informative

      Frankly, no one, including yourself, ever mentions a reason WHY I should switch.

      I can give you the reason why I switched.. which may or may not help.

      With SVN, I found that branching was so involved that I wouldn't do it. Instead, I would check out code, work on it, and wouldn't check it back in until I had completed whatever I was doing... which may be days or weeks away.

      Checking code back in with SVN almost became a "release".

      With Hg, I pull down a copy of the code, make changes, commit those changes to my local repo, even if things are so broken they don't even compile. Then, when I'm done, I'll push all my commits back to the server.

    21. Re:Git links by MemoryDragon · · Score: 2, Interesting

      Well subclipse was started by a single person wanted to have a decent svn plugin it took the guy more than one year to get to a working level, so it takes time.

      Git would be the perfect companion for eclipse, it could replace the local history and the remote version control system but that would mean a proper integration of GIT might be 10 times as complicated because it has to replace both version control subsystems eclipse has.

      Also git has several unresolved issues, how are you going to do a server repo browser server side version browsing etc...

    22. Re:Git links by Schraegstrichpunkt · · Score: 2, Informative

      Some of our submodules are 20 times bigger than the Linux kernel and there is no way to subdivide them more than that.

      But do they accept more changes than the Linux kernel does? Linus Torvalds's 2.6.28 tree alone (which goes back to 2.6.12-rc2, dated April 16, 2005) has 120035 commits. That doesn't include any branches that others have worked on.

    23. Re:Git links by Geoffreyerffoeg · · Score: 2, Informative

      Ignore tha fanboys. If anything, use them as statistical evidence that there might be something worthwhile here. :-)

      Why git for a SVN user? There's nothing better than trying it for yourself (git-svn clone svn://whatever, then hack on it with git, then git-svn dcommit). But until then, two big points:

      1. It's distributed. I can make lots of commits without pushing them somewhere public, which is good for the same reasons that hitting "Save" often is good, without being worried that I've broken the build for everyone.

      Relatedly, I can put my stupid personal projects in git from the beginning, without bothering to set up a server. But if I find I do want to share it with anyone or add anyone else as a contributor, there's basically no difficulty in doing so.

      2. Git lets you rewrite your local history. If I didn't like a commit, I can edit it before sending it off. My workflow is often edit-commit-compile-test, rather than edit-compile-test-commit, which lets me remeber why I thought editing this file was a good idea. And if it's not, I can delete that commit from history, rather than having yet another one to revert it. And then when I'm done with this task, I can squash all my temporary commits down to two or three, one for each major part of what I did. As a side benefit, my commit messages only have to be useful enough for me, since I can edit them before pushing commits.

      (Obviously, once you publish a commit, it's a pain to retract that commit from everyone else's repos.)

      Another part of rewriting history is that rather than trying to do a merge when you've been hacking for a while, you can save your local commits in another branch, update to upstream, and cherry-pick the ones that make sense individually and edit the ones that need to be edited, creating a linear logical history rather than a merge between branches. This will make you saner a month later when you're trying to figure out why the code changed as it did, and you don't have to follow multiple branches and see how they were resolved.

  2. Meanwhile... by MichaelSmith · · Score: 4, Funny

    In my day job we are migrating to something totally new...clear case.

    (shit).

    1. Re:Meanwhile... by bheading · · Score: 5, Informative

      I'll pray for your soul. There's nothing worse than a group of managers who think that the world will get better when Clearcase is employed. I swear, that tool seems to be deliberately designed to slow you down.

      Git or BK command :

      git pull

      Clearcase command :

      cleartool findmerge -avobs -fversion MYLABEL -merge -gmerge

    2. Re:Meanwhile... by bheading · · Score: 2, Insightful

      You can actually make Clearcase work quite well, without resorting to a baseball bat. The trouble is that you have spend a lot of time and money doing it, substantially more than with any other VCS.

      A properly-configured and administrated Clearcase environment is very effective - but not good value for money, IMO. I don't believe there is any other revision control system that can do the build auditing stuff that CC does. Unfortunately, some of the ISO capability maturity model stuff seems to require this. I wonder if any IBM/Rational employees were on the standards boards ..

    3. Re:Meanwhile... by David+Gerard · · Score: 3, Funny

      I foolishly touched Clearcase at work in 2001 and left it on my CV until 2004. I still get calls from pimps desperate for a Clearcase admin to work in deepest suburban Berkshire for GBP30k. (I'm currently a sysadmin in London on GBP40k.) It's one of those cursed words on a resume - if it's ever on your resume, it'll taint it forever and those are the only calls you'll get.

      --
      http://rocknerd.co.uk
    4. Re:Meanwhile... by ThePhilips · · Score: 2, Interesting

      I feel you pain. I'm in the same boat. You can't work with CC effectively without 20-30 helper scripts. Hijacked/checked-out files is major pain. Dynamic views are great feature yet are completely useless.

      Though that still doesn't mean you can't use Git like local tool.

      I used before RCS (ci and co command) to preserve history of my modifications locally. Now due to various circumstances I moved to use Git locally and it works quite well.

      After "ct update" (alias ct=cleartool), you go to directory (and in my case to Linux server) where you plan to work and do "git init" and "got add" for the affected files. I'm type of person who like to commit dozen times a day and Git helps greatly to not to impose my deficiency on others.

      Though I'm using Git for about year now, I'm pretty much n00b. Outside of the obvious - git init/add/commit/diff/pull/push/update + gitk - I know very little. That's why it is also very hard for me to understand the usual complain about Git that it is very arcane. Yes, documentation is very poor and still can't catch up with all the features, yet you rarely run into the need for some esoteric function or syntax. Basic commands are pretty much "intuitive".

      --
      All hope abandon ye who enter here.
    5. Re:Meanwhile... by jgrahn · · Score: 2, Interesting

      You can't work with CC effectively without 20-30 helper scripts.

      Where do people get ideas like this? I use CC effectively with one trivial Perl script. It converts "my feature is on this branch off this label" descriptions into config specs -- raw config specs are too complicated to handle, so you need a layer above them which matches your CM process. Yes, IBM/Rational should explain that to their customers. Or maybe make UCM not suck.

      Hijacked/checked-out files is major pain.

      Then you're not branching, like you're supposed to do, and a hijacked file is the *least* of your problems. You cannot use CC as if it was CVS; a dynamic view is not a sandbox if you set it up to silently show other people's possibly incomplete changes.

      Dynamic views are great feature yet are completely useless.

      Use them correctly for a few years, then report back.

    6. Re:Meanwhile... by ThePhilips · · Score: 3, Interesting

      You can't work with CC effectively without 20-30 helper scripts.

      Where do people get ideas like this? I use CC effectively with one trivial Perl script. It converts "my feature is on this branch off this label" descriptions into config specs -- raw config specs are too complicated to handle, so you need a layer above them which matches your CM process. Yes, IBM/Rational should explain that to their customers. Or maybe make UCM not suck.

      What about normal diff? CC still doesn't allow to use external diff program. And "ct diff" insists on two files - it can't diff hijacked file against original.

      What about normal recursive diff for two branches?

      What about patch generator? So that you can back up you unchecked-in changes.

      What about change log? Recursive change log showing changes for all files in directory?

      How about converting change history into set of patches? To allow easier investigation of regressions.

      The moronism with R/O files? All extracted/"ct get -to" files are marked R/O.

      And this is from top of my head. For all of that I have scripts. And with the scripts, I'd say, CC isn't half bad.

      But to the point of original question, with Git I would not need any of the scripts.

      Hijacked/checked-out files is major pain.

      Then you're not branching, like you're supposed to do, and a hijacked file is the *least* of your problems. You cannot use CC as if it was CVS; a dynamic view is not a sandbox if you set it up to silently show other people's possibly incomplete changes.

      We do branching and hijacked files are not problem per se. It is just better half CC tools, when given as parameter hijacked file, would simply say "f-off, this is view private file."

      In some situations checked-out files are even worse since CC treats checked out files like files on a special branch. Consequently half of CC tools accept the file as parameter, yet show dick but no information about the file.

      Git doesn't draw any difference between the files and files in repo. At any time you can do whatever you like with any accessible file/revision.

      Dynamic views are great feature yet are completely useless.

      Use them correctly for a few years, then report back.

      Care to elaborate on "correct" usage pattern then?

      People tried them in company few years ago and pretty much abandoned them. They are still accessible, yet generally unused. Our CC admins would be happy to know the "correct" usage for them.

      You can't index dynamic view - because it contains all possible vobs and all possible files. And I do not want to deal with 150K files of the whole project, I need only 3.5K files belonging to my part.

      You can't compile in dynamic view - because even if only dozen of people compile simultaneously, CC server simply dies under load.

      Heck, simple "ls" spits on screen bunch of errors every time, because dynamic view can't properly show branch, but shows all files on all branches (readdir() lists all of them). And if file did happen to be not on the branch of the dynamic view, stat()ing it would give you an error.

      If you can't do development with them, what else can you do with the dynamic views?

      I used in past dynamic views solely for porting semi-automatically (with script) trivial fixes into many branches. For more than that dynamic views are useless.

      Please, reveal me the secret: how do I use dynamic view "correctly"? Many people in my company would be happy to know it too.

      --
      All hope abandon ye who enter here.
    7. Re:Meanwhile... by GooberToo · · Score: 2, Funny

      How to identify managers promoted beyond their capability?

      They recommend, or worse, force a migration to Clearcase; usually based on lies about the existing solution to their management.

    8. Re:Meanwhile... by ewhac · · Score: 2, Informative
      We had ClearCase at MOTO. Complete mess. Nobody -- not even the admins -- could explain how it worked or how to use it. It was also supported only on an ancient version of RedHat Enterprise Linux, since it required a binary filesystem blob to support its version-tracking filesystem. If you didn't have exactly the kernel version it was looking for, ClearCase was simply not available to you. (You'd think, given the sums of money involved in procuring and deploying ClearCase, that Rational/IBM would offer a custom build service, where you'd feed them your kernel config and they'd mail you back a filesystem blob compiled for your kernel. But no, that would have made sense...)

      Based on my imperfect reading, I can see two main appeals of ClearCase:

      1. Everything is version-tracked, including the tools and environment variables you used to build the project. Thus, you are supposed to be able to roll your entire development environment forward and backward through time, and exactly reconstruct any project at any point in time. If you're working on a government project with a 15-year service life, I can see this as being very useful.
      2. ClearCase appears to let you mechanize local management hierarchy and policy. If your manager -- and only your manager -- is authorized to commit code changes to the shipping base of code, ClearCase will let you describe that workflow and enforce it for you. For large organizations with a management fetish, this too is a "feature".

      Schwab

  3. Adopt a git... by TapeCutter · · Score: 4, Funny

    In the UK and to a lesser extent here in Australia a "git" is akin to a moron.

    --
    And did you exchange a walk on part in the war for a lead role in a cage? - Pink Floyd.
    1. Re:Adopt a git... by WarwickRyan · · Score: 5, Informative

      It's more than just an moron, it's an nasty, stubborn, selfsentered and selfish moron.

      "Our neighbour is an right old git" could be used to describe an elderly neigbour who, say, regularly blocked your driveway because your car got in the way of the sunlight on his garden.

      The old neighbour from Dennis, or Victor Meldrew from One Food In The Grave are both fine examples of gits.

      It's like a weaker version of the c-word.

    2. Re:Adopt a git... by Wild+Bill+TX · · Score: 5, Informative

      Quoth Linus Torvalds, "I'm an egotistical bastard, and I name all my projects after myself. First Linux, now git." :)

    3. Re:Adopt a git... by TapeCutter · · Score: 2, Informative

      GP here or "useless git" as my farther used to say. The word originaly comes from foundry workers in the north of England, a "git" is the bit of metal left on the cast where the hole in the mold was. The original metalic git was useless and in the way. - At least that's how BBC's Time Team tells it.

      I wonder if Linus knows?

      --
      And did you exchange a walk on part in the war for a lead role in a cage? - Pink Floyd.
    4. Re:Adopt a git... by Eunuchswear · · Score: 5, Funny

      Yes, but only a cunt would say "the c-word".

      --
      Watch this Heartland Institute video
    5. Re:Adopt a git... by MrHanky · · Score: 2, Funny

      In the language Dogg, the word 'git' means 'sir'. So one would politely ask a stranger: 'Cretinous pig-faced, git?', meaning 'Have you got the time please, sir?'

      Then there's this.

  4. If it looks like a tree, you'll probably be fine by James+Youngman · · Score: 5, Informative

    If the system you are migrating from manages trees, you should be fine. CVS migration is pretty easy and I understand that Perforce works quite well too (in both directions!). Most of the migration tools are listed in the GIT FAQ.

    The places where people are likely to have trouble is migrating from tools that don't understand that there's more than one file. For example, RCS and SCCS both support branches, but in a completely different way to git (branches are per-file, they're not for the whole repository). This means that during conversion, something useful has to happen with them, but the right answer isn't clear to a program. If versions 1.1, 1.1.1.1, 1.1.1.2 and 1.2 of file "foo" exist, then versions 1.1.1.2 and 1.2 are on different branches and either may be the older revision. It's not clear if revision 1.43.1.3 of file "bar" is the same "branch" as "foo" 1.1.1.2 or not. Because RCS and SCCS deal with single files only, it's not possible to find an answer to these questions in the history files at all - if there is an answer, it's just a convention of the user. Essentially what's happening here is that the git import process requires information which isn't represented in the files you're converting from. For what it's worth, migrating from SCCS or RCS to CVS has a similar problem.

    Personally, I've migrated from CVS to git for findutils (well, Jim Meyering did the actual migration; he migrated coreutils too). I haven't regretted migrating at all. It took me a long time of using git locally before I was comfortable migrating the master repo, though. As a git beginner the thing I found most worrying was that I found it hard to envisage the effect of the git command I was typing. The thing it took me a long time to figure out is that with a distributed version control system, it's safe to screw up your local copy, as long as you don't push the result.

  5. Re:Why is it soaring? by at_slashdot · · Score: 2, Insightful

    Free software tends to soar.

    --
    "It is our choices, Harry, that show what we truly are, far more than our abilities." -- Prof. Dumbledore
  6. strategy by carnicer · · Score: 4, Informative

    I have migrated to svn many repos from older stuff, like SCCS and VSS. Migration strategies are important, and to decide about them you need to answer a few questions. First of all, ask yourself if git or DVCS is the best option for you, your project and your company. Just don't be led by hype. It may be that a centralized VCS like svn may be a better option. There are tools to make them perform as DVCS, like the plugins git-svn and bzr-svn. Second, ask yourself how much of the project history is needed, if any is needed at all. That may save you lots of time, disk, chaos and entropy. When migrating, it is very important to tidy up the repo. Purge unnecessary files, binaries, archives, branches, etc. I have seen people who use VCSs like a trashcan. Bad practices may sink the repository performance. After migrating, make sure users know how to use the repo and that understand the basic VCS concepts, either generic or specific for the VCS of choice. Try to remove practices and concepts from the older VCS. As you mentioned it, best practices are very important, and they are not easily found on literature. There is more I could say, but I guess by now it's ok.

    1. Re:strategy by bheading · · Score: 3, Informative

      It may be that a centralized VCS like svn may be a better option.

      I cannot conceive of a scenario where this is true. In any case, you can use Git or any other distributed tool as a centralized VCS if you wish. Just tell all your developers to merge their code into the central location, and not to clone from each other's repositories. Dead easy. Although the idea that anyone would seek to make those restrictions makes no sense.

    2. Re:strategy by grumbel · · Score: 4, Insightful

      DVCS is in concept always better then centralized VCS, since it offers all the same features plus a lot more. However there are things that git handles pretty badly. Binary files are such a thing, you really wouldn't want to keep large binary files in git, since git forces you to download all the history of them, unlike SVN which allows you to only download the latest version. Another thing missing from git is a way to checkout just a single directory or file, when I am just interested in the latest version of a single kernel module its kind of annoying being forced to download the whole kernel source tree.

  7. Re:Why is it soaring? by Anonymous Coward · · Score: 2, Insightful

    Git is Free and does not cost thousands of dollars. Two pretty good reasons.

  8. Re:bzr vs. git? by kripkenstein · · Score: 4, Informative

    I always though bzr had the edge on git in terms of being a better DVCS. Is there a reason why the article seems to think that git is the default?

    No such thing as 'better' here.

    Bazaar was the runner-up DVCS, and rightfully so, but it has both advantages and disadvantages. Git is faster and currently more popular. Bazaar has an easier interface, better GUIs, is more easily extensible (Python), and runs better on non-Linux platforms.

    So which you prefer is a matter of what you are looking for.

  9. Re:Why is it soaring? by kyz · · Score: 4, Informative

    It's four good reasons.

    1. You can use git for any purpose. You have to pay serious coin before you can use Bitkeeper for any purpose.

    2. You have the freedom to see how git works, down to every last line of code. I can't comment on whether Bitkeeper also includes this level of freedom.

    3. You can make any damn changes you want to Git, without prior approval.

    4. You can pass on all these freedoms, and the freedom to use your change, to anybody you want. It was precisely the fact you can't do that with Bitkeeper that led to it being dropped by the Linux developers and replaced with a coded-from-scratch replacement.

    --
    Does my bum look big in this?
  10. I want to use git by alexibu · · Score: 4, Funny

    I have watched Linus talk about git on google tech talks, and am inspired to use it.
    Unfortunately I think I need a tool like TortoiseSVN for git because I am a git.

    1. Re:I want to use git by anarxia · · Score: 4, Informative

      Tortoisegit. Haven't used it so I can't tell you how stable or complete it is.

  11. Re:Why is it soaring? by anarxia · · Score: 3, Informative

    Another reason is that the bitkeeper license prohibits users to work on competing products.

  12. Re:Why is it soaring? by bheading · · Score: 5, Interesting

    I think it's more popular for one of the same reasons that Bitkeeper initially became popular - it's being used by Linus for the kernel. Getting Linus to use one of your tools is one of the best marketing coups you can land. Outside of this, Bitmover is a small company and it's hard to see how they would have gotten the kind of exposure that they did with the kernel. That said, they seem to be surviving just fine today.

    The other reason that it's popular is because it's free. This is fine for open source projects. In the commercial land, managers tend to underestimate the importance of good revision control tools and processes, and the importance of tools which make it easy to build and enforce those processes. Bitkeeper (and some of it's competitors) go to a lot of effort to provide both tools and processes. Git is not so good at this. Other tools that are not good at this include Clearcase (although UCM is an attempt, albeit a controversial one) and CVS.

    And I wouldn't say that Bitkeeper and Git are the same. The underlying design concept - distributed version control, changesets, and the benefits that flow out of this eg proper merge tracking and a greater degree of determinism - are the same. Bitkeeper has much better GUI tools, and it's a lot more user-friendly; the command interface is coherent and consistent, and the commands are simpler and easier to remember, options that do similar things are the same across different commands. For example, the "-r" flag always refers to a changeset number, in any command that accepts this parameter. I used BK on a project with between 20 and 45 users; it never once corrupted the repository and there wasn't a single time when the server went down. There were a few times when things were weird when new users unfamiliar with the tool broke their repos, but that stopped after a couple of weeks. The real benefit is that it makes it very easy to see who broke what, and how - whether it was during development or during a merge.

    Git isn't friendly or forgiving at all, and you need to really know what you are doing. There are operations that are very dangerous, like the rebase operation; BK does have an equivalent but it incorporates some basic measures to stop someone from messing up the repository they are pushing to.

    Additionally, Git will break things in unexpected ways. Try pushing a change into another Git repository, then navigate to that repository and run "git status" - git does not auto-checkout changes in the destination repository during a push. It's the user's responsibility to detect this and deal with it. I find that design approach - the idea that the user is expected to spot and deal with the internal behaviour of the tool - to be pretty bad.

    Linus says that anyone who thinks Git is hard to use is an idiot. Idiocy is not the problem here. The developers in the organization I work in do not want to have to know or care about how the internals of the tool work. They want to cut their code, merge it and integrate it as quickly and as effectively as possible. BK easily beats Git on this measure. On the other hand, Git is far and away the superior open-source revision control tool. Anyone who thinks that Subversion is better just doesn't get it.

  13. Re:If it looks like a tree, you'll probably be fin by IamTheRealMike · · Score: 4, Interesting

    Right, that was always the weakness of git, and although it's improved I still have problems with its usability (or lack of it). For all the dumping Linus does on Subversion/Perforce and its ilk, they are easy to understand and it's basically always clear what you're doing. I haven't used git for a while, but last time I did it was like a box of sharp knives. Although hard to mess up the remote copy, messing up your local copy was much easier.

  14. Git + Eclipse by david.given · · Score: 5, Interesting

    I'm trying to use git as much as possible --- I'm still pretty crappy at doing anything even slightly complicated with it, but even with minimal skills it's brilliant at keeping track of changes to local directories.

    The only problem is that I'd really, really like a decent Eclipse git plugin. I'm used to using Subclipse for SVN, which is fantastic: I can point at a file or directory, say 'Synchronise with repository', and then get a graphical diff of every change and the ability to quickly and easily revert or commit changes on a per-change, per-file, per-group-of-file basis, etc. (And you can do this with any revision, which makes backing out one specific change very easy.) Doing the same with git's command line tools seems terribly clunky by comparison, especially when I'm struggling to remember the syntax, and the fundamentally unfamiliar workflow.

    I do use the Eclipse git plugin at git.or.cz, but it's still very crude. The file decoration is invaluable, which lets me see at a glance which files are new/changed/pristine in the Eclipse project view, but actually trying to *do* anything with it is deeply unpleasant --- no synchronise view, no graphical diff, and some weird behaviour like if you point at a file, say 'commit this', you get a dialogue prompting you to commit *all* files. Which is not what I want. And there's lots of UI clunkiness all round, due to simple immaturity.

    I've had some luck with giggle, but the UI is pretty bad, and some changes (I forget what; new files, perhaps) don't show up in it, which is a bit awkward. I've had a play with some other GUI frontends but they're all pretty nasty by comparison with Subclipse. Still, the git plugin is getting better with time --- I'm just hoping that Synchronise shows up soon...

    1. Re:Git + Eclipse by Jraregris · · Score: 2, Informative

      When using git with Eclipse I've found it to be most useful to use the git plug-in, but use the command line for actual git action. The plug-in displays useful information about file changes and branches, while the command line offers quick, clean and expressive execution of git commands.

  15. It's not so hard to do by bheading · · Score: 2, Informative

    It's not surprising that developers increasingly favour distributed version control. It's a much more flexible way to work - and if you need to continue working in a centralized way, you can still do that.

    If you're migrating to Git, there are a few things you need to account for. Do you want to migrate the history, or make a clean break using the current head of the tree ? Migrating the history is usually hard if it is in a commercial tool, since commercial companies quite obviously do not design their tools to make it easier for you to abandon them (some provide export tools). If you choose not to migrate the history, you have the issue of having to keep the old revision control system around to debug/fix/review older releases.

    You need to be clear about your decision. Import some example code into Git (perhaps from your existing repository), put it on a server and ask your developers to play with it to make sure they're happy with the feel and that they're confident they can work with it. Make sure you practice doing things like merging conflicts and merging older maintenance branches. If you do this right, most of your developers should be fairly enthusiastic about the switch when it comes. Make sure you account for Windows users - Git isn't so hot over on Windows and I don't think there is an official stable Windows release yet.

    Other than this, there's really very little to it.

  16. My (short) experience with git so far by JensR · · Score: 5, Interesting

    I used to use cvs, subversion and perforce. After switching to git, it feels a lot more powerful, at the cost of more things that can go wrong.
    My workflow with subversion was:
    - regular update: update, check/fix conflicts, continue work
    - commit: update, pick files I want to commit with TortoiseSVN, verify the changes in the diff view, write log message, commit, continue work
    On GIT:
    - regular update: stash my changes, change to master branch, pull, check for errors or dirty files (mostly endian problems), switch to work branch, rebase from master, check for errors or dirty files, unstash my changes, check for errors or dirty files, continue work
    - commit: update, stage the files I want to commit, commit them, verify the changes, push
    At several stages some obscure thing could go wrong that I needed to look up in the manual or on the internet, or needed to ask someone who used it for longer. That doesn't mean I think GIT is bad, I just feel it takes more time to be fully productive with compared to older systems. And I miss a few minor things from svn, like keyword expansion or properties.

  17. Until Git Tools are mature, SVN will do just fine by Qbertino · · Score: 4, Insightful

    I've just gotten fluent with SVN versioning after using it for a few years now. I understand that part of what bothers me about it is what bothers Linus Torwalds aswell and had him write Git and I can follow his reasoning in his famous Google speech on Git *and* I understand the hype that ensues around Git and welcome it. That said, until Git has a neat set of stable mature GUI tools to use with it, I'm sticking with Subversion, TortoiseSVN and/or Subclipse. A mature working toolkit that I know how to handle and that works more or less flawlessly.
    Even a toolset like that would've costed thousands ten years ago. That goes to show how far we have come in some areas of the software field.

    --
    We suffer more in our imagination than in reality. - Seneca
  18. Re:Why is it soaring? by gmack · · Score: 4, Informative

    It's worse than that. The bitkeeper author at one point tried to extend that as a ban on anyone who works for a company that has a competing product with bitkeeper.

  19. Re:Why is it soaring? by cdfh · · Score: 4, Insightful

    Try pushing a change into another Git repository, then navigate to that repository and run "git status" - git does not auto-checkout changes in the destination repository during a push. It's the user's responsibility to detect this and deal with it. I find that design approach - the idea that the user is expected to spot and deal with the internal behaviour of the tool - to be pretty bad.

    At first, I found this pretty unintuitive, however, I now feel that automatically checking out the changes would be a Bad Thing(tm).

    Most of the time, repositories you push to will be bare repositories, with no working tree. If there is a working tree present, then presumably someone is actively working on it. Imagine you are implementing some new feature in your local copy, which is all very experimental, and perhaps not even compiling yet. Now imagine someone pushes a major refactorisation directly onto your working tree, which does not merge cleanly. I would find this exceedingly annoying. [You have not yet committed any changes, and so the push does merge cleanly with the HEAD, but just not the working tree]

    In addition, I think it would be quite distracting if bits of code changed behind my back, when I wasn't expecting it. Especially if I happened to be editing the file in question when it got updated.

  20. Re:Why is it soaring? by David+Gerard · · Score: 3, Informative

    Even Microsoft don't use Visual Source Sink for their own code. (They use Perforce by preference.)

    --
    http://rocknerd.co.uk
  21. Mercurial vs. Git by rpp3po · · Score: 5, Interesting

    I'm working on the OpenJDK source tree through Mercurial. I couldn't be more satisfied. The tools are well structured, very easy to use, stable, fast and well documented. I don't miss any feature. Could anybody, who tried both and prefers Git, list some advantages of it over Mercurial? To me it just seems like a Git done right without the hype and too complex UI.

    1. Re:Mercurial vs. Git by dozer · · Score: 2, Interesting

      Last I used Mercurial, I couldn't create a feature branch. I had to clone the whole damn repo. Well, either that or I could create a branch that lives forever, not a good idea if I'm doing a crazy experiment.

      In Git, if I want to try something out, I create a feature branch (takes basically no time or disk space) and hack away. If it sucks, I just delete the branch. It's a very nice way to work once you get used to it.

      Have they improved branching in hg?

    2. Re:Mercurial vs. Git by Anonymous Coward · · Score: 2, Interesting

      I've been an enthusiastic Mercurial user for about two years. About a month ago, my mounting frustration had reached the point where I made the decision to switch to git, and now I doubt I'll ever be tempted to switch back.

      For example, "git rebase" lets you do basically the same thing as MQ, but they're architected differently. In git, you transmute one, normal whole-tree commit into another; in MQ, you transmute one diff into another. My point is that git's approach also records the old parent, onto which the patch series cleanly applies! I can't tell you how many times I "hg qpop -a; hg pull; hg qpush -a" and in so doing destroyed that information. Not really what "hg bisect" was invented for. And, since each patch isn't actually a patch, you can check it out and get a normal tree with which you could use an external 3-way merge tool (not that you'd normally need to, since git's merge machinery seems to be used for rebase too). Or even just edit it without having to know how to fixup hunk offsets by hand.

      I think a lot of it boils down to Mercurial's repository format: Hg's append-only repository format is to a tree as git's is to the flying spaghetti monster. Its a beautiful piece of engineering, but it's simply not powerful enough to represent the workflows real development projects want to use. Just look at the provided Hg extensions: most of them do what they do by slicing and dicing the append-only history. There's nothing inherently wrong with that, but it's not reversible. If you screw it up, you have to clone again. With git, you have other options.

      As a brand-new git user coming straight from Mercurial, I have to say the whole "complex UI" mantra is out of date. I remember looking at an old version of git before deciding on Hg -- *that* was a too-complex UI. Now, the command paradigm is just *different* (its not a superset of CVS, like Subversion or Mercurial tried, mostly, to be). No big deal.

    3. Re:Mercurial vs. Git by PSargent · · Score: 2, Informative

      Have they improved branching in hg?

      Bookmarks are what your after and they came in a couple of versions ago.

  22. Git providing access to the latest files by CarpetShark · · Score: 3, Insightful

    You're quite right. It seems to me that Git isn't intended to provide access to the latest versions of individual files. Git, like all DVCS's I know of, is essentially a version-control plugin for your filesystem. The filesystem itself provides the current version you're working with, and so it's only a matter of providing an http server over the directory or something like that. Which is exactly what GitWeb and Trac-Git provide, only they're better.

  23. Re:Bazaar by Anonymous Coward · · Score: 3, Informative

    huh ? mercurial has no issue with revisions numbers, revisions are indexed with a hash just like git . The sequencial numbering is available as a convenient alternative for referring to a rev, that's all.

  24. Re:Bazaar by oojah · · Score: 2, Informative

    hg has both a revision number and a changeset id. The revision number is human readable and useful within a particular repo. The changeset id is unique across repos, the same as git does.

    --
    Do you have any better hostages?
  25. Re:Bazaar by janwedekind · · Score: 2, Insightful

    The main difference between Bazaar and Git is that Bazaar only tracks files while Git tracks changes. Git therefore is technically able to merge changes where one developer has moved code from one file to another while another developer made modifications to that code. On the other hand Git can have difficulties keeping track of things if you rename and change a file in one commit.
    I switched from CVS to GNU-arch (tla). When GNU-arch was discontinued I switched to Bazaar. The command-line interface of Bazaar is easy to use. For example the symmetry of "bzr push" and "bzr pull" is really nice.

  26. Git Adoption Soaring? by cjjjer · · Score: 3, Interesting

    Funny the OP only mentioned two projects and one is only planning. Sometimes /. can be a bigger hype machine than money grabbing corps. that we all love to bash.

  27. Lack of Windows support is still a big issue by Anonymous Coward · · Score: 3, Insightful

    Many of us develop on Windows, pushing out code to Linux platforms. Git just isn't an option. Poor support for IDEs, especially Eclipse.

    Bazaar has been working great for me. Used Mercurial with success as well.

  28. Re:Darcs by BlueCodeWarrior · · Score: 2, Informative

    Check out GitForDarcsUsers. Also, you may be interested in why ghc switched to git.

  29. Re:bzr vs. git? by kripkenstein · · Score: 2, Informative

    The video is from almost two years ago. Back then, Git and Mercurial really were the main options.

  30. I tried "git cvsimport" and "cvs2git" by e40 · · Score: 2, Interesting

    Neither worked on my 18 yr old CVS repo (that was populated with 7 yr old RCS files). What I did find was fromcvs. I found a couple of bugs, with the author fixed very quickly. It is also fast. My 3.5G CVS repo was converted in about an hour. Both of the others took 10+ hours (and didn't produce usable output). The biggest reason I love it: it allows incremental updates from CVS to GIT. You can run it any number of times and it imports the new stuff. You do need to leave the git repo you are importing into alone (no commits other than the import commits).

    I still have more testing to do before we go live, but it's looking very, very nice.

  31. TortoiseGit: the best shot at a Windows GUI by Qubit · · Score: 2, Informative

    At work we're trying to get all our our repos moved to Git. We moved off of CVS to SVN a year or so (which was a huge improvement), but now that all of the non-programmers in the office are used to using TortoiseSVN, lack of a good windows GUI for Git has been a bit of a roadblock.

    The msysgit folks started work on Tortoise-inspired GitCheetah GUI, but that project basically fizzled out. Lots of people wanted a Windows GUI, but no one had both the resources and drive to step up and do it.

    Then, exactly two months ago, Frank Li started working on TortoiseGit. From what I can tell, this is a fork of TortoiseSVN with most of the Subversion guts pulled out and replaced with git commands. TortoiseGit is not done yet: 'git add' has some issues, Submodules don't seem to work at all, etc..., but development on the tool is in high gear and the primary developer is going the extra mile to help users.

    If you're looking to deploy tools right now, gitk is a bit more powerful than the log in TortoiseGit, but might be more confusing for naive users.

    --

    coding is life /* the rest is */
  32. How does it work with non-static IPs? by pauljlucas · · Score: 3, Interesting

    The thing I don't understand about any distributed VCS is how (for example) others could pull stuff from my repository if I don't have a static IP. Also note that I don't mean "don't have a static IP" only in the usual sense of "having a dynamic IP at home": I also mean in the sense that my development machine is my laptop and I often work at coffee shops and other places and so I'm often behind NATs.

    --
    If you reply, do so only to what I explicitly wrote. If I didn't write it, don't assume or infer it.
    1. Re:How does it work with non-static IPs? by arrenlex · · Score: 2, Informative

      There's no way to pull from a repo that's behind a NAT unless you have sufficient control over the NAT to forward a particular port to a specific machine behind it. This is the same as svn -- how can you access an svn server that's behind a NAT? Only by having its relevant port forwarded.

      However, if you are in a coffee shop and you want Sue to have your devel history, you can push to Sue instead of having Sue pull from you. Sue will then merge your pushed changes into her working copy when she feels like it.

      Equivalently, you can set up another git repository on your home server which has a static IP. Then, you pull from and push to your home server, which you can access from anywhere with your laptop, and other people also pull from your home server. I used this approach when I was developing from home and didn't have time to make sure permissions on everything were okay and granting other developers ssh accounts on my machine, and didn't have time to set up an http server for the repo.

    2. Re:How does it work with non-static IPs? by NTmatter · · Score: 2, Informative

      There aren't any strict rules saying that people have to pull straight from your laptop.

      In terms of non-distributed VCSes, would you ever host a your repository on a machine that other people couldn't access? It would always be somewhere publicly accessible.

      For this kind of situation, you'd probably have a public development repo that's separate from your official repository. This would give you a set of repositories that looks like:

      official - The authoritative repository, controlled by some kind of integration manager

      jim-dev-public - Code that Jim is ready to unleash upon the world, but not upon the official repository
      jim-dev-private - Code that Jim is currently working on from his blimp with irregular Internet access

      fred-dev-public, alice-dev-public, bob-dev-public - These are the only ones that you need to pull from. Fred, Alice, and Bob can have as many private repositories as they'd like, and will share their work when it's ready.

    3. Re:How does it work with non-static IPs? by MostAwesomeDude · · Score: 2, Informative

      Take a page out of Freedesktop.org's process. Any user can create and maintain user repositories in their own space. For example, http://cgit.freedesktop.org/~csimpson/mesa is my personal Mesa repo. Then, anybody that wants can pull from there. Very rarely do FD.O people pull and push directly to each other, and I doubt that it happens that way in larger organizations, either.

      --
      ~ C.
  33. @#$@#$ git! by Anonymous Coward · · Score: 5, Informative

    I curse more when I use git than when I use Windoz (and those are the only times I curse). Git's design is really that bad (from a user perspective).

    Git is fully distributed (with no "authoritative" source), but it doesn't give you any tools understand/manage the distribution of files. If you have a work group with more than a few people, you are constantly asking what repo (and what access method to it), what branch, and what (bombastically long) revision. It's fine for 1-2 people, but then any version control system is fine for a small enough group.

    The documentation helps little. When you do "git help merge", you don't @#$@# care that this is the front end to multiple merge methods. You just want the stupid thing to work. If it's a special case, then you'll look for an advanced technique; but you are stuck reading through all this crap trying to figure out what really matters. No offense to the people working on git docs. It used to be awful, now it just sucks. The problem is more in the user interface design than the docs.

    There are over 100 git commands, and a command can do radically different things depending the the switches and target syntax. It's more confusing than any other revision control system that I have worked with.

    I use git because I have to, not because I want to (like Windoz). After using it for months, I still routinely get stuck trying to figure out the right mix of commands, arguments, and target syntax needed to get common things done.

    Git can do some (nice) things that subversion can't, but it creates so many problems that you haven't gained anything.

    I've heard good things about mecurial and bazaar. I wouldn't recommend git to anyone I liked (but it's perfect for perl :-).

  34. Monotone by hendrikboom · · Score: 2, Insightful

    I'm using monotone. What I like about it is its utter paranoia about data loss. Even data loss because of lost bits on a hard disk. You just can't symc a broken repository with a working one; bit failures will not spread. That said, it's designed for use in development against a test suite -- there's a procedure whereby automated tests can be used to "certify" particular revisions, so that an actual user of the software under development can just automatically download the last certified revision and use that.

  35. complexity by XO · · Score: 2, Informative

    The complexity of git robs it of quite a bit of the value of it's features. For God only knows what reason, a 5-6 person project that i'm working on is using git instead of subversion, and only the person who setup the project actually has any idea how to use git. The rest of us are just cruising along, not really having any idea of what we are doing with it, and are stopped completely whenever it does anything weird.

    It's awesome to have the whole thing where it merges all the changes in a same file together, fairly intelligently, but even the GUI version for Windows has no functional interface for how to deal with conflicts (which should be easily done as a "which bit of code is the proper piece to use here?" instead of jamming diffs into a file. Also, the Windows and Linux versions of GIT have several problems interoperating with each other.

    In short, Git appears to have been designed entirely with features in mind, and not one bit of usability for anyone other than Linus himself. It is a nightmare for people who only have the need for version control and a handful of people working together. It reminds me very, very much of early Linux, before anyone else besides Linus had been hacking on it.

    --
    "Champagne for my real friends - and real pain for my sham friends!" http://ericblade.postalboard.com/
    1. Re:complexity by Qubit · · Score: 2, Interesting

      Lots to talk about here!

      The complexity of git robs it of quite a bit of the value of it's features. For God only knows what reason, a 5-6 person project that i'm working on is using git instead of subversion, and only the person who setup the project actually has any idea how to use git.

      It sounds like the first person set up the project, and now expects everyone else to just "make it work", even if they're not programmers and have a good understanding of Git. Fair 'nuff.

      Now I don't know your situation, but if you're actually in a work situation, the lead programmer (or user, if you're not storing code in this repository) should be giving you guys some kind of help or crash course in using Git. The Git model is quite a bit different than SVN, and it has taken me some time to wrap my head around it -- kind of like learning a functional programming language after working with imperative languages for several years.

      It's awesome to have the whole thing where it merges all the changes in a same file together, fairly intelligently, but even the GUI version for Windows has no functional interface for how to deal with conflicts (which should be easily done as a "which bit of code is the proper piece to use here?" instead of jamming diffs into a file.

      Which Windows GUI tool(s) are you using? Right now I can think of several -- gitk, git-gui, qgit, git extensions, CheetahGit, TortoiseGit, ...

      I think that part of the problem right now is that there is no definitive Git GUI for Windows. Even if the TortoiseGit project gets more mature, users of TortoiseSVN or TortoiseCVS will have to learn a new version-control paradigm and understand some new terms before they'll be able to successfully use TortoiseGit.

      Also, the Windows and Linux versions of GIT have several problems interoperating with each other.

      Are you referring to line-ending problems? If so, take a look at the "core.autocrlf" attribute. If you're not talking about line endings, and you can't find any help online, I'd just go ahead and file a bug report or hop on the git mailing list.

      In short, Git appears to have been designed entirely with features in mind, and not one bit of usability for anyone other than Linus himself.

      Oh, I think most people would agree with that -- especially Linus. Of course, I think that this is partially a Plumbing vs. Porcelain issue: a number of geeks love to use a command-line shell, but most ordinary users feel much more comfortable with a GUI windowing environment. Many programmers really like the power they get from using Git on the command line, but some people want something a bit more user-friendly like Easy Git or a Git GUI.

      It is a nightmare for people who only have the need for version control and a handful of people working together. It reminds me very, very much of early Linux, before anyone else besides Linus had been hacking on it.

      Yes -- I can see that. The Git workflow is pretty different from that of a tool like SVN. Unless the team leader is willing to sit down with the group and work through examples -- and then also be ready to answer questions anytime during the workday for the first few weeks -- then it's going to be a really rough, potentially unproductive month. Even if they grumble about it, it's probably worth their time to train everyone up front.

      You've probably seen this before, but for anyone who's moving from SVN to Git, there's a really good Intro to Git for SVN users.

      Good luck!

      --

      coding is life /* the rest is */
  36. Re:My usage of Subversion by grumbel · · Score: 2, Informative

    The main advantage of git over subversion for such uses is that git doesn't require a seperate repository, the repository sits right there in the .git/ directory in your projects directory. Doesn't sound like much, but its great convenience factor, since all you have to do to start using git is type 'git init' and you are done, you don't need to create a repository, you don't need to important your existing files and most importantly you can leave your working directory as is. With SVN this same process can get quite annoying, since you basically have to delete your working direcotry and replace it with a SVN checkout and then verify that all your files actually made it into the repository. With git its a single command and you don't have to think about anything, so its much easier and you can just version control any directory you like.