Slashdot Mirror


10 Years of Git: An Interview With Linus Torvalds

LibbyMC writes Git will celebrate its 10-year anniversary tomorrow. To celebrate this milestone, Linus shares the behind-the-scenes story of Git and tells us what he thinks of the project and its impact on software development. From the article: "Ten years ago this week, the Linux kernel community faced a daunting challenge: They could no longer use their revision control system BitKeeper and no other Software Configuration Management (SCMs) met their needs for a distributed system. Linus Torvalds, the creator of Linux, took the challenge into his own hands and disappeared over the weekend to emerge the following week with Git. Today Git is used for thousands of projects and has ushered in a new level of social coding among programmers."

203 comments

  1. Does this enable by Anonymous Coward · · Score: 0

    A lot of homosex amongst the unwashed, pasty greasy neckbeards?

    1. Re:Does this enable by Anonymous Coward · · Score: 0

      You're thinking of Clang.

  2. Re:The real story by hyperar · · Score: 1

    Man, you've been around for weeks now, nothing better to do?

  3. And yet, no one understands Git. by Anonymous Coward · · Score: 3, Informative

    I hear from so many people who love git, and also from so many people who see it as needlessly complicated to the point of getting in the way of getting things done. If that latter view didn't have any truth to it, this page wouldn't exist:

    http://git-man-page-generator.lokaltog.net/

    So, which is it? A useful tool, or simply a way for the the brightest technology people to feel smarter than everyone?

    1. Re:And yet, no one understands Git. by jones_supa · · Score: 5, Informative

      It isn't complicated. Check out Git - The Simple Guide.

    2. Re:And yet, no one understands Git. by Zecheus · · Score: 0

      If you have to ask, you don't need to know.

    3. Re:And yet, no one understands Git. by hyperar · · Score: 1

      I don't know what others think, i just find it too different. Others are really intuitive, git, not at all. As always, just my opinion.

    4. Re:And yet, no one understands Git. by kthreadd · · Score: 3, Interesting

      Very few people actually know their version control software. Most people know the basic commands, and that's the case for pretty much all of them. Git is not much different in that regard.

    5. Re:And yet, no one understands Git. by jasno · · Score: 1

      yeah... i love the concept of git.. just not the confusing implementation. I'm never sure if I should use a top-level command or a confusing set of switches to do something basic. I hear mercurial is better in this regard, but I've never used it on a project so I can't say.

      --

      http://www.masturbateforpeace.com/
    6. Re:And yet, no one understands Git. by angel'o'sphere · · Score: 3, Insightful

      Use a GUI frontend like SourceTree from Atlassian, there is not much different in Git versus other systems.
      The difference only shows when you actually look into the file layout of a git repository ... and who is doing stuff like this (besides me) anyway?

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
    7. Re:And yet, no one understands Git. by jandar · · Score: 1

      You have to understand the data-structure, how files, directories and commits are all content-addressable objects. The linkage of the commits by means of their id's must be understood.

      To understand merging you should have used diff and patch a few times.

      This is all.

      With these few concepts anybody, who can write a program, should be able to understand git. To invent new use-cases or work-flows is another thing, but comprehending a given usage of git should be straight forward.

    8. Re:And yet, no one understands Git. by gbjbaanb · · Score: 3, Funny

      Its true, git is complex like Linux is - it suits the needs to Torvalds, but I think its popularity exceeds its ability, and many people use it without using it properly - for example a previous company I worked for used git for their SCM and I asked where the backups were I was told they didn't need backups because it was distributed and everyone had a copy of the repo... of course, that relies on everyone having a copy of each repo, or at least 1 other person having an up-to-date copy of each repo which wasn't the case. This kind of thinking wouldn't happen if there was more of a concept of distributed-but-from-a-central-repo. It needs the concept of a golden root from where everything else is sourced (and I know you can have this, but its more convention due to the distributed nature)

      Still, it ushered in a new style of version control that wasn't catered for before.

      Now we're seeing easier, more accessible systems, such as fossil by that attempts to bridge the gap between DVCS freedoms and centralised repositories and includes other useful features such as bugtracker in the SCM and still geared towards branches that are more collaborative than gits 'private playground' branches. (ie git is designed for people to work on their own and hopefully merge changes back, many other SCMs are designed for branches that are for common code worked on by several people and thus requiring less merging). Git works well because of how the Linux project is structured - a very large hierarchy, but starts to fall down in a small team where people don't have that arms-length working environment, or where they work on multiple branches at the same time (eg at work, I have my big feature and I have bug fixes that come and go regularly - git doesn't help in that environment unless I have multiple repos checked out)

    9. Re:And yet, no one understands Git. by Anonymous Coward · · Score: 0, Insightful

      OK. Step 1 - download git. Right, done. Step 2 - create a repository What's a repository and why would I want one? Step 3 - clone a repository How does that help me backing up my stuff? Step 4 - workflow Cool! Its a plate-of-noodles! Step 5 - add and commit. Ah, what step 3 should have been. Why 2 steps, why not 1 "doit" step? And a message - how do I disable that? I don't want to have to type a message for every pissant change. Step 6 - push changes. Again, why not 1 "doit" step? Step 7 - branching. At last, something useful. Simplify the syntax, though. Step 8 - merging. Why the git add step? Step 9 - tagging. Fairy Nuff. Step 10 - logs Ditto. Step 11 - oopsies Ok. That's what I'll need most. Step 12 - GUI etc. Nope, cmdline only, thanks. OK, some basic concepts that just seem overly complicated and un-needed, what circumstances are these needed for that they can't be bypassed?

    10. Re:And yet, no one understands Git. by Anonymous Coward · · Score: 0

      It's a useful tool that's very flexible. Sadly, flexibility = steep learning curve. It also doesn't work like at all like SVN or CVS. So there's that too.

      git + github is an amazing toolset that has made managing code within our project much much simpler than it otherwise would be with SVN. We've had some rough patches, but that was due to people not taking the time to learn what git is and with not cleaning VS project folders before adding all the files to git.

    11. Re:And yet, no one understands Git. by hyperar · · Score: 1

      What's the best Windows GUI for Git?

    12. Re:And yet, no one understands Git. by Anrego · · Score: 3, Interesting

      As someone mostly in the "I dun get it" crowd, I'll say the problem for me is that I feel like while I can use it, I don't have a great deal of understanding as to what it's actually doing outside of the basics. I feel like I'm following a bunch of recipes that I know work.

      With svn (which admittedly I've used for many years and on sizable projects vs git which I've used for months and on small stuff), I feel like I have a really good grasp of the whole thing. Sure there are some subtle bits I don't know because I've never needed, but I know the important bits, and I feel like from that I can solve just about any problem I run into by understanding what svn is trying to do and why it's not working.

      I get that at least some of this is just inexperience, but I think even with experience, git seems far more complex and nuanced than svn, which has a relatively consistent way of working and a seems to have a much smaller set of features. I feel like I got comfortable with svn way faster, and at that point I was only mildly familiar with version control in general.

      I know I'm gonna get flamed for this, but just wanted to provide some insight into the mind of someone who hasn't jumped on the git bandwagon yet.

    13. Re:And yet, no one understands Git. by Anonymous Coward · · Score: 0

      SourceTree from Atlassian

      You mean the one that Atlassian can't even get to install? We spend nearly six figures per year with Atlassian and have been a customer of theirs for over a decade. We first starting using JIRA in 2004. Despite that, they haven't been able to provide a single damn version that will install on Windows. I understand Windows is such complete garbage that Microsoft can't even get their own installers to work and thus have to license from a third party just to get their own software installed on their own OS, but Atlassian should be able to provide an xcopy install version. Instead, they use Advanced Installer Enhanced which I have never seen work. Atlassian's SourceTree garbage has failed with the error message:


      [SEH_AV_DEP_BADPTR] ACCESS_VIOLATION (0xc0000005) at address [0x0fffff7a]

      Advanced Installer Enhanced UI 11.8 build 62156
      *** Stack Trace (x86) ***

      [0x0fffff7a] -----
      [0x5fcde5ab] MsiLoadStringW()
      [0x5fcde547] MsiLoadStringW()
      [0x5fd3a9ae] MsiInvalidateFeatureC ...

      on every single Windows machine I've tried it on. It's is complete crap. Their support will agree because they're tired of wasting time trying to explain to customers that they shouldn't use it.

    14. Re:And yet, no one understands Git. by Anonymous Coward · · Score: 0

      The point I'm going to take away is that unless there's a compelling reason to change technology why do so ? Choosing the right tech isn't, and shouldn't be, a popularity contest. those who jump on a bandwagon simply because it passes by are doing so for all the wrong reasons. I'm sure all the smartest people in the room will start throwing stones now ...

    15. Re:And yet, no one understands Git. by Anrego · · Score: 1

      I made a post about this above, but yeah, that describes my current relationship with git, and is one of the reasons I don't enjoy using it.

      I feel like I truly know svn, I understand what it does and am very comfortable with how it works. Part of that is just having used it for a long time, but I do feel like git is much harder to wrap your head around.

      With git I feel like I'm just following a bunch of recipes that I know work (or seem to work), and that's really not a good way to go about anything. Every time I try and get my head around the guts of git, I feel like it's been made intentionally screwy, and most git users I've talked to seem to just operate on the same recipe set I do. I just feels icky.

    16. Re:And yet, no one understands Git. by Anonymous Coward · · Score: 1

      That is a great guide, but like all git guides it shows how complex, unwieldy, and unintuitive git can be. Nobody can call Git simple when there are a dozen pages to scroll through on the cheatsheet.
      I get Git, I use git, and understand why it is popular, but man, what was Linus smoking when he came up with some of the terminology?

    17. Re:And yet, no one understands Git. by bobbied · · Score: 3, Interesting

      I hear from so many people who love git, and also from so many people who see it as needlessly complicated to the point of getting in the way of getting things done. If that latter view didn't have any truth to it, this page wouldn't exist:

      http://git-man-page-generator.lokaltog.net/

      So, which is it? A useful tool, or simply a way for the the brightest technology people to feel smarter than everyone?

      Personally, I'm in both camps. I both hate and love Git. I hate that I have to explain and provide "scripts" to developers that explain how the project uses Git and I love that I can manage my project in multiple ways, depending on my needs.

      Git's problems stem from it's Unix like command line basic user interface. It's not a surprise that they decided to go with this kind of interface, they where basically Linux developers after all. In the tradition of good CLI's, Git is full featured, meaning it does a LOT of things, or really it supports doing things in a lot of different ways. I love the flexibility. But, unless you understand what Git is doing for you under the covers you may not know which of the confusing commands in Git you need to use. If you don't understand how your project is using Git, it may be difficult for the newbie come up with the necessary commands to get things done.

      Personally, I end up writing scripts for my developers. I force them into following a set procedure to "check out" the source, do their local development and get their changes though the review cycles and into the main repository again. Developers don't like scripts like this and because it's a script that describes how they use git, they think they don't like git. What they really hate is being told exactly what to do...

      I love git because it allows me to control my project's source. It keeps local backups and my history on MY machine, but doesn't expose others to my mindless rambling commits unless I decide to push them. I love the flexibility to manage my source how I want too locally....

      So, IMHO, git is great and a curse at the same time. Much like AWK and SED where a huge boost to the Unix CLI (if you understand them) git is wonderfully complex and thus frustrating to learn. Git doesn't force you into a configuration management model, but lets you roll your own process. Being flexible is great but git doesn't stop you from shooting yourself in the foot so be careful and know how you want to manage your repo, figure out how to make git do that, document how it's done, and test your process.

      Remember, it's the PROCESS you need to have straight in your head. Just googling Git is going to cause you trouble because how THEY use git is unlikely to match how YOU want to use it. You got to know your tools and git is no exception but you REALLY need to know what you are trying to do with git.

      --
      "File to fit, pound to insert, paint to match" - Aircraft Maintenance 101
    18. Re:And yet, no one understands Git. by Anonymous Coward · · Score: 0

      Mercurial is much better in this regard. Same concepts as Git, but a much cleaner (command line and GUI) interface.

      I highly recommend you take a look.

    19. Re:And yet, no one understands Git. by Anonymous Coward · · Score: 1

      Something like 95 % of everyone I know that uses svn knows how to add, update and commit. They might know about diff and log. They rarely know what a branch is. And don't even talk about merge conflicts.

    20. Re:And yet, no one understands Git. by Anonymous Coward · · Score: 0

      Their installer is such crap. I got it to work under Vista, but the dozen or so Windows 7 systems I tried the install on, it wouldn't install. We just spent $28k on Atlassian's proprietary version of Git (Stash, for a 500+ user license), so you'd think they would at least try to help

    21. Re:And yet, no one understands Git. by Anonymous Coward · · Score: 0

      Here is a link: http://mercurial.selenic.com/

    22. Re:And yet, no one understands Git. by Marginal+Coward · · Score: 1

      For those who are used to any of the older-style centralized revision control systems, it's a huge gear shift to begin using Git. And yes, it seems needlessly complicated, and seems to get in the way of getting things done. However, once you get over the hump and begin to "git" it [tee-hee], it seems very well designed and is very efficient to use.

      To git over the hump, you really need to study it somewhere such as Pro Git. After that, you need some practice, as well some help from a buddy or two. Soon, it will click. After that, it takes some time and effort to truly master it - I've been using it for a couple of years and I don't think I'm quite there yet. But the more I understand it, the more I see the value of it. It's really a Good Thing.

    23. Re:And yet, no one understands Git. by Guy+Harris · · Score: 5, Funny

      You have to understand the data-structure, how files, directories and commits are all content-addressable objects. The linkage of the commits by means of their id's must be understood.

      Git: the best file system anybody ever confused with a version control system. :-)

    24. Re:And yet, no one understands Git. by rwven · · Score: 1

      GIT, imho, is no more complicated or confusing than any other scm system. I've used svn, mercurial, and git quite a bit, and found git and hg to be the easiest to work with, with svn coming in a distant 3rd...

    25. Re: And yet, no one understands Git. by Anonymous Coward · · Score: 0

      Mercurial makes too many small files. Really space inefficient.

    26. Re:And yet, no one understands Git. by jellomizer · · Score: 1

      I think it is a bit of all of it.
      Git isn't for everyone or every project... For some people they are better off with Subversion or something else... Just because their project may have a structure that makes their tool easier to handle.

      However I expect, there is a lot of room to make it easier to use, that the end users do not want to embrace, Primarily because they have gotten use to how it is now, and doesn't want to change their methods. But also as a way so they feel good that they are somehow special that they figured out this tool, more than someone else.

      Part of the problem a lot of people think linearly. SourceSafe CVS Subversion GIT However they are all designed to solve a particular problem that they have. Sourcesafe which I personally and vehemently dislike, is simple to use and follows a simple methodology that people can understand, following the libary book model. This allows for easy adoption to using source control, thus better then not having a source control.

      --
      If something is so important that you feel the need to post it on the internet... It probably isn't that important.
    27. Re:And yet, no one understands Git. by Anonymous Coward · · Score: 0

      I only understand head, that probably says more about me though!

    28. Re:And yet, no one understands Git. by Anonymous Coward · · Score: 0

      I used to think Git was needlessly complicated and couldnt understand why people didnt just use SVN. Then I took the time to read about it and try it out and now it seems the logical way of doing version control and SVN seems needlessly complicated and gets in the way.

    29. Re:And yet, no one understands Git. by Marginal+Coward · · Score: 1

      After reading TFA, I found that Linus Torvalds made some of the same points, where "a traditional version control system" could be substituted wherever he uses "CVS":

      The other big reason people thought git was hard is that git is very different. There are people who used things like CVS for a decade or two, and git is not CVS. Not even close. The concepts are different. The commands are different. Git never even really tried to look like CVS, quite the reverse. And if you've used a CVS-like system for a long time, that makes git appear complicated and needlessly different. People were put off by the odd revision numbers. Why is a git revision not "1.3.1" with nice incrementing numbers like it was in CVS? Why is it that odd scary 40-character HEX number?

      But git wasn't "needlessly different." The differences are required. It's just that it made some people really think it was more complicated than it is, because they came from a very different background.

    30. Re:And yet, no one understands Git. by Marginal+Coward · · Score: 1

      I used SVN casually for a few years, but I can't say I ever fully grasped its approach to branching and tagging, which are done mostly by using a set of specially named directories rather than as a fundamental feature of SVN itself. In contrast, Git's approach to those things make perfect sense to me.

    31. Re:And yet, no one understands Git. by Yunzil · · Score: 1

      It isn't complicated.

      Yes it is. Ten years is about how long it takes to figure out.

    32. Re:And yet, no one understands Git. by Anonymous Coward · · Score: 1

      Git is a crap SCM.
      Git is fantastic for integrating changes from everywhere like Linus does.
      Git was built by Linus for Linus' use cases. Why anyone else is using it for general SCM is beyond me.

      This is after spending a couple of weeks in the internals of GIT making tools using the internal structures because the command line stuff couldn't manage what I was trying to do - which was backporting a kernel feature that brought in changes to hundreds of files with thousands of patches. On the bright side, I now have a pretty cool tool for managing merging abnormally large changes.

    33. Re:And yet, no one understands Git. by wonkey_monkey · · Score: 1

      What's annoyed me in the past is when I've gone to download some software and rather than giving you a simple link to an archive, you get instructions on how to do it all with Git.

      --
      systemd is Roko's Basilisk.
    34. Re:And yet, no one understands Git. by Anonymous Coward · · Score: 0

      cmd.exe

    35. Re:And yet, no one understands Git. by Anonymous Coward · · Score: 0

      Me too! Occupy Atlassian! Can't believe they market to programmers when they can't even make a decent upgrade script. It it always a guessing game if you can upgrade properly because they make you go on a treasure hunt trying to find out what to do each time. Why should we have to pay for such amateur stuff?

    36. Re:And yet, no one understands Git. by Yunzil · · Score: 4, Insightful

      You have to understand the data-structure, how files, directories and commits are all content-addressable objects. The linkage of the commits by means of their id's must be understood.

      See, here's the thing. Why should I have to understand internal data structures in order to use a piece of software? Imagine if you made a word processor and people found it difficult to understand, and you said, "It's easy once you understand that the words in the text are stored in a hash map along with a structure with various flags that encode things like whether it's italic or not." People would look at you funny and go back to using Word.

    37. Re:And yet, no one understands Git. by gweihir · · Score: 1

      Stupid people will always perceive most things as "difficult". That does not mean they are.

      --
      Most ACs are not even worth the keystrokes to insult them. Be generically insulted by this and ignored otherwise.
    38. Re:And yet, no one understands Git. by Anonymous Coward · · Score: 0

      Git's problems stem from it's Unix like command line basic user interface.

      This is untrue, the mercurial command line interface is much less arcane than git. The fact that it is a command line has nothing to do with it.

    39. Re:And yet, no one understands Git. by Anonymous Coward · · Score: 0

      I hear from so many people who love git, and also from so many people who see it as needlessly complicated to the point of getting in the way of getting things done.

      One thing that git suffers from is "One True Way" syndrome. There's a distinct way that the people who make git think that version control should be handled. If your usage matches the "one true way" of using version control, git is all lollypops and puppydogs. If instead you want to use git in a way that goes slightly counter to the "approved" method, be prepared for a nightmare of almost-but-not-quite working functionality.

      The solution to this problem, according to the developers, is to abandon your philistine ways and take up the sanctioned approach to version control. Take a look at any git-specific help outlet for questions of the "how do I do this seemingly simple thing that for some reason seems rather complex in git" type and you'll see the answers almost universally boil down to "you're doing it wrong": git isn't defective for not doing (simple thing), *you* are defective for wanting to use git to do (simple thing) in the first place instead of doing (other simple thing, but which would require changing your entire workflow). As I understand it, there have been a number of changes to make certain use cases *harder* to accomplish with git, as they were considered to be the "wrong way" of doing things.

      Don't get me wrong - I like git and use it frequently. You just need to be prepared to handle your repository in the "git way", and when you encounter something that doesn't quite work take the attitude "it's not a bug, it's a feature" and change your workflow accordingly.

      So the people who love git are probably using it in a way that meshes with the way the designers intended it to be used. People who think it needlessly complicated are probably trying to use it in a way that goes counter to the designers' intent. If they switched to the "git way" of doing things, the complexity would disappear (for the most part).

    40. Re:And yet, no one understands Git. by gmack · · Score: 1

      Or you can just use GitHub's Windows client which, the last time I used it required me to use the command line to init non Githib repos but then didn't require the user to use the command line for anything. Might even be better now, it's been a couple of years since I had to support software developers running on windows.,

    41. Re:And yet, no one understands Git. by swillden · · Score: 4, Interesting

      I worked for used git for their SCM and I asked where the backups were I was told they didn't need backups because it was distributed and everyone had a copy of the repo

      This is only tangentially-related, but a good story, and it's been a few years since I posted it.

      About 20 years ago, I worked for a company which I shall not name, which used CVS as its source repository. All of the developers' home directories were NFS mounted from a central Network Appliance shared storage (Network Appliance was the manufacturer of the NAS device), so everyone worked in and built on that one central storage pool. The CVS repository also lived in that same pool. Surprisingly, this actually worked pretty well, performance-wise.

      One of the big advantages touted for this approach was that it meant that there was a single storage system to back up. Backing up the NA device automatically got all of the devs' machines and a bunch more. Cool... as long as it gets done.

      One day, the NA disk crashed. I don't know if it was a RAID or what, but whatever the case, it was gone. CVS repo gone. Every single one of 50+ developers' home directories, including their current checkouts of the codebase, gone. Probably 500 person-years of work, gone.

      Backups to the rescue! Oops. It turns out that the sysadmin had never tested the backups. His backup script hadn't had permission to recurse into all of the developers' home directories, or into the CVS repo, and had simply skipped everything it couldn't read. 500 person-years of work, really gone.

      Almost.

      Luckily, we had a major client running an installation of our hardware and software that was an order of magnitude bigger and more complex than any other client. To support this big client, we constantly kept one or two developers on site at their facility on the other side of the country. So those developers could work and debug problems, they had one of our workstations on-site, and of course *that* workstation used local disk. The code on that machine was about a week old, and it was only the tip of the tree, since CVS doesn't keep a local copy of the history, only a single checked-out working tree.

      But although we lost the entire history, including all previous tagged releases (there were snapshots of the releases of course... but they were all on the NA box), at least we had an only slightly outdated version of the current source code. The code was imported into a new CVS repo, and we got back to work.

      In case you're wondering about the hapless sysadmin, no he wasn't fired. That week. He was given a couple of weeks to get the system back up and running, with good backups. He was called on the carpet and swore on his mother's grave to the CEO that the backups were working. The next day, my boss deleted a file from his home directory and then asked the sysadmin to recover it from backup. The sysadmin was escorted from the building two minutes after he reported that he was unable to recover the file.

      --
      Note to ACs: I usually delete AC replies without reading them. If you want to talk to me, log in.
    42. Re:And yet, no one understands Git. by Anonymous Coward · · Score: 0

      > directories and commits are all content-addressable objects.

      No, and I don't understand why you people keep spewing that lie. Git does not support directories. Linus says it never will because there is an easy workaround. Just put an empty .gitignore file in any empty directory you want to check in. There is no support for directories, and your lies hurt Git. I know you hate it, but attack it for real problems and troll like a supporter of Git then spout lies that hurt it. Your Republican kind is disgusting. You are using Republican tactics.

    43. Re:And yet, no one understands Git. by pz · · Score: 2

      The team I was on was using cvs for a long time (quite successfully) and then switched to git. I could never use git without having a page of cheat-sheet notes in front of me. There were some good things about it, some really good things (the code merger was magic), but you had to stay on top of the state of your code in a way that CVS never required.

      --

      Put my fist through my alarm clock with its ding-dong death inside my ear. - The Blackjacks.
    44. Re:And yet, no one understands Git. by Anonymous Coward · · Score: 0

      I know almost nothing about git, but this has never been a barrier to me if I simply want to grab source for something. I mean, "wget", "curl", etc. etc, just becomes "git clone ". That's it. You don't need to understand anything beyond that.

    45. Re:And yet, no one understands Git. by Anonymous Coward · · Score: 0

      Sounds like you want a fileshare to upload a zip of your project to every 5 minutes. Feel free. The rest of us will use our SCM tools to actually do useful things.

      Simplifying the git process down any more than it is is pointeless, because you need all those steps to capture the meaning you want. I want commit messages. I want to be able to add only some files to a commit. I want to be able to commit without pushing.

      Sure, things could be a tiny bit simpler, and if you want that, people have made nice UIs to walk you through it all, and integrations into your editors. This is a tool, however, aimed at developers who need all the functionality git provides, so expecting them to take 5 minutes to become familiar with it is entirely sensible.

    46. Re:And yet, no one understands Git. by angel'o'sphere · · Score: 1

      Every SCM has an "add step" otherwise: how should the SCM know which files to track and which not?

      This post is not insightful but brain dead.

      If you work from the command line and don't like to add commit messages, then ford god sake: learn how to use a command line! What about an alias or a script with a default commit message? Wow that was easy!

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
    47. Re:And yet, no one understands Git. by Anonymous Coward · · Score: 0

      I don't know what others think, i just find it too different. Others are really intuitive, git, not at all. As always, just my opinion.

      I like git well enough, but you're right about the intuitiveness. I actually found bzr more comfortable to use, even though I had experience with git and none with bzr. I first used it because I needed it for some FOSS project I wanted the source to, and it prompted me to experiment with it as a git replacement. Except for some performance problems, I liked it a lot. Unfortunately, not long after that I learned that bzr development was all but dead due to git's popularity. A shame really.

    48. Re:And yet, no one understands Git. by angel'o'sphere · · Score: 1

      Either: https://www.atlassian.com/soft...
      or: https://code.google.com/p/tort...

      But I don't like SCMs that integrate into the Explorer ... to confusing and error prone IMHO.

      Just worked an hour on my sisters Windows 8 Explorer/Internet Explorer and stuff: worst software/UI experience ever ... who actually is using such a system? Masochists?

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
    49. Re:And yet, no one understands Git. by angel'o'sphere · · Score: 1

      I forgot tot mention that IDEs like Eclipse and IntelliJ have a quite good build in Gt support.

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
    50. Re:And yet, no one understands Git. by Anonymous Coward · · Score: 0

      Only if your firewall allows git to traverse, and your admin doesn't think git over http is "too verbose".

    51. Re:And yet, no one understands Git. by MechaStreisand · · Score: 2

      The problem with what you're saying is that Mercurial exists, and it can do everything that git can do with an easy to use interface.

      --
      Disclaimer: IANAL. This post is, however, legal advice, and creates an attorney-client relationship.
    52. Re:And yet, no one understands Git. by Dynedain · · Score: 1

      Git works well because of how the Linux project is structured - a very large hierarchy, but starts to fall down in a small team where people don't have that arms-length working environment, or where they work on multiple branches at the same time (eg at work, I have my big feature and I have bug fixes that come and go regularly - git doesn't help in that environment unless I have multiple repos checked out)

      We've been using Git (with a centralized repo) very successfully with a small team and it has made stuff so much smoother than SVN. Mostly because it encourages branching and facilitates it quite well (compared to the monolithic branding in SVN).

      Bug fixes? Create a branch per bug. Make your commits as you go. Commit if you need to (or use Git Stash) and switch to another branch. Easy-peasy. No need to have multiple checkouts. The workflow we've been using with a lot of success is to create a branch per bug/feature, and then use a pull request to get it reviewed and merged back into master.

      --
      I'm out of my mind right now, but feel free to leave a message.....
    53. Re:And yet, no one understands Git. by Penguinisto · · Score: 2

      Step 2 - if you're not a working developer or in DevOps, you really shouldn't be using this thing, so, like, stop there. ;)

      Okay, just kidding. In all seriousness, Git can have a steep learning curve to the uninitiated. Then again, so can CG compositing/modeling, systems administration on a CLI-only install of any UNIX/Linux flavor you care to name, or even to beginners of Powershell on Windows.

      But then, like most things, I've found that after *using* the thing, it goes from impossible to tolerable, then to easy, then drop-simple. If you're a *nix sysadmin, many of the commands should already be familiar (git rm, git add, git mv, etc).

      Besides: You can always alias a lot of those commands and save yourself a lot of trouble/time...

      --
      Quo usque tandem abutere, Nimbus, patientia nostra?
    54. Re:And yet, no one understands Git. by Anonymous Coward · · Score: 0

      You actually equate people who don't like git to Republicans?

      I'm a Republican and I have nothing against git.

    55. Re:And yet, no one understands Git. by Penguinisto · · Score: 1

      Git is a crap SCM.
      Git is fantastic for integrating changes from everywhere like Linus does.

      True - we use the hell out of it for DevOps (and for the same damn reason).

      Otherwise, truth be told, *all* SCM packages suck. Badly. Git just sucks less.

      --
      Quo usque tandem abutere, Nimbus, patientia nostra?
    56. Re:And yet, no one understands Git. by Anonymous Coward · · Score: 0

      I also work in a small team, a build takes over 5 hours, used to be 5 days (we are making hardware not software, but the workflow is the same, just building is slower).

      A single export is not enough, we need to work on other branches as our project is building, otherwise we would be twiddling our thumbs.

    57. Re:And yet, no one understands Git. by Kjella · · Score: 1

      Very few people actually know their version control software. Most people know the basic commands, and that's the case for pretty much all of them. Git is not much different in that regard.

      And I suspect some don't understand version control at all. I've worked with the following (non-git) setup:
      One production branch, at any time one active development branch. When we merge to production, we branch off a new development branch. Could it get simpler? I don't see how. Yet people manage to start developing on the prod branch (that they have access to for hotfixes), fail to understand that bugfixes to prod must go into dev or be overwritten at the next merge, branch the dev branch instead of the prod branch, not to mention the guy blindly checking in his entire old local code over the current dev branch and it's all a brilliant example of Murphy's law. One guy mostly understands it but doesn't want to be the gatekeeper for everybody else. Though he gets to play fire fighter instead...

      --
      Live today, because you never know what tomorrow brings
    58. Re:And yet, no one understands Git. by Marginal+Coward · · Score: 1

      I used Mercurial for a short time a few years ago. Although I focused above on Git, the same points apply to Mercurial since it's also a distributed version control system. Both use similar concepts, but both are very different from what people who haven't used a distributed version control system are used to. So, it's a huge gear shift to really grok the new concepts of either one. Likewise, it's probably pretty easy to switch between Git and Mercurial since the concepts are similar.

      So, the problem with what you're saying is that my point doesn't involve the user interface of either one. Some nice GUI tools are available for both to make them easier for the newbie to learn. I use a couple of those for Git, along with a few Git commands when necessary. However, some folks use Git commands exclusively. Perhaps the same is true for Mercurial.

    59. Re:And yet, no one understands Git. by Anonymous Coward · · Score: 0

      Oh come on. The hex revision numbers are there because the programmer was too stupid or too lazy to figure out something people could actually use. Typical programmer attitude---code for other nerds, not normal people.

      A SCM shouldn't require careful studying of an entire book just for everyday use.

      Don't forget, CVS and git were designed with the exact same purpose in mind!

      I started with git a few months ago and now deeply regret it.

       

    60. Re:And yet, no one understands Git. by Anonymous Coward · · Score: 0

      > See, here's the thing. Why should I have to understand internal data structures in order to use a piece of software?

      You actually don't have to understand git at that level to use it.

      All you need to know about git is that it -like *EVERY* other VCS in existence- thinks of a commit history as a directed, acyclic graph, and that it -like *ALMOST* every other VCS in existence- stores branches and tags as pointers to a particular commit in that DAG.

      You may complain that "You shouldn't have to know about a DAG in order to use version control!". I argue that if you don't think of a VCS in this way (or a functionally equivalent way), then you will be frequently surprised by behaviours of your VCS that would otherwise be obvious, causing you to spend wrestling with your tooling when you should be actually working.

    61. Re:And yet, no one understands Git. by oobayly · · Score: 1

      I use Git for Windows - it's pretty simple, but does everything you need, adds itself into Explorer so you have all the options right there in context menus. It also has a bash shell environment.

    62. Re: And yet, no one understands Git. by Anonymous Coward · · Score: 0

      Here's an idiot that won't be in this business long...

    63. Re:And yet, no one understands Git. by bobbied · · Score: 1

      Still, if you don't know what's happening locally and remotely, you can get into big trouble even with a GUI.

      --
      "File to fit, pound to insert, paint to match" - Aircraft Maintenance 101
    64. Re: And yet, no one understands Git. by Anonymous Coward · · Score: 0

      Uh,you havent used git add, have you? It isn't cvs add.

    65. Re:And yet, no one understands Git. by fisted · · Score: 1

      mutt called, they want their slogan back

    66. Re:And yet, no one understands Git. by mattack2 · · Score: 1

      How the !@$ do I make "-a" default for commit? The fact that it's NOT the default is one of the !@$!@$!@ confusing things about git.

      (git is more difficult/confusing than svn which is more difficult/confusing than cvs.. and no, cvs wasn't the first source repository I ever used.. if svn truly was "a better cvs" like it claimed, without the huge URLs, I'd say it was undeniably better.)

    67. Re:And yet, no one understands Git. by Anonymous Coward · · Score: 0

      What's annoyed me in the past is when I've gone to download some software and rather than giving you a simple link to an archive, you get instructions on how to do it all with Git.

      That's because they don't want you to be able to install your choice of version and don't care that you will never be able to replicate your work.

      It's the same shit mindset that tells you the (nearly) only reliable way to install Ruby on Rails on a production web server is to use sudo to live-run a script directly out of a git repository.

    68. Re:And yet, no one understands Git. by Anonymous Coward · · Score: 0

      Indoctrination is rampant.

    69. Re:And yet, no one understands Git. by mattack2 · · Score: 1

      This is not intended as simply a "citation needed" response.. The earliest case I remember is from the Mac OS 7.5 T shirt:
      https://www.flickr.com/photos/...

    70. Re:And yet, no one understands Git. by multi+io · · Score: 2

      Oh come on. The hex revision numbers are there because the programmer was too stupid or too lazy to figure out something people could actually use. Typical programmer attitude---code for other nerds, not normal people.

      No. git is a distributed version control system, which means that, among other things, operations like "commit" and "merge" that create new commits must operate purely locally, without synchronizing with any remote copy of the repository, and then, much later, when the user decides to push those commits to a remote copy, and other users push their new commits to the same remote copy, the remote copy must be able to tell which of the incoming commits it already had locally, which ones are actually new to it, and whether or not multiple incoming commits from different source repositories represent the same commit (for example because those two source repositories pushed to each other before) and thus must be collapsed into one new local commit, and which ones are different commits and this must be imported as separate local commits. The fundamental problem that the DVCS has to solve here is merging/synchronizing multiple directed acyclic graphs coming from different remote sources, all of which can independently add new nodes to their local version of the graph at any time without communicating with any of the other copies or any other sort of "central repository".

      This means that you have to have some sort of globally unique identifier for the nodes of the graph, and those identifiers must be creatable locally, using only information that's available in the local copy of the graph, and then still be unique across all copies of the graph that might exist elsewhere. That's what the SHA1 checksums achieve. They also have the nice feature that they're not random numbers, but actual checksums over the entire contents of the graph up to and including that node. But the fundamental issue is that you can't have human-readable commit identifiers like "1.2" or "1.4.1" because there is no central authority that could generate those names and guarantee that they're unique across all copies. Mercurial uses the same solution (they have a linearly increasing "commit number" on top of that, but those numbers are only valid locally, i.e. they might be different in each copy of the graph).

    71. Re:And yet, no one understands Git. by mattack2 · · Score: 1

      Branch per bug? Why not just do the bug fix, and commit it after you've tested the fix? You end up with a ZILLION "pointless" branches after that. (You obviously can know what checkin did the fix in svn or cvs, so you still have the history of what the actual fix was, so can revert or modify it if necessary.)

    72. Re:And yet, no one understands Git. by mattack2 · · Score: 1

      Wow, I can't believe I'm defending svn....

      But as far as I understand (and as far as I've been *using* it for several years now), there are not "specially named directories". There is a user-created convention of directory names and locations..

      But underneath, there's NO difference between a tag directory and a branch directory.. (Which _annoys_ me, since I wish I could "lock" tag directories so I don't accidentally check into them, which I think I did once.. then undid of course..)

      I guess this is a case of the grass is greener on _your own_ side of the fence.. Since git is reaaaaallly complex to me (and svn is complex compared to cvs, but I've MOSTLY gotten over that part).

    73. Re:And yet, no one understands Git. by jrumney · · Score: 1

      Except that for people who are not working alone, there are more commands that need to be considered basic in DVCS than in traditional VCS.

    74. Re:And yet, no one understands Git. by angel'o'sphere · · Score: 1

      You write a shell script with the same name of the git command you want to use.
      Put it in front of the git command in the PATH.
      Forward all options to the original command and add the "-a" option.

      On the other hand I'm pretty sure there is an GItOPTS or similar named environment variable where you can preset some stuff as well.

      Hope that helps.

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
    75. Re:And yet, no one understands Git. by Dynedain · · Score: 1

      What if it takes multiple commits to fix a bug? What if you need to commit to run against a build server? What if you want to switch away to a different branch to work on something else without losing where you're at?

      It's one click to delete a branch (and it's a simple checkbox when we merge the pull request using Atlassian's git server product). And you don't have to push your changes out to other users or git servers. You can hold onto it on just your box until you're ready to make it available.

      Zillions of branches isn't a problem in Git. They're trivial to create and delete. (delete doesn't destroy history, just hides the branch name so it doesn't show in your list of "existing" branches). That's the whole point. Everything is about branching and merging instead of a linear code history.

      --
      I'm out of my mind right now, but feel free to leave a message.....
    76. Re:And yet, no one understands Git. by mattack2 · · Score: 1

      Why would it take multiple commits to fix a bug? If it's all in one project, I'd *hope* that was all in one commit. (I'm not saying in the real world it works out that way, but it would optimally be so.)

      But if "deleting" a branch just hides it from whatever the equivalent of "svn ls BIGANNOYINGURL/branches", then great. (So if it just hides it, can you tell it to tell you the full list?)

    77. Re:And yet, no one understands Git. by MassacrE · · Score: 1

      I would say it is both a useful tool, and complicated to the point of getting in the way of getting things done :-)

      Git has a data model which I imagine is based on the idea of distributed filesystems. On top of that you have something you don't normally get in a filesystem - you save all historical state, and you comment on what a change in state represents.

      Beyond normal SCM functions, this model gives you the ability to do all sorts of fun/crazy things:

      - Rewrite historical state to obliterate any record of a certain file
      - Rebase your filesystem's state based on changes you've seen from other nodes
      - Filter the filesystem to represent the contents differently, for instance only represent a single subdirectory
      - Create alternate systems for resolving changes from distributed nodes
      - Create alternate formats and distribution mechanisms for representing changes in filesystem state, and workflows for manual or automatic application
      - Create a union filesystem representing data outside the distributed filesystem

      So its not just that git core is complicated - a lot of the wacky tools are actually built into git, and a lot more are available elsewhere. And there are legitimate reasons to want to do some of the more complicated tasks. Since these tasks are useful but not vital, they wind up being tools in a very complex toolbox.

      On top of that, you have problems when trying to teach more than command-line formulas or GUI buttons to get certain tasks done - explaining the full model overwhelms new users. But the porcelain is barely decoration, as the git plumbing underneath is exposed in things like command help.

      Going beyond formulas requires not just learning, but some torsional force on one's brain so it may reorient inside your head - you have to learn not just commands, but new ideas. But until you do that, even the commands you use as part of your formulas will have help pages that might as well be written in klingon, because they are written in terms of concepts that you don't understand.

    78. Re:And yet, no one understands Git. by Anonymous Coward · · Score: 0

      Do you really think Republicans are smart enough to understand Git? Where I work we use it, and not a one of them has made it past their probationary period. Some were fired for other reasons, but none understood Git.

    79. Re: And yet, no one understands Git. by Anonymous Coward · · Score: 0

      For what it's worth, I have never run into this and have personally installed it several times, on Windows 7, 8 and 8.1, both work and personal, nor have I heard of anyone else having issue.

      The issue I have with it is the speed, even on 8 core, 16 GB RAM, pcie SSD, it just gets crazy slow sometimes. When it works it is a great git client though.

    80. Re:And yet, no one understands Git. by grouchomarxist · · Score: 1

      Here is an even simpler guide: A Guide to GIT using spatial analogies.

    81. Re:And yet, no one understands Git. by Anonymous Coward · · Score: 0

      I'm more partial to TortoiseGit, mostly because it's much similar to TortoiseSVN (which we were using before we migrated to Git), plus unlike SourceTree it will integrate with the right-click menus of the Windows file manager as well as show icon overlays of the status of files/folders in a repo.

      FYI - anyone who bashes someone for developing under Windows using open source tools (despite being able to actually get solid work done using said tools) is a fucking idiot. Don't listen to them.

    82. Re:And yet, no one understands Git. by gl4ss · · Score: 1

      sure you need to.

      like, to install git in the first place.

      then there's software that uses GIT to fetch essential pieces of it to itself after you have already installed the software.... that's like double stupid. adding the dependency of git into the software itself.

      --
      world was created 5 seconds before this post as it is.
    83. Re:And yet, no one understands Git. by Guy+Harris · · Score: 1

      Branch per bug? Why not just do the bug fix, and commit it after you've tested the fix?

      What if it takes multiple commits to fix a bug

      I.e., you tested the fix, and committed it, but it wasn't good enough and you needed to do some more fixing?

      What if you want to switch away to a different branch to work on something else without losing where you're at?

      Separate source trees in separate directories. I occasionally use "git stash", but the problems with that are 1) with too many stack entries or too-old stack entries, I lose context (so I'd be better off doing the work in a separate directory) and 2) on the occasions when I've managed to get my local repository in some weird state where it's not obvious how to fix it, doing my usual "clone another tree, move my changes over to that tree, and then nuke the tree with the messed-up repository from orbit, just to be sure" strategy loses the stashed stuff, so I try to use "git stash" only for 1) checking the behavior of the code without the fix I'm working on and 2) doing some relatively quick fix in the tree so that the stashed changes don't get forgotten.

    84. Re:And yet, no one understands Git. by Anonymous Coward · · Score: 0

      Really? You know all of these people's political views? I call BS.

    85. Re: And yet, no one understands Git. by Anonymous Coward · · Score: 1

      I've installed Atlassian SourceTree on hundreds of disparate machines from Windows XP to 10RC.

      Only time I've seen that stack trace was installing on a botted bootleg version.

    86. Re:And yet, no one understands Git. by Anonymous Coward · · Score: 0

      > Here is an even simpler guide: A Guide to GIT using spatial analogies.

      Do you have one that uses car analogies?

    87. Re:And yet, no one understands Git. by Anonymous Coward · · Score: 0

      It is no mystery why. SVN has a well defined model, which simplifies the issues of source code control. Mercurial and Bazaar at least simplified the command line interface, Git seems to have eschewed simplification at every turn. Git has a few very powerful options; but, the invocations that make it easy to use are not separated from the invocations that make it a steaming mess.

    88. Re:And yet, no one understands Git. by Anonymous Coward · · Score: 0

      Git's interface isn't very UNIX like. Yes, it is CLI, but the structure and regularity of the options never would have arisen in just one UNIX system. Maybe if you merged command line options from three or four UNIX systems, yes; but, not just one UNIX system. Bazaar and Mercurial showed us what a sane distributed CLI would look like, and Git seems to keep showing us that any thought to CLI design is secondary to being able to just wrap what's there in your own aliases.

    89. Re:And yet, no one understands Git. by gbjbaanb · · Score: 1

      Hehe, strangely enough the company I mentioned also had a sysadmin who thought he knew what he was doing too - one thing I failed to mention was that all the developers work areas was on a single linux server (as he didn't want anyone working on their own linux machines despite everyone having a laptop just to run putty and email). So I guess even if everyone had got a copy of the repositories...

    90. Re:And yet, no one understands Git. by Anonymous Coward · · Score: 0

      It isn't complicated, it is wrong. Linus had a genius moment there(on the shoulders of previous giants) and designed a back-end and which is close to what THE version control system should be. Then he lost all divine inspiration and designed git.
      It's still good enough for anyone to bother fixing it.

    91. Re:And yet, no one understands Git. by Anonymous Coward · · Score: 0

      Do you have one that's not a joke that substitutes some labels on an uncredited physics [web] textbook's graphic?

    92. Re:And yet, no one understands Git. by WuphonsReach · · Score: 1

      SVN's strengths are:

      - Centralized repository model, which is simpler and for less technical users makes it less likely that they will screw up. Once something is committed to the SVN server, you can back it up and not worry that you have portions of your data not covered by backups. Plus you get monotonically increasing version numbers, which non-techies find easier to digest.

      - Excellent at handling binary files. Like MSOffice files, or LibreOffice, or images, or other binary assets. We have a few repositories that are 5+ GB.

      - Only bring down what you need locally, not the entire repository. SVN has the concept of "sparse" checkouts where you only bring down the folders that you need, not the entire repository.

      The downside is poorer merge support (an ongoing battle which they work on in each release) and there is no way to do commits if the link to the server is down.

      --
      Wolde you bothe eate your cake, and have your cake?
    93. Re:And yet, no one understands Git. by mschaef · · Score: 1

      After a point, users must develop a deeper understanding of how a given software package works in order to use it effectively.

      You mentioned word processing as an example... carrying that along, Microsoft Word faced a huge amount of resistance from WordPerfect users who had internalized WordPerfect's 'stream-of-markup' model for representing formatted text. In both cases, you could highlight text and make it bold, but WordPerfect's model was much clearer to more advanced users. Microsoft has tried to replicate some of this over the years with 'show formatting', but it isn't as effective because the underlying data model is so much more complex. (Where does formatting come from? The character, paragraph, paragraph style... and on and on.)

      I should point out that I'm using the term 'data model' vs. 'data structure' deliberately. I would agree with you that users probably don't care about the specific representation for WordPerfect's 'stream of tags'.... only that it's there and has a set of well defined and predictable operations.

    94. Re:And yet, no one understands Git. by hyperar · · Score: 1

      Thanks, i've tried using Bash, but it is just another thing to learn, and who has the time these days.

    95. Re:And yet, no one understands Git. by hyperar · · Score: 1

      I happen to love Windows 8.1, and hardly use the Start Screen. Works pretty well.

    96. Re:And yet, no one understands Git. by Dynedain · · Score: 1

      Sounds to me like you try to make huge complex commits. Try rethinking your work as smaller modular commits. It makes life so much easier to do diffs and handling complex branch/merging behaviors.

      And use as many dev branches as you want in Git. You can always cherry pick which changes you want to bring over into your master/release branch.

      --
      I'm out of my mind right now, but feel free to leave a message.....
    97. Re:And yet, no one understands Git. by Anonymous Coward · · Score: 0

      Some time ago I was starting a new project with a friend, and we came to the part where we had to choose which SCM we would use.
      I had learned to use git, so that was my proposal, but he preferred mercurial because the Windows client was so much nicer (which was true, and probably still is).

      Anyway, we were planning on using a number of open-source libraries on the project, 99% of which are published on GitHub, so my argument was that we we could either use git, or we could use mercurial and git. It ended up being an easy choice.

    98. Re:And yet, no one understands Git. by Guy+Harris · · Score: 1

      Sounds to me like you try to make huge complex commits. Try rethinking your work as smaller modular commits. It makes life so much easier to do diffs and handling complex branch/merging behaviors.

      The commits I do are "what's necessary to fix the problem". Perhaps that means that change A depends on change B, which depends on change C, and if none of those changes represent a regression, I do them as separate commits, pushing each one upstream as soon as the commit is done.

      But what does that have to do with this "branch early, branch often" stuff I keep hearing from Git fans?

      And use as many dev branches as you want in Git.

      I do. I don't want to use any dev branches, as they provide no obvious benefit to me, so I don't use any.

      You can always cherry pick which changes you want to bring over into your master/release branch.

      If I didn't want to bring them over, I wouldn't have committed them in the first place.

    99. Re:And yet, no one understands Git. by Guy+Harris · · Score: 1

      About 20 years ago, I worked for a company which I shall not name, which used CVS as its source repository. All of the developers' home directories were NFS mounted from a central Network Appliance shared storage

      ...

      One day, the NA disk crashed. I don't know if it was a RAID or what,

      It was a NetApp box, so it used RAID 4 (and had more than one disk - the minimum was 2 disks). Perhaps the failure was something more than just a single-disk failure, as a single-disk failure shouldn't have lost the data.

    100. Re:And yet, no one understands Git. by brantondaveperson · · Score: 1

      What if you want to switch away to a different branch to work on something else without losing where you're at?

      Then I will check out a new copy - disk space is cheap and my time wasted waiting for a build when I switch back again is expensive.

    101. Re:And yet, no one understands Git. by Dynedain · · Score: 1

      And use as many dev branches as you want in Git.

      I do. I don't want to use any dev branches, as they provide no obvious benefit to me, so I don't use any.

      Well if you don't want to branch, then you're arbitrarily enforcing a condition on yourself that makes things far more difficult then they need to be. Because it is a DVCS, Git it built entirely around the idea of frequent branching. Every time you make a commit you are effectively branching.

      --
      I'm out of my mind right now, but feel free to leave a message.....
    102. Re:And yet, no one understands Git. by Dynedain · · Score: 1

      In Git, every time you check out a new copy you are getting the ENTIRE project history, not just the specific commit. That's part of the nature of a DVCS.

      Hence why branching is built to be so easy, and why switching branches is effectively just essentially just changing a symlink.

      If you want to be doing dev in another instance thing while a build is running, that's a good argument for a second checkout. But multiple checkouts just to avoid branching is not a good way to use Git, not a good argument against it.

      Different VCS architectures result in different workflow styles. What made sense for SVN and CVS doesn't necessarily apply for Git or Mercurial. In SVN/CVS, branching and merging are monolithic tasks that are very cumbersome, so the best-practices workflows tend to minimize how often this happens. Git and Mercurial are the opposite. Because branching and merging is key to making DVCS work, it's highly encouraged and the process is almost trivial by comparison.

      --
      I'm out of my mind right now, but feel free to leave a message.....
    103. Re:And yet, no one understands Git. by brantondaveperson · · Score: 1

      branching and merging are monolithic tasks that are very cumbersome

      Rubbish. In SVN you can branch, and switch your working copy to the branch in a single command-line call. With the advantage that the branch exists in the central server (yes, this is an advantage) right away so other people you work with can work on it too.

      it's highly encouraged and the process is almost trivial by comparison.

      The cost of branching is not related to how easy the tool makes it to create a branch. Contrary to common belief, it's equally easy in both SVN and git to create a branch. The cost of branching is equal to the cost of merging those branches together. Git is no magic bullet here, if you have 'n' branches, then the cost of merging is O(n^2-n).

    104. Re:And yet, no one understands Git. by brantondaveperson · · Score: 1

      But multiple checkouts just to avoid branching is not a good way to use Git, not a good argument against it.

      Sorry, I forgot to address this. I'm not suggesting multiple checkouts to avoid branching, I'm suggesting multiple checkouts when working on multiple branches to avoid rebuilding when you switch from one to another.

    105. Re:And yet, no one understands Git. by Guy+Harris · · Score: 1

      And use as many dev branches as you want in Git.

      I do. I don't want to use any dev branches, as they provide no obvious benefit to me, so I don't use any.

      Well if you don't want to branch, then you're arbitrarily enforcing a condition on yourself that makes things far more difficult then they need to be.

      If you insist on branching, you're arbitrarily enforcing a condition on yourself.

      So why does arbitrarily choosing to work on a branch make things easier? Please give explicit examples of the downside of not explicitly creating branches.

    106. Re:And yet, no one understands Git. by Dynedain · · Score: 1

      Without branching, you can only have branch-like behavior by having multiple checkouts. And when you go to resolve those (at least in Git) you will still be doing a merge operation that is identical to merging a branch.

      When you have multiple people touching the same project, branching helps keep people's work separated so they aren't tripping over each other, and merging provides a place for reviewing and synchronizing changes across different efforts.

      Event CVS and SVN have branching because it is useful. Stop being intentionally obtuse.

      You are complaining that you refuse to use one of the very key features of Git, and that somehow that refusal on your part means that Git is hard to use.

      --
      I'm out of my mind right now, but feel free to leave a message.....
    107. Re:And yet, no one understands Git. by Dynedain · · Score: 1

      The way SVN tracks individual file parent/child version relationships across branches (as opposed to Git's compressed delta of the whole project state) easily results in corrupt histories and merge conflicts that aren't really in conflict. It also quickly becomes overly complicated if you want a project structure that doesn't follow the "best practice" of trunk/tag/branches folders where the entire project is branched. (note, that's a community consensus to work around SVN's limitations, not something enforced by SVN itself). In SVN, branching from a branch, or from a tag, instead of branching from trunk, can get you into to the bowels of SVN cleanup and merge conflicts very quickly.

      Granted, a nice aspect of SVN is you can have a single file exist at a different revision than the rest of your project - powerful, but very dangerous if you miss that a file is in that state.

      --
      I'm out of my mind right now, but feel free to leave a message.....
    108. Re:And yet, no one understands Git. by swillden · · Score: 1

      About 20 years ago, I worked for a company which I shall not name, which used CVS as its source repository. All of the developers' home directories were NFS mounted from a central Network Appliance shared storage

      ...

      One day, the NA disk crashed. I don't know if it was a RAID or what,

      It was a NetApp box, so it used RAID 4 (and had more than one disk - the minimum was 2 disks). Perhaps the failure was something more than just a single-disk failure, as a single-disk failure shouldn't have lost the data.

      Yeah, I never got any details on what happened, exactly. Based on other events, my suspicion is that it was probably user error by the sysadmin. He seemed competent when you talked to him, but repeated experience demonstrated otherwise.

      --
      Note to ACs: I usually delete AC replies without reading them. If you want to talk to me, log in.
    109. Re:And yet, no one understands Git. by Guy+Harris · · Score: 1

      Without branching, you can only have branch-like behavior by having multiple checkouts.

      You say that as if it were a bad thing.

      Yes, I have multiple trees for multiple projects. Why on earth would my life be better if I didn't?

      Presumably you're not saying something such as "one directory tree for multiple projects is better than multiple directory trees for multiple projects"; that's just the moral equivalent of tabbed browsing vs. non-tabbed browsing, and some people quite legitimately don't find tabbed browsing to be an improvement for them.

      And when you go to resolve those (at least in Git) you will still be doing a merge operation that is identical to merging a branch.

      A "merge operation" that I actually bother to notice is what happens if somebody else changed some stuff in ways that collide with my changes. If that happens, it's my job to figure out what to do - including "discard my work because their changes do it better" or "discard my changes because their changes make my changes no longer necessary".

      How would branches make a positive difference there?

      When you have multiple people touching the same project, branching helps keep people's work separated so they aren't tripping over each other,

      There is precisely one person touching my repository, and that's me, so there's nobody to trip over. Other people's work is separated from my work by being on other people's machines. The ultimate goal of all of our work is to get our changes into the official common repository on the trunk or a release branch; how do branches either on my machine or in the common repository simplify this task?

      and merging provides a place for reviewing and synchronizing changes across different efforts.

      Either the merge produces no conflicts - or it produces conflicts, in which case I have to resolve them, as per the above. Again, how do branches improve things here?

      Event CVS and SVN have branching because it is useful.

      Yes, but "having a branch for fixes to a stable release line", to keep feature work for the next release separate from fixes that go into stable release lines (possibly backported from the trunk), is different from "branching for every change you're working on". The former is useful to the project; I've yet to see any scenario in which the latter is useful.

      (And, yes, I've worked at a company where you'd check your fixes into a CVS or SVN branch and have somebody else merge it with the trunk. Perhaps it worked for the organization, but it was just a nuisance for me. I did most of my work on a checked-out-from-the-trunk tree, and created the branch when it was time to submit.)

      You are complaining that you refuse to use one of the very key features of Git, and that somehow that refusal on your part means that Git is hard to use.

      No, I'm complaining that fans of Git seem to think that, because they believe that some particular way of using Git happens to work better for them, it's the Right Answer For Everybody.

    110. Re:And yet, no one understands Git. by Dynedain · · Score: 1

      Yes, I have multiple trees for multiple projects. Why on earth would my life be better if I didn't?

      Presumably you're not saying something such as "one directory tree for multiple projects is better than multiple directory trees for multiple projects"; that's just the moral equivalent of tabbed browsing vs. non-tabbed browsing, and some people quite legitimately don't find tabbed browsing to be an improvement for them.

      Of course not. Every project should have their own repo. SVN, Git or Otherwise. I've seen many places that try to stick it all into one giant SVN project - and the result is that they end up using it as if it was just a network share.

      There is precisely one person touching my repository, and that's me, so there's nobody to trip over. Other people's work is separated from my work by being on other people's machines. The ultimate goal of all of our work is to get our changes into the official common repository on the trunk or a release branch; how do branches either on my machine or in the common repository simplify this task?

      How do branches make it more difficult? You're intentionally conflating two different use cases. You want to do all your work in master and periodically push to a central server? Fine. I have my devs working on different branches per bug/feature because they may need to pass incomplete work between different developers depending on skillset or what layers of the application stack are being changed. I want to keep them in a branch so the work doesn't slip into a release. When their work is complete, reviewed, and tested, then we merge into a release candidate branch for client review.

      Yes, but "having a branch for fixes to a stable release line", to keep feature work for the next release separate from fixes that go into stable release lines (possibly backported from the trunk), is different from "branching for every change you're working on". The former is useful to the project; I've yet to see any scenario in which the latter is useful.

      In Git you don't have to have one or the other scenario. You can have both at the same time. Branching off of a release branch and merging later back into that branch is just as simple as branching off of master. Merging and Pull requests allows for flow management on teams that may have owners of various pieces who need to review anything being committed against their branch/module/whatever.

      No, I'm complaining that fans of Git seem to think that, because they believe that some particular way of using Git happens to work better for them, it's the Right Answer For Everybody.

      I never said that Git is the Right Answer For Everybody - thanks for putting words in my mouth. If your preferred workflow doesn't map to the Git model, then don't use Git. Over the years I have often found that having a flexible worfklow and allowing it to fit the capabilities of the tools being leveraged often introduces more efficient ways of working that I never would have otherwise considered.

      --
      I'm out of my mind right now, but feel free to leave a message.....
    111. Re:And yet, no one understands Git. by Guy+Harris · · Score: 1

      Yes, I have multiple trees for multiple projects. Why on earth would my life be better if I didn't?

      Presumably you're not saying something such as "one directory tree for multiple projects is better than multiple directory trees for multiple projects"; that's just the moral equivalent of tabbed browsing vs. non-tabbed browsing, and some people quite legitimately don't find tabbed browsing to be an improvement for them.

      Of course not. Every project should have their own repo. SVN, Git or Otherwise. I've seen many places that try to stick it all into one giant SVN project - and the result is that they end up using it as if it was just a network share.

      Sorry, by "project" I didn't mean "software project", I meant "development project for a software project". I do not, for example, do all my libpcap work in a single directory tree; I have a tree checked out (cloned, tracking the remote repository) for remote-capturing work, and a tree checked out for directly talking to netlink rather than going through libnl, and so on.

      There is precisely one person touching my repository, and that's me, so there's nobody to trip over. Other people's work is separated from my work by being on other people's machines. The ultimate goal of all of our work is to get our changes into the official common repository on the trunk or a release branch; how do branches either on my machine or in the common repository simplify this task?

      How do branches make it more difficult?

      More commands to type.

      You want to do all your work in master and periodically push to a central server?

      Yes.

      I have my devs working on different branches per bug/feature because they may need to pass incomplete work between different developers depending on skillset or what layers of the application stack are being changed.

      That's never come up as an issue for me, so that doesn't benefit me.

      I want to keep them in a branch so the work doesn't slip into a release.

      I avoid doing that by not running "git push" or "git review" until it's ready.

      When their work is complete, reviewed, and tested, then we merge into a release candidate branch for client review.

      So your organization's workflow is more formal than that of the projects on which I work with Git. On those projects, core developers can just check things in, and others can put up patches for review and pulling on GitHub (libpcap, tcpdump) or on Gerrit (Wireshark). Neither appear to require the contributor to create branches in their own repositories.

      For you, branches per change may be useful. For me, not so much.

      So "branch per bug" isn't "the right way to work with Git", it's merely "something Git lets you do if you choose".

      If your preferred workflow doesn't map to the Git model, then don't use Git.

      That's not a choice I was offered, unless there's something such as "svn-git" to let me avoid using Git even when developing for a project that uses Git (i.e., using some other VCS as a front end to the master Git repository).

      And I do make my workflow work with Git. Said workflow avoids "git branch", as it's just extra keystrokes to type.

      Over the years I have often found that having a flexible worfklow and allowing it to fit the capabilities of the tools being leveraged often introduces more efficient ways of working that I never would have otherwise considered.

      Unless the workflow ends up trying to sleep in Procrustes' bed. Personally, I prefer more flexible tools.

    112. Re: And yet, no one understands Git. by Anonymous Coward · · Score: 0

      Or, "alias gitc='git commit - a'" and don't write a shell script. Or just use Subversion to begin with.

    113. Re: And yet, no one understands Git. by Anonymous Coward · · Score: 0

      You can cherry pick your commits, but not what you check out. Gotta check out the whole f'in repository just to make that one change. Which is great when you have more than a few developers sharing /home. :/

    114. Re: And yet, no one understands Git. by Anonymous Coward · · Score: 0

      I've been a Unix sysadmin for 20 years, and I agree with this feeling. SVN is simple enough to grasp quickly, and the details can be learned incrementally. Git has a huge initial learning curve, and seemingly very little "how it works" documentation. Everything seemingly just says "run this and don't ask questions" instead of explaining what's happening behind the curtain.

      I also get the feeling that the git community is like gentoo community; they like to appear 'leet, but don't really know what they're doing. There are likely a few actual smart users, but mostly just script kiddies. Complain about the shitty UI and you get a bunch of "you just can't understand how awesome this is because you're not a rebellious kid. Also, node.js"

    115. Re: And yet, no one understands Git. by Anonymous Coward · · Score: 0

      This is what I was talking about earlier; git fan boys say "you just don't understand unix" because they think that everything is complicated and random; they don't understand that other CLI programs actually have pretty predictable patterns, while git's UI sucks exactly like you'd expect something designed over a weekend to suck.

    116. Re: And yet, no one understands Git. by Anonymous Coward · · Score: 0

      So, mercurial can do that, but it's also impossible? Weird.

    117. Re:And yet, no one understands Git. by Rich0 · · Score: 1

      As someone mostly in the "I dun get it" crowd, I'll say the problem for me is that I feel like while I can use it, I don't have a great deal of understanding as to what it's actually doing outside of the basics. I feel like I'm following a bunch of recipes that I know work.

      Git is one of those tools which you have to grok to really be effective with. The data model in the tool is not intuitive, but it works really well in practice. Once you understand how it actually works, then the rest falls into place.

      Now, something git really suffers from is inconsistency in its command-line tools. Specifying a branch name varies in syntax from tool to tool, and there are a million other cases like this. So, even if you understand what you need git to do, it can take a lot of digging to figure out the right way to do it.

      Not to start a flamewar, but I find systemd to be in a similar boat. It has what amounts to a class inheritance aspect to it with units, and targets are often poorly understood. There are tons of "instead of this type that" guides out there, but I think that if you want to effectively use systemd you have to grok its data model.

    118. Re:And yet, no one understands Git. by Anonymous Coward · · Score: 0

      Haha, the Stash is almost as bad as the other Atlassian applications. Stash does not want the stupid user to see the dates or times on git log; it only shows "yesterday", last Thursday, etc. Good luck trying to find, if some commits was present on some certain point of time. Of course the stash does not even load more than a dozen lines of history at a time, so the find-operation in web browser is also useless. Or one needs to find for a string, if not found, scroll to end of screen, wait for 10 lines more to load, and repeat search. And the commit review system is a piece of crap too; if the commit has touced a dozen or so files, one needs to click each and every one of them in UI to show the change. Since only one file's changes are shown at once, the find-operation is not possible (it is quite nice to look for uses of new methods, etc..). It seems that the Stash is made by dummies for other dummies, perhaps they should fire the UI-department and think again, who are they actually making the source version control system for.

    119. Re:And yet, no one understands Git. by Makawity · · Score: 1

      Imagine if you made a word processor and people found it difficult to understand, and you said, "It's easy once you understand that the words in the text are stored in a hash map along with a structure with various flags that encode things like whether it's italic or not."

      You mean exactly like every advanced WordPerfect user used to work (with reveal codes on)?

  4. Google Tech Talk with Linus about Git by Anonymous Coward · · Score: 1

    https://www.youtube.com/watch?v=4XpnKHJAok8

  5. Like Coca Cola, git is the real thing by Johnny+Loves+Linux · · Score: 5, Interesting

    As a software developer who's been a git user for 7 years, I don't know how I could have written any serious code without git. Branching and merging is trivial. Cloning is trivial. The staging area makes choosing what to commit trivial. git rebase makes life much easier when it comes to reordering/editing/removing commits out of the history. git blame --- such a nice tool. Binary searching to find bugs is trivial. Every git tool is documented to within an inch of its life.

    And the icing on the cake? Code cowboy hates git. Like sunlight or garlic to a vampire, Code cowboy abhors git. He can't hold the source code hostage to his every brain damaged whim. He can't hose anybody with a distributed version control system. It's no wonder why Code Cowboy is always yapping away at git -- he can't show off his genius if his code can be ignored.

    1. Re:Like Coca Cola, git is the real thing by drinkypoo · · Score: 1

      As End User most of the time (I rarely diddle the code, I'm not that good at it, though I do occasionally fix things) I am kind of grumpy about git. Nobody tells you to use --depth 1 or however you do that, luckily it's been a while since I've downloaded any large sources for which I wasn't able to get a simple tarball. The inability to resume a fetch is pretty horrible, though. Unless that's been fixed recently?

      --
      "You're right," Fisheye says. "I should have set it on 'whip' or 'chop.'"
    2. Re:Like Coca Cola, git is the real thing by Anonymous Coward · · Score: 0

      Every git tool is documented to within an inch of its life.

      As someone who has written plenty of patches for man pages and gave up when it became a hopelessly unfinished task: NO.

    3. Re:Like Coca Cola, git is the real thing by tobiasly · · Score: 1

      As a software developer who's been a git user for 7 years, I don't know how I could have written any serious code without git.

      Very much this. Git has a steep initial learning curve. The concept of a branch being just a pointer is foreign at first. New users try to fit the concept of a branch into their pre-existing notion that it's the sum of everything that has changed since the last merge.

      But once you really understand how Git works, you're ruined for every other version control system. When I'm forced to use TFS for a project, I use Git locally and Git-TFS to keep them in sync. Now I commit often, all day long, tracking all my changes and (relatively) easy rolling them back or reordering them if necessary.

    4. Re:Like Coca Cola, git is the real thing by Anonymous Coward · · Score: 0

      False. Even Code Cowboy loves Git. I'm coming to make your life hell Johnny.

    5. Re:Like Coca Cola, git is the real thing by OrangeTide · · Score: 1

      I write serious code all the time without git. In other tools it was easier to avoid branching or merging by keeping the teams small and only track a "dev" branch and several release branches that are rarely updated. Apply the same patch to each release branch to avoid having to do any complicated merges between branchs. Yes it's all kind of silly and painful, but it doesn't take a long time if you avoid the weakness in other tools. Plenty of time left over to write "serious code".

      The easiest of course is to not have any teammates at all. Then you can code up everything and keep it in a serious of .zip files, or RCS or do nothing at all. I use git for everything today of course, even for single developer projects. But if I didn't have git, I would simply do the extra leg work that I've done in the past.

      --
      “Common sense is not so common.” — Voltaire
    6. Re:Like Coca Cola, git is the real thing by OrangeTide · · Score: 1

      I wouldn't bother with --depth options, at that point you're better off downloading a tarball/zip of the branch. Downloading a nightly snapshot tarball is even better, because you can resume that.

      --
      “Common sense is not so common.” — Voltaire
    7. Re:Like Coca Cola, git is the real thing by drinkypoo · · Score: 1

      I wouldn't bother with --depth options, at that point you're better off downloading a tarball/zip of the branch.

      I agree, but with the caveat that I occasionally run into someone using git on their own server and without providing a tarball, in which case woe is me.

      --
      "You're right," Fisheye says. "I should have set it on 'whip' or 'chop.'"
    8. Re:Like Coca Cola, git is the real thing by kthreadd · · Score: 1

      You can actually share an RCS repo just fine since it does file locking. It's actually quite common even nowadays for configuration files in cases where a larger configuration management system is overkill.

    9. Re:Like Coca Cola, git is the real thing by Anonymous Coward · · Score: 0

      Yup - I always have a RCS folder in /etc for example.

    10. Re:Like Coca Cola, git is the real thing by pspahn · · Score: 1

      git pull --rebase origin master

      There might possibly be no other command in the history of software development that has saved more man-hours than this gem.

      --
      Someone flopped a steamer in the gene pool.
    11. Re:Like Coca Cola, git is the real thing by jellomizer · · Score: 1

      There is a difference between Serious Code and Distributed code.
      You could write serious code without any sort of Source Control... However it isn't recommended.
      But sometimes having a small term working a program is much better then having hundreds of people. So for the smaller teams GIT is too cumbersome.

      --
      If something is so important that you feel the need to post it on the internet... It probably isn't that important.
    12. Re:Like Coca Cola, git is the real thing by swillden · · Score: 1

      Yup - I always have a RCS folder in /etc for example.

      These days I use git for that, too.

      --
      Note to ACs: I usually delete AC replies without reading them. If you want to talk to me, log in.
    13. Re:Like Coca Cola, git is the real thing by angel'o'sphere · · Score: 1

      All small teams I worked with the last 3 years love git.
      What is cumbersome at git, don't get it?
      The daily work cycle is exactly the same as in CVS e.g.
      Everyone simply does a commit with push and optional rebase, unless you have to merge this is a single command, usually triggered via the GUI.
      At some point your team is done, someone merges the current branch to "the trunc" and makes a new branch for the next sprint or story/feature. Something similar you do in CVS as well, but much much later when you have a milestone.
      Bottom line only the fact that you have more branches, that you commit 'localy' and that your "central repository" needs to get a push to by in synch with your local one are just different "names" for the exact same thing you do in CVS etc. with the aded bonus of a local repository.

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
    14. Re:Like Coca Cola, git is the real thing by tlhIngan · · Score: 1

      git pull --rebase origin master

      There might possibly be no other command in the history of software development that has saved more man-hours than this gem.

      Except when you forget the --rebase and now have hours of work fixing your tree.

      Especially if you provide your work as a bunch of patches against an official (but read-only) repo (because said repo is like AOSP where it's easily 30+GB).

      git's ability to generate working patches that apply cleanly breaks if you branched somewhere along the line, then merged. You either should pull the branch with rebase, or a summary of changes (where git collapses the branch into one big commit, but only by diffing the final tree of the branch with the head so you don't get duplicates).

      If you remember, it's great. If you forget... well lets just say I had to write an impressive script to take the output of "git format-patch" and transform it so "git am" can apply it all cleanly (and correctly).

    15. Re:Like Coca Cola, git is the real thing by Frans+Faase · · Score: 1
      And why then does it say in all kind of manuals that you should not use rebash unless you know what you are doing!

      After using Git for about a year now, my conclusion is that subversion is good enough for your team, and heaven compared to Git. With subversion you can just peform an update without having to wonder if you might have something that still needs to be commited. I am also not convinced that creating branches and merging all the time is realy a good way of working for the team we are working in. I am getting used to stash, pull, stash pop, and resolve possible merge conflicts, and only commit and push when I am done with my changes. Yes, that sounds very much like working with Git in a subversion manner, but it seems to be the most productive way of working for us.

    16. Re:Like Coca Cola, git is the real thing by Anonymous Coward · · Score: 0

      In our team we tend to have long running feature branches, our small features take several weeks, large features half a year.
      Being able to keep merging half way development of branches back into master and the other way around is heaven.

      With subversion our branches would diverge more and more, because subversion does not allow merge into trunk and continue working on your branch. In the end it took several weeks to merge our multiple feature branches into the trunk.

    17. Re:Like Coca Cola, git is the real thing by OrangeTide · · Score: 1

      Well you can share it on the same system or over a network filesystem that is designed to do file locking in a unix friendly way (like NFS).

      And I totally agree with other posters that RCS for /etc is a great way to go. I use it myself. (but I keep my DNS zone files in git)

      --
      “Common sense is not so common.” — Voltaire
    18. Re: Like Coca Cola, git is the real thing by Anonymous Coward · · Score: 0

      What? This makes no sense. Either you had to resolve a lot of conflicts when you merged, or you would have had to resolve those same conflicts when you rebased later. Also, rebase does *exactly* what your format-patch + am script purports to do.

    19. Re:Like Coca Cola, git is the real thing by Shados · · Score: 1

      And why then does it say in all kind of manuals that you should not use rebash unless you know what you are doing!

      Because you shouldn't do anything without knowing what you're doing. That command is just unique-ish to git, so it requires a bit of special attention (you need to understand how the commit hashes work).

      Once you do though, merge conflicts are 100x easier to handle, commit history makes more sense, etc. There's cases where you don't want to use it (when you want to be able to trace branching history or if you're merging the branch back upstream multiple times), but for most use cases, rebase away!

    20. Re:Like Coca Cola, git is the real thing by Shados · · Score: 1

      Except when you forget the --rebase and now have hours of work fixing your tree.

      Any merge conflict and you'll notice something fast what happened, and then you can simply abort. If someone there's no conflict, you can just look at the reflog and reset to the pre-merge commit.

      Whoop-y-doo.

    21. Re:Like Coca Cola, git is the real thing by Shados · · Score: 1

      But once you really understand how Git works, you're ruined for every other version control system. When I'm forced to use TFS for a project, I use Git locally and Git-TFS to keep them in sync. Now I commit often, all day long, tracking all my changes and (relatively) easy rolling them back or reordering them if necessary.

      Yup. I can deal with any language (ok, aside PHP...), any operating system (yeah, I don't mind developing on Windows), any framework, any technology...but source control has to be on git or I'm out.

      No other tool affects my workflow so deeply at this point.

    22. Re:Like Coca Cola, git is the real thing by Anonymous Coward · · Score: 0

      As a software developer who's been a git user for 7 years, I don't know how I could have written any serious code without git. Branching and merging is trivial. Cloning is trivial. The staging area makes choosing what to commit trivial. git rebase makes life much easier when it comes to reordering/editing/removing commits out of the history. git blame --- such a nice tool. Binary searching to find bugs is trivial.

      Screwing up is trivial...

    23. Re:Like Coca Cola, git is the real thing by Frans+Faase · · Score: 1
      We only used branches for very long running project or after a release. All other work was simply done in our development branch. Keeping you changes local for a long time is no problem. I used to use update many times a day, always keeping up-to-date with the latest check-ins on the development branch and occasionally having to resolve a merge conflict. For really long running projects, I would create a patch at the end of the day and store it on a file server for back-up. Transfering changes from one branch (development) to another branch (for a bug-fix release) can simply be implemented by creating patches and apply these to the given branch. Which is not really much complicated than all the commands that you have to use in Git for some operations.

      I am not denying that Git is more powerful than Subversion, but to me it seems much less user-unfriendly and less robust agains commonly made mistakes. I feel Git makes me think much more about what I have done, and is less forgiving for small mistakes, in that sense it often feels like a burden than a support.

    24. Re:Like Coca Cola, git is the real thing by jez9999 · · Score: 1

      When I'm forced to use TFS for a project, I use Git locally and Git-TFS to keep them in sync. Now I commit often, all day long, tracking all my changes and (relatively) easy rolling them back or reordering them if necessary.

      Lucky you. Where I am, we have such an enormous amount of crap checked into TFS classic that Git-TFS can't handle it. :-(

    25. Re:Like Coca Cola, git is the real thing by rdnetto · · Score: 1

      git pull --rebase origin master

      There might possibly be no other command in the history of software development that has saved more man-hours than this gem.

      Except when you forget the --rebase and now have hours of work fixing your tree.

      You could avoid that by setting master.rebase for that repo, or setting branch.autosetuprebase=always globally. But even if you did accidentally merge instead of rebasing, the merge commit will contain the hashes of both parents, so it's simple enough to reset the branch.

      --
      Most human behaviour can be explained in terms of identity.
  6. Sounds like a case of by Anonymous Coward · · Score: 1

    git-r-done

    That is: When you have a problem, fix it.

  7. Let's not forget Mercurial by Digana · · Score: 3, Informative

    Let's not forget the other contender for replacing Bitkeeper: Mercurial. We will also be celebrating its 10th year anniversary next week during the Pycon sprints.

    1. Re:Let's not forget Mercurial by Anonymous Coward · · Score: 1

      Former contender.

    2. Re:Let's not forget Mercurial by Anonymous Coward · · Score: 0

      I still prefer Hg's simpler CLI. It's good to have choices.

    3. Re:Let's not forget Mercurial by leuk_he · · Score: 1

      It might be a good product, but don't forget one of the strengths of git is that a lot of people are familiar with it and its uses.

      Other product might be good, but the learning curve might make it that people choose familiar over best tool for the job.

      -- if you have hammer, everything looks like a nail.

    4. Re:Let's not forget Mercurial by ottothecow · · Score: 1
      I'd say at this point...it is all about github.

      I like mercurial a lot, but there is nothing quite like github. Bitbucket isn't awful, but it is no github. Given the choice, I'd say that mercurial has a better way of doing things, and is much easier to learn how to use. Anyone who knows how to use git, basically knows how to use merucrial, anyone familiar with cvs/subversion should have little trouble figuring it out, and someone who has never used it will find it much more pleasant than git....but with github being *the* place to dump your code, git becomes the better choice.

      That then crosses over into projects where you don't care about public hosting. More things have git integration, more people know git (or at least have heard of it via github and will thus consider it), windows git is still kind of lame, but it is functional.

      --
      Bottles.
    5. Re:Let's not forget Mercurial by Anonymous Coward · · Score: 0

      Let's not forget the other contender for replacing Bitkeeper: Mercurial. We will also be celebrating its 10th year anniversary next week during the Pycon sprints.

      Mmph. If you have sub-repositiories, it is really easy to get a Mercurial repository into a bad state that takes much voodoo to get consistent again.

    6. Re:Let's not forget Mercurial by jez9999 · · Score: 1

      No staging area - having to learn (and remember to keep constantly using) the mq extension to get similar-but-more-complex functionality - breaks the tie for me. In git's favour.

  8. Re:Should sexist git*hub developers be removed? by jaklode · · Score: 1

    STFU, Mike. Nobody cares about you.

  9. Re:Should sexist git*hub developers be removed? by Anonymous Coward · · Score: 0

    Who is this "Mike"?

  10. Re:Should sexist git*hub developers be removed? by Anonymous Coward · · Score: 0

    Do you think sexist developers should be removed?

  11. this is really a story about.. by Anonymous Coward · · Score: 5, Insightful

    how bitkeeper fucked up and was swiftly relegated to irrelevance... you have to wonder how many of these are even still using bk......

    1. Re:this is really a story about.. by Dracos · · Score: 1

      Exactly, BitKeeper committed suicide by throwing a fit over their licensing for open source projects, the terms of which stipulated that copies of all commit messages must be sent to BitKeeper, and one of the kernel devs figured out (basically, IIRC) a way to circumvent that.

      At the time of the fiasco that caused git to be created, the top two OSS projects (by lines of code) using BK were the Kernel and MySQL (the third was a PHP CMS that I was part of at the time). There used to be a OSS projects page with stats and other info, but that seems to be gone.

    2. Re:this is really a story about.. by gmack · · Score: 1

      I'm thinking IBM doesn't use their license anymore. AFIK IBM was only using Bitkeeper for the Linux kernel. Larry made them pay for a license since IBM has it's own competing SCM and the free version banned use by any company that has a competing SCM.

    3. Re:this is really a story about.. by Anonymous Coward · · Score: 0

      Yup, all IBM stuff is RTC w/ Jazz Source Control. I believe RTC has git compatibility as well though, and I imagine the switch will come some day.

    4. Re:this is really a story about.. by Anonymous Coward · · Score: 0

      Larry McVoy is an ass. Not just as bitkeeper, but in general interactions with him over the Ineternet.

    5. Re:this is really a story about.. by Anonymous Coward · · Score: 0

      Some of us remember how Torvalds fucked up and forced bitkeeper down the throats of kernel developers because he determined that it was more important to be expedient than cautious. Then he was expedient again and gave us a CLI that wasn't half as good as hg or bzr.

  12. Help Wanted: Must have 10+ years experience w/ Git by Anonymous Coward · · Score: 1

    I'll update our job posting immediately.

  13. Social coding among programmers by Anonymous Coward · · Score: 1

    Every time I read "social" on an article summary about programming it's like a repelent for reading.

  14. Re:The real story by TheCarp · · Score: 2

    I think you missed the part where one developer reverese engineered how the protocol worked and the developer had enough of a shit fit that it became apparent that continuing to use their software was going to be problematic AND it was already the case that many people didn't want to use it for issues of licensing.

    Even so, nobody is under any obligation to keep using a tool someone else makes, even if they like it. He put in the work. Nobody has some right to have others continue to use a service that they don't need and can handle for themselves.

    --
    "I opened my eyes, and everything went dark again"
  15. Re:Whatever happened to the sexual harrassment chi by MouseTheLuckyDog · · Score: 1

    Her name is Julie Ann Horvath, and she was at github not git.

    She went to a company called &yet and then left a while after apparently to strike out on her own. AFAIKS she doesn't have any clie nts though.

    Make of that what you will.

  16. Re:Should sexist git*hub developers be removed? by Anonymous Coward · · Score: 0

    Only if the developer is a man. His code should not only be removed but he should be physically castrated along with 20 other men chosen at random as punishment for what he did.

  17. Re:The real story by Anonymous Coward · · Score: 3, Informative

    Also, Git is and was an improvement over BitKeeper from a purely technical standpoint. Merging was easier, particularly with file renames. And Git was more performant. Here's a contemporaneous comparison from 2005, only one month after Git was publicly released:

    http://www.selenic.com/pipermail/mercurial/2005-May/000334.html

    BitKeeper sucked compared to both Git and Mercurial at the time. BitKeeper was definitely an improvement when it came out, but it was quickly surpassed by the open source alternatives.

  18. Udacity class on Git and GitHub by myid · · Score: 1

    Udacity has a free class on Git and GitHub. I recommend it. They spend a little too much time on writing a chart that diagrams the different parts of Git, but the class is well-structured and clear.

  19. just wanted to say thank you by rewindustry · · Score: 1

    git is an essential - spent a lot of the later part of my working life trying to build something similar, but linus did it just right.

    there is something about mr torvalds and the way he thinks that we cannot do without.

    he finds methods that actually really work.

    doing software without torvalds would be like riding fish without a bicycle.

  20. Re:The real story by gmack · · Score: 3, Informative

    It's worse than that. Linus would tell everyone not to worry and go on about how Bitkeeper was a great improvement and Larry would prove him wrong by throwing public tantrums and generally playing stupid licensing games. Ex banning IBM from using the free version since they had a competing SCM being built by another (far removed) department. Banning anyone who worked directly on a competing SCM from using Bitkeeper at all. And responding to said developer reverse engineering one of the export interfaces by discontinuing the free version of Bitkeeper.

    The best part of it all was that Linus helped him design the thing in the first place.

  21. Re:The real story by Anonymous Coward · · Score: 0

    So I was using this commercial software for a while, really clever stuff. But since I am moar cleverer I realized I could rewrite the entire thing as open source.

    Ha! Good try, but Linus and Larry came up with the clever stuff together. Larry went too far trying to commercialize that cleverness (way too far).

  22. Git is Shit by KlomDark · · Score: 0

    I tried to give it time. I've used it daily for over a year. Have lost the days work several times with that crap-documented piece of shit.

    A whole year with Linux, and I had it near mastered. A year with git, and it still sucks. Everything's a manual pain in the ass.

    Linus: I ever meet you, I'm going to kiss you for the gift of Linux, then I'm gonna punch you in the mouth for all the time I've wasted on your shitty git thing.

    1. Re:Git is Shit by oobayly · · Score: 1

      To be fair, I remember losing a day's worth of work when I started using CVS. It taught me an important lesson - archive the whole local tree before I try doing something for the first time. I think I thought that I committed all the work successfully, then decided to pull a branch, didn't read the message properly and overwrote all the uncommitted work - fuck me was I pissed off.

      I also set up a couple of test projects when I started using Git, and played around with branching, tagging, merging, etc and testing what would happen when I got merge conflicts.

      Out of interest, what on earth did you do to lose work? Any time I've tried doing something reckless it has given me a big warning saying "I won't do that - you have unstaged files, etc"

  23. Re:The real story by Anonymous Coward · · Score: 0

    he didn't "reverse engineer" anything, he connected to the bitkeeper port and typed "help" and bitkeeper helpfully told him what its commands were. so he used the commands.

  24. Git, designed by by Anonymous Coward · · Score: 0

    a Git, for a Git and used by Gits

    1. Re:Git, designed by by Anonymous Coward · · Score: 0

      ... you do realize that's actually how Linus says he named it, right?

      'Torvalds has quipped about the name git, which is British English slang meaning "unpleasant person". Torvalds said: "I'm an egotistical bastard, and I name all my projects after myself. First 'Linux', now 'git'." The man page describes Git as "the stupid content tracker"'

  25. Command non-orthogonality is its weak point by Traf-O-Data-Hater · · Score: 3, Insightful
    Like others, I both love git and hate it. The bit I dislike the most is the inconsistency in commands and their opposites.
    For instance, it is easy to add files to staging:
    git add .
    Oops! A bunch of other things got added, because I'm a newbie and haven't yet tuned my .gitconfig. Fine, I'm still learning.
    OK, have a guess at undoing it:
    git unadd
    wtf?...nope..
    Frustrating searching to find that git reset is really unadd. Yeah, I could guess that! not.
    And that's the crux of it. Sure you can add git aliases, but an xxx/unxxx pattern could have been built in right from the (ahem) git-go for any sensible command. Git commit/uncommit... merge/unmerge... etc etc.

    And the great thing about git: Linus realised disk space was becoming to cheap to meter. Why bother crunching a delta on something when it was easier to just store compressed blobs. Thus the advantage of simple, fast and cheap (pick any three) branching.

    1. Re:Command non-orthogonality is its weak point by Anonymous Coward · · Score: 0

      use "git gui", with it you can easily add or remove what you want, even parts of a file, and check that everything is ok. You can even easily amend your last commit.
      That and gitk that is great to look at the commits of one or more branches.

  26. Git Internals by Tenebrousedge · · Score: 2

    Why should I have to understand internal data structures in order to use a piece of software?

    Because you're not used to thinking about source code the way Git thinks about source code. Git is very much like a database from a usability standpoint, and you will probably get into bad trouble trying to use either without understanding both the problem that they are trying to solve and the implementation. If you do read about these things, you will understand that git's internals make sense, the decisions it makes are logical, and the user interface is (mostly) transparent and simple. Revisions are harder to manipulate than a Word document, though there are plenty of ways to manage them that are conceptually simpler. Git however was made to manage them efficiently. More specifically, it was designed to be efficient for Linus Torvald's workflow. That happens to be very effective for a large number of other software projects, and no worse than any other solution for many others. There are other workflows for which other RCS systems are better (particularly when working with binary files). If you don't need git's features, by all means use something else. However, your decision to use it or not should probably be informed by knowledge of what exactly it does and why: again, this is no different than choosing a database.

    --
    Those who advocate genocide deserve every protection afforded by law, and none afforded by common human decency.
    1. Re:Git Internals by Guy+Harris · · Score: 1

      Because you're not used to thinking about source code the way Git thinks about source code. Git is very much like a database from a usability standpoint

      That's probably a significant part of the problem. :-)

  27. BitKeeper was fine - Slashdot summary wrong again by Anonymous Coward · · Score: 0

    Actually, BitKeeper met all of the kernel developers needs and did it very well. A political fight broke out because the guys at BitKeeper wanted to actually be able to sell their work. Note that they guaranteed BitKeeper would always be free for Kernel developers. So as usual the Slashdot summary is wrong. They could in fact continue to use BitKeeper just fine.

  28. Re:The real story by Anonymous Coward · · Score: 0

    Git was not a ripoff of BitKeeper.

    It was primarily a ripoff of Monotone.

    Which would be OK if Torvalds wasn't loudly claiming credit for every good idea in it.

  29. Git still uses SHA1 for signed tags by Burz · · Score: 1

    This is a security failing that is hard to overlook for projects with far-flung participants. Any time data is downloaded it could be subjected to MITM attack.

    Core git coders appear oblivious to the problem. Even so, how hard can it be to replace SHA1 with SHA256?

  30. Derp by Anonymous Coward · · Score: 0

    Loonix toreballs. Silly cult members.

  31. Git is its own worst enemy by Foresto · · Score: 3, Insightful

    Git is its own worst enemy

    Sigh... Git. Ten years later, and it's still making people suffer with its unforgivably awful user interface. Seriously. I like the command line, and git is my primary version control system, but git's UI is the single most user-hostile example of human-computer interaction that I have had the misfortune to encounter in years. Maybe decades.

    Git's command structure is a train wreck of inconsistencies, some of its most important terminology is worse than worthless, and its man pages and built-in help text are idiotically obtuse. I have been following its development closely enough to understand how it got this way. A lot of it has to do with placeholder terms that were never updated, synonyms that were never reconciled, features that were grafted onto existing commands and never properly organized, and its origin as a set of low-level components rather than a tool intended for humans. In other words, a pattern of evolution much like any other software, except for one thing: Even after years of being relatively stable, its mantainers still haven't addressed its glaring usability problems.

    These aren't just minor warts that only affect a few people, either. There are countless articles, blog posts, and forum threads expressing frustration with git and detailing specific improvements that could transform it from a usability nightmare to an elegant piece of work. Sadly, the maintainers either ignore them or respond with some half-witted reason to resist change. Frankly, I am embarrassed to see my fellow software developers failing so miserably to recognize the importance of usability, and failing to fix it.

    What is the cache? It's a place where you're expected to manually arrange your data before you commit it. Does it function like a person would expect a cache to function? No, but we call it that anyway. What is the index? It's the same thing. Does it function like a person would expect an index to function? No, but we call it that anyway. You're referring to the same thing in both cases? Yes, for the most part. Does it function like anything that might be familiar to anyone? Yes, it's essentially a staging area. Why don't you call it a staging area? We do, but only in the minority of cases. You mean you have three names for the same thing, and the most accurate name is the one that you use the least? Yes. Why? Because the meaningful name might be harder to translate into other languages. So you deliberately use a confusing variety of misleading names when writing in English, the single most widely used language in computer science, because one of your translators didn't want to describe a staging area in another language? Yes. Well, that's probably okay, because this thing is probably some obscure piece of git that most people don't have to use, right? No, it's actually one of git's most distinguishing features, and interacting with it is absolutely required in order to use git. I see.

    Newcomers shouldn't have to be encouraged to "take the time to learn git." It should be easy. A programmer familiar with version control systems should be able to pick up a new one in five minutes, and find the answer to most intermediate-to-advanced problems in maybe ten or fifteen. They should be able to walk away for a month or two, come back, and still remember how to use it. That doesn't generally happen with git. One has to invest quite a bit of time and patience to confidently use anything beyond its most basic operations without screwing something up, and stay in practice with it, or else end up having to learn most of it all over again.

    The ridiculous thing is that it doesn't have to be this way. Mercurial is real-world proof of that.

    I hate git for these reasons. It's a cantankerous bastard of a tool that will just as soon kneecap you as handle your data. I only use it because of github (which is brilliant, by the way.) If you want to see an example of how version control should be done, get to know mercurial. Its internal de

    1. Re:Git is its own worst enemy by Foresto · · Score: 1

      To anyone curious about Mercurial enough to try it, keep in mind that what git calls a "branch" is called a "bookmark" in mercurial, because "branch" has a more traditional meaning over there.

  32. a "branch" is just a name pointing to a commit by Chirs · · Score: 1

    In git a "branch" is literally a mapping between a name and the commit ID of the commit at the head of the branch. If you've merged your commit into the main development trunk (submitting the bugfix) there is essentially zero overhead to keeping the branch around in your repository.

    Some CI systems have a mechanism where you create what you think will be the fix, then push it up to a common area for testing, review, etc. Then you respin your fix based on feedback, send it back in. Rinse, wash, repeat until everyone is satisfied, then merge for real. In that sort of environment it can be handy to have one local branch per bug that you're working on.

    So one branch per bug you're working on, one branch per feature you're working on, one branch per released version, etc. I just checked and one local git repo I'm working on is sitting at around 40 local branches currently.

  33. I prefer continuous trunk... by Chirs · · Score: 1

    I prefer the model where the "master" branch is the continuous trunk of development. When you want to release, you branch off for that release.

    Functionally equivalent, but has the nice property that most stuff goes into "master" and only bugfixes/backports or special-case stuff goes onto the release branch.

  34. I prefer separate pull/rebase steps by Chirs · · Score: 1

    I *never* do development on an upstream branch. So instead of the above I would always checkout the local "master" branch, do a "git pull", then checkout my development branch and rebase my work on top of the latest local "master" branch.

    The nice thing about this is that the local "master" branch is always identical to some version of the upstream "master" branch, I never need to worry about it getting polluted with my development work.

  35. "don't use rebase" only applies in some cases by Chirs · · Score: 1

    The rule against using rebase really only applies if you are publishing your git repo (and specifically the branch in question) to other people.

    The reason for the rule is that if you rebase your changes on top of the latest upstream, anyone pulling in your branch is then forced to rebase as well since you've essentially rewritten history. (Doing a rebase changes the hashes on all your local commits.) If you instead merge upstream work onto your local branch then your history is preserved and everyone downstream from you can also just do a merge.

    However, for any development branch that you are not exporting to other people, "git rebase" is a very useful tool to keep your own development at the tip of your local development branch. When other people push changes you can pull them in and rebase your work on top of theirs.

  36. Re:BitKeeper was fine - Slashdot summary wrong aga by Anonymous Coward · · Score: 2, Informative

    Note that they guaranteed BitKeeper would always be free for Kernel developers. So as usual the Slashdot summary is wrong. They could in fact continue to use BitKeeper just fine.

    That's not correct. McVoy pulled the free-licensed version of BitKeeper (which Linus and OSDL were using) because of Tridge's work on a compatible client, and refused to sell a BK license to OSDL because they had allegedly broken the terms of the free license. This despite the fact that Tridge was an OSDL contractor, not an employee, was working on an unrelated project, and never used the BK client itself to do his work.

    Effectively, Linus and a bunch of other kernel devs would have had to quit OSDL (possibly forking Linux) to keep using BK.

  37. git: the pros outweigh the cons by Anonymous Coward · · Score: 0

    There's a lot of up-voted git hate here. But I think this dislike isn't put into the right perspective. Yes, git is more complex than Subversion (for example). But, the expressive power granted by that complexity is worth far more to the developer than the cost to learn it. Here is a sample of things I do daily with git, that were either impractical or impossible using previous generation VCS'es like Subversion:

    1. While working on one logical coding task, I'll often find an unrelated problem to fix. No problem, selectively commit the unrelated portion using git add -p then git commit.

    2. I commit very often, usually many times per day. When I've added the feature or fixed the defect, tested it, and it is ready for use by others, I curate these 'piecemeal' commits -- using git rebase and friends -- into a logical sequence of changes that are then pushed to the shared repository. I get the best of both worlds -- very granular access to local changes in situ, then readable, complete and comprehensible commits pushed to the development team.

    3. Larger structural code changes are hard to do, but git helps. Keep a long running topic branch 'close' to mainline development by frequently merging mainline into the topic branch. This avoids that huge merge commit hairball when integrating the long running topic branch back to mainline.

    4. git rebase and friends are incredibly powerful if used correctly. Don't use them to change history but to create it. With these tools, re-organize a stream of frequent local commits into a small set of logical and comprehensive commits that achieve the end result. These curated commits are pushed as part of the unchanging project history.

    5. Git makes it much easier to work on multiple tasks at the same time. Each logical task gets a local topic branch. Easy and fast switch between with git checkout.

    6. Almost all of my development is remote. Git is a pleasure compared to Subversion in this case, because a full local clone means few commands have to actually contact the distant server.

    7. Use a shared repository as a backup target for local branches. We use username/ prefixes for server branches that act as backups for developers' long-running topic branches, usually any that will last for more than a day. These are not project history and end up getting removed when the topic branches are ultimately merged into mainline.

    8. When curating a topic branch and/or when merging it to mainline, merge/rebase conflicts will occasionally happen. I use vim with Tim Pope's fugitive plugin, which makes fast work of conflicts by combining vim's powerful diff mode with fugitive's git awareness. vimcasts.org has a couple of excellent video tutorials of using fugitive -- worth checking out for vim+git users.

    I could perform all of the above tasks using Subversion, but it would take other tools and/or more time on my part. Git is tougher to get to know, but you only need to understand a portion of its interface to quickly access a significant amount of productivity enhancing capabilities.