1 00:00:00,170 --> 00:00:02,630 >> And I thought that the best way to break the ice on version 2 00:00:02,630 --> 00:00:04,970 control systems and Git and some other 3 00:00:04,970 --> 00:00:07,939 related concepts was to interview John Britton who 4 00:00:07,939 --> 00:00:11,840 works with GitHub. So let's go and see what John has to say about 5 00:00:11,840 --> 00:00:14,120 Git, about version control systems in general, 6 00:00:14,120 --> 00:00:17,809 and about GitHub. John is in Tapei, if I'm not wrong. 7 00:00:17,809 --> 00:00:18,610 >> That's correct. 8 00:00:18,610 --> 00:00:20,320 >> Okay so we're, you know we couldn't 9 00:00:20,320 --> 00:00:22,570 go there so we're interviewing him remotely. And I 10 00:00:22,570 --> 00:00:25,490 want, I just want to thank you so much and John for agreeing to talk to us. 11 00:00:25,490 --> 00:00:27,940 >> Thank you very much for having me it was my pleasure. 12 00:00:27,940 --> 00:00:30,560 >> And, I'm just going to ask, a few 13 00:00:30,560 --> 00:00:32,938 general questions because John is an expert on, 14 00:00:32,938 --> 00:00:36,270 Git and GitHub. John is a developer and 15 00:00:36,270 --> 00:00:38,550 a community builder is active in both the 16 00:00:38,550 --> 00:00:42,200 open source and the open education areas. And 17 00:00:42,200 --> 00:00:44,860 as an educational liaison we have, is working 18 00:00:44,860 --> 00:00:47,580 to improve Computer Science education by bringing the 19 00:00:47,580 --> 00:00:51,460 principles of open source into the classroom. And 20 00:00:51,460 --> 00:00:53,160 I'm going to start with an general question, 21 00:00:53,160 --> 00:00:55,320 which is what is a version control system? 22 00:00:55,320 --> 00:00:57,960 >> So, a version control system is 23 00:00:57,960 --> 00:01:00,360 a tool that software developers use. Anybody 24 00:01:00,360 --> 00:01:02,560 who's doing you know, working with digital 25 00:01:02,560 --> 00:01:06,540 assets, digital projects can also use for 26 00:01:06,540 --> 00:01:11,320 keeping track of, you know, revisions of your project, and when I say revisions, I 27 00:01:11,320 --> 00:01:16,850 mean essentially snapshots of your project over time. So you can imagine doing 28 00:01:16,850 --> 00:01:19,720 some work and then every so often, be it, every couple of 29 00:01:19,720 --> 00:01:23,799 hours, every couple of days, saving a permanent snapshot of your project. 30 00:01:24,880 --> 00:01:26,650 >> Why is this useful? I understand that 31 00:01:26,650 --> 00:01:28,720 it is nice to take a snapshot of your 32 00:01:28,720 --> 00:01:30,070 project, but what did you do with the 33 00:01:30,070 --> 00:01:33,420 snapshot afterwards? I think the most immediately obvious benefit 34 00:01:33,420 --> 00:01:36,340 to having snapshots of your project to keeping 35 00:01:36,340 --> 00:01:38,280 revisions is that you can go back. If you 36 00:01:38,280 --> 00:01:40,190 have ever worked on a project and got to 37 00:01:40,190 --> 00:01:41,940 a point where you solved a bunch of your 38 00:01:41,940 --> 00:01:45,330 problems, and there is just one more step to do. And 39 00:01:45,330 --> 00:01:47,640 you start working on trying to solve that last step, and 40 00:01:47,640 --> 00:01:51,350 you break things, you make it worse then it was an 41 00:01:51,350 --> 00:01:54,420 hour ago. At that point its easier to just go back 42 00:01:54,420 --> 00:01:56,780 to what you had then trying to figure out what you 43 00:01:56,780 --> 00:01:59,320 broke. So you can always go back in time, and the 44 00:01:59,320 --> 00:02:02,660 other big one is being able to collaborate with multiple people, 45 00:02:02,660 --> 00:02:07,450 so its pretty seldom these days that you. Work on a production 46 00:02:07,450 --> 00:02:09,860 totally on your own. It's most common to work in, you 47 00:02:09,860 --> 00:02:12,993 know, in teams and small groups. And so, using a revision 48 00:02:12,993 --> 00:02:16,340 control system allows you to collaborate with other people. And make 49 00:02:16,340 --> 00:02:19,060 sure that you don't step on each other's toes as you're working. 50 00:02:19,060 --> 00:02:21,310 >> Alright, that's great, because those are exactly some of the 51 00:02:21,310 --> 00:02:25,250 topics that we're going to cover in the lesson. And so since we're 52 00:02:25,250 --> 00:02:28,470 going to talk about the specifics of version control system which is 53 00:02:28,470 --> 00:02:32,660 Git and you're definitely an expert in, in Git. So what would 54 00:02:32,660 --> 00:02:36,510 you say is specifically special about Git? What characterizes it 55 00:02:36,510 --> 00:02:39,940 and how does it compare to other version control systems. 56 00:02:39,940 --> 00:02:43,140 >> So if any of you have used version control systems before, you 57 00:02:43,140 --> 00:02:47,850 may have heard of something like subversion, CVS, or maybe a commercial solution 58 00:02:47,850 --> 00:02:53,550 like ProForce. I think the main important characteristics of Git are first that 59 00:02:53,550 --> 00:02:56,050 it's open source. And the second, 60 00:02:56,050 --> 00:02:59,030 that it's a distributed version control system. 61 00:02:59,030 --> 00:03:00,430 So what that means, the distributed version 62 00:03:00,430 --> 00:03:04,260 control system is essentially a system for tracking 63 00:03:04,260 --> 00:03:07,700 revisions of your software that doesn't have any 64 00:03:07,700 --> 00:03:11,730 central repository. So the biggest characteristic is that 65 00:03:11,730 --> 00:03:14,520 I can do my work and you can also work on the same project at 66 00:03:14,520 --> 00:03:16,900 the same time without communicating with each other 67 00:03:16,900 --> 00:03:19,650 and without communicating to a central system. 68 00:03:19,650 --> 00:03:24,190 >> Okay, great. And so now that we saw what Git is, what is 69 00:03:24,190 --> 00:03:26,050 GitHub and how does it fit into 70 00:03:26,050 --> 00:03:29,320 this picture of the distributed, revision control system? 71 00:03:29,320 --> 00:03:34,800 >> So GitHub is, the world's largest code host, and we essentially have a 72 00:03:34,800 --> 00:03:36,940 website where you can collaborate with people 73 00:03:36,940 --> 00:03:39,950 when you're writing code. There's two ways you 74 00:03:39,950 --> 00:03:43,650 can use GitHub. You can use it publicly for open source and you can use 75 00:03:43,650 --> 00:03:49,660 it in private within your team, or your company, or within your class. And, Git 76 00:03:49,660 --> 00:03:53,960 Hub started out just as a way to host your Git repositories. But it's 77 00:03:53,960 --> 00:03:56,000 actually grown into quite a bit more. It's 78 00:03:56,000 --> 00:03:59,820 an entire collaboration system around your code. 79 00:03:59,820 --> 00:04:00,580 >> How many users do you have? 80 00:04:00,580 --> 00:04:03,620 >> I would say that we're approaching five million. 81 00:04:03,620 --> 00:04:05,570 I don't know the exact number. We're definitely more 82 00:04:05,570 --> 00:04:08,080 than four million right now. But yeah, I'd say 83 00:04:08,080 --> 00:04:10,330 somewhere, somewhere close to between four and five million. 84 00:04:10,330 --> 00:04:14,750 >> So that's a lot space I'd guess. Terabytes of disk 85 00:04:14,750 --> 00:04:15,840 space, I would imagine. 86 00:04:15,840 --> 00:04:19,170 >> There are a lot of GIT repositories on, on our servers. 87 00:04:19,170 --> 00:04:21,180 >> Something else you want to say? I 88 00:04:21,180 --> 00:04:23,920 guess that the when taking about GitHub there's one 89 00:04:23,920 --> 00:04:26,110 thing that you kind of can't leave out and 90 00:04:26,110 --> 00:04:28,670 that's that's a feature that's called a pull request. 91 00:04:28,670 --> 00:04:31,090 So when you're using GitHub, you can share 92 00:04:31,090 --> 00:04:34,940 your Git repository, do some work, and actually do 93 00:04:34,940 --> 00:04:37,880 do a code review. Of proposed changes which 94 00:04:37,880 --> 00:04:39,770 is what we call a pull request on github.com. 95 00:04:39,770 --> 00:04:42,790 Essentially what it lets you do is have a discussion 96 00:04:42,790 --> 00:04:46,320 about a set of proposed changes and leave feedback in 97 00:04:46,320 --> 00:04:48,870 line with the code. You could say for example, this 98 00:04:48,870 --> 00:04:51,670 method needs to be re-factored or I think I found if 99 00:04:51,670 --> 00:04:54,830 off by one error here, just different kinds of feedback 100 00:04:54,830 --> 00:04:59,120 so that before you totally integrate some proposed changes. You have, 101 00:04:59,120 --> 00:05:01,180 kind of a conversation about what your code. And I 102 00:05:01,180 --> 00:05:03,050 think that's really valuable when you are working in a team. 103 00:05:03,050 --> 00:05:05,510 >> Thank you, John, that was very informative and 104 00:05:05,510 --> 00:05:07,440 thanks again for taking the time to talk to us. 105 00:05:07,440 --> 00:05:10,160 >> No problem, thanks for having me. I'll talk to you soon. 106 00:05:10,160 --> 00:05:13,990 >> Let's thank again John for enlightening us 107 00:05:13,990 --> 00:05:17,350 on some aspects of version control systems, Git and 108 00:05:17,350 --> 00:05:19,410 GitHub. And now, let's go over some of the 109 00:05:19,410 --> 00:05:21,650 topics that we discussed with John to recap them.