So in the last few lessons, we looked at implementing source control locally using the command line, as 1
well as using Xcode and, also, remotely using GitHub. 2
So, now I want to take you a little bit further and I want to talk about collaboration using remote repositories 3
and GitHub, because this is one of the best ways to start working in a team of programmers and to contribute 4
your skills to open source projects. 5
So we've seen all of these four areas: the working directory, the staging area, the local repository, as 6
well as the remote repository. 7
And you should be pretty familiar with all four of these areas by now. 8
Now, in the next scenario, let's shift over to just look at the local and remote repository that you own. 9
So let's say that Angela, 10
so myself, I own this repository. I created it locally, and then I pushed it to my remote repository on 11
GitHub. 12
Now, let's say that I have an evil twin who's called, 13
I don't know, Bad-ngela. That's a terrible name. 14
Let's say that she also wanted to make changes to my repository. 15
She's looking at my code base and, you know, she wants to add some features or fix some bugs or do something. 16
Now, because I own this remote repository over here, in order for her to work on it, she could make a copy 17
of it that exists on her GitHub account. 18
So remember, this is different from git clone. Git clone is just grabbing the entirety of the repository, 19
and then cloning it to your local work environment. 20
Now, in this case, we're basically just copying a repository that's hosted on GitHub and we're keeping 21
the copy under our own GitHub account where we can make changes to it. 22
So this in terms of GitHub lingo is called forking. 23
Now, once you fork a remote repository, then you now own it. You have full permissions to do whatever 24
it is that you like with this copy of the repository. 25
Because as you can imagine, it would be pretty crazy if everybody could modify your source code on all 26
of your open source repositories because, you know, it would lead to, maybe, amateurs changing all sorts 27
of things that you don't want them to or, you know, people making features that are incompatible with 28
what you've got already. 29
Basically, you would only give people who you have a trusting relationship with, write access to your 30
remote repository. 31
So, say, if you work within a team and you're all working on a product, then everybody in the team probably 32
has both read and write permissions on a single remote repository. And that way, they can git clone and 33
work on it locally, and then push it and resolve any sort of conflicts that way. 34
But you don't want anybody on the internet having those kind of permissions. 35
So how do you implement this kind of open source collaboration then? 36
Well, it's through forking and making pull requests. 37
So, now let's say that evil Angela, Bad-ngela has forked my repository. 38
So on her GitHub account, she now owns a copy of my repository. 39
And from this point, she can then clone that repository to work on it locally. 40
And if she decides to add some features to it, maybe, you know, improve the codebase or add some more code, 41
or do something crazy, or whatever it is that she wants, 42
then after she's happy with that and she's committed those changes, then she can push it to her remote 43
repository. And then if she wants me or good Angela to incorporate those changes that she made, then her 44
only option is to make a pull request if she is not within that trusted pool of people who all have 45
read and write access to my remote repository. 46
So, say, if she only has read access, then she would have to make a pull request. And it's almost like making 47
a suggestion. 48
"Here are some suggested changes 49
that I've been working on. 50
What do you think about it? if you okay it, then please, you know, merge it to your remote repository." 51
So the reason why it's called a pull request and not a push request is because the person who has the 52
write permission to the repository, 53
so I have write permission to my own remote repository which has been forked and duplicated by, you know, 54
my evil twin. 55
If she wants to incorporate those changes, then I have the deciding vote. 56
So I can review those changes and I can pull the changes over. 57
So it's not a push because you don't own the rights to the remote repository that you're trying to push 58
to. 59
In this case, if I decide after code review that, actually, those features actually added were pretty great, 60
and it seems compatible with my code so far and doesn't break anything, then I would approve the pull 61
request and merge her repository with my own. 62
So the changes will be reflected in a new commit. 63
So let's take a look at this in action. 64
So here, we've got our original story repository. 65
So this is a remote repository, remember, because it's hosted online on GitHub, and we've got a number 66
of commits and we've been doing some modifications and writing to write our storyline. 67
Now, I'm going to log out of my account. 68
So that was the account that created the story. 69
And then I'm going to sign in using a different account. 70
So right now, I'm signed into a different GitHub account. 71
This account is named gilfoyleismyothername. 72
And now I'm going to search for that repository. 73
So I found the story repository by the user angelabauer. 74
So that was the one that we saw earlier on. 75
So I'm going to go into this repository and you can see that all of these lines and files are publicly 76
visible and you can read through all of it, even though you are now not signed in to the account that 77
created this repository. 78
So from here, what I'm going to do is I'm going to fork this repository. 79
So as we mentioned before, forking is simply making a copy or a duplicate of a remote repository and 80
putting it under your own GitHub account. So you can see this user that I've created is called 81
gilfoyleismyothername. 82
And now I have this repository under my own username, so I've made a copy of it, and you can see it's 83
exactly the same as before. 84
Everything's been copied over including all of the previous commits that were made. 85
So, now from here, I'm going to-- 86
So from here, I'm going to make some changes. 87
So let's maybe change one of these storylines. So let's change chapter. 88
So let's say that this other user, this other person, has some suggested improvements to my code. 89
or in this case, to my writing. They're still keeping the spirit of the original repository alive because 90
we are now converting into a space theme or an alien theme. 91
So I've made my changes to chapter4 and I'm going to commit those changes saying, "Add more space themes 92
to chapter 4." 93
So that's what I did, and I'm going to commit to the mast a branch. 94
This is the master branch of my own forked copy of the story repository. 95
So once I commit those changes, then we can view what it currently looks like under the graphs. 96
So if we have a look at the network, you can see that this is the point where I forked the story repository. 97
That commit 98
was created by Angela Yu which, basically, merged this branch to the master branch. 99
So we did that two lessons back if you remember. 100
So the latest commit though is made by this current user, gilfoyleismyothername. 101
And you can see that I've added it to the master branch of my forked copy of that repository. 102
So, say, if I now open up a Incognito window and I log back in to the Angela account, and go over to that 103
story repository, you can see that if I have a look inside my graphs, go into Network, that that latest 104
change, it's not reflected on my master branch. 105
It's showing up as a separate branch made by gilfoyleismyothername. 106
And you can see the members who have forked your repository. 107
So this is a great way of collaborating because you can have contributors make edits or add new features 108
to your preexisting codebase or repository. 109
And now what I can do if I head back to the Gilfoyle account, so I'm just going to flip through these 110
two so that you can see, right now I'm inside the Gilfoyle account and this is the Angela Bauer account. 111
So, now under the Gilfoyle account, what I can do is I can make a pull request. So we can do that 112
here. 113
And you can see that it's able to merge. 114
And these are the changes, 115
so swapping that word for that word, swapping that word for that phrase. 116
So, now all I have to do is hit create pull request and tell the original author, which is Angela Bauer, 117
what I've done, why I think my modifications or my features are worthy to be merged with the original 118
repository, 119
and, you know, any other notes, 120
right? 121
Any other comments that I have. 122
Let's just say-- 123
Always helps to give complimentary. 124
So, now let's go ahead and create a pull request. 125
So the pull request is done. 126
But if we have a look back into the story repository, you can see that those changes are not made, right? 127
It's because I don't own this repository. 128
I don't have write access. 129
I only have read access as a member of the general public and not a member of the trusted inner circle. 130
So I can only suggest my changes. 131
Now, if we head over back to the Angela Bauer account, who owns this repository, 132
now if I have a look under pull requests, I've got a brand-new pull request, right? 133
So it previously was zero, 134
but now I have one, and it's showing as one open pull request. And this is added a minute ago by Gilfoyle. 135
And if I look at it, I can see why he thinks that this modification is necessary and what were his commit 136
message, 137
and I can also take a look at the commits that he made and compare the differences. 138
So review those changes. 139
So I could say something like, 140
"Great job. 141
"Great job, 142
Gilfoyle." And I can submit this feedback to Gilfoyle and approve merging these changes. 143
So, now all I have to do is hit merge pull request, and maybe add a "Merged from Gilfoyle's modifications 144
to chapter 4." 145
Okay, so let's go ahead and confirm the merge. 146
And now you can see that that commit is added to Angela Bauer master. 147
So if I have a look inside my graphs 148
now, 149
you can see that the latest commit was my merge and it was--and you can see where it came from. It came 150
from a fork made by Gilfoyle which shows up as a separate branch, and then it got merged back into the 151
main branch of the main repository. 152
So some people use GitHub purely as version control for their own projects and use some of the features 153
that we discussed in previous lessons. 154
But there's also a huge community of awesome coders on here who have created really brilliant projects. 155
And if you can see ways of improving it or contributing to it, then it's a great way of starting to 156
learn how to work in a team of programmers which is a really essential skill when you're working for 157
a startup or for a company. 158
So for example, if we have a look at the Alamofire repository which is something that we've been using 159
for quite a while, if you have a look at the contributions, you can see that there have been loads and 160
loads of other users who have looked at the code and done things, you know, or made suggestions, and to 161
steadily improve this framework that, you know, everybody else is benefiting off, 162
right? 163
You can see that a total of four4,300 forks have been made, and there's currently 4 164
open pull requests, but 559 pull requests were closed. 165
So let's have a look. 166
So, for example, in this case, this guy updated the README to the current version, 167
so that's obviously just editing a text file, 168
and that's pretty much within anybody's capabilities, right? 169
And then, it got merged by somebody who owned this repository. 170
And you know they gave them a bit of feedback, right? 171
But there's other things like, you know, code additions or code deletions, or modifications that people 172
have made. 173
So this guy made some fixes and, you know, he's documented what were the goals, what were the implementation 174
details, 175
what were the tests that he performed. 176
And then the guy who owned the repository said, "Hey, just, you know, maybe one thing that you need to change, 177
have a look in here." 178
And then once it was changed, then it was approved and merged with the master branch. 179
So have a look around on GitHub and see what are some of the cool projects that you could maybe get 180
involved in. 181
So to begin with, you know, some of these things that we've been using, for example, ProgressHUD, 182
right? 183
We've been using inside Quizzler. 184
You can actually have a look inside the code files and see, you know, what are the things that you would 185
change about it, 186
obviously, ProgressHUD is written in Objective-C, maybe choose one that is written in Swift. But have 187
a look at the libraries that you've been using, 188
and if you want, 189
you can build on top of it, either for your own goals and purposes. But also, you know, if you're building 190
on top of somebody else's open source code, then it's a nice thing to contribute back to the open source 191
world by forking and making a pull request to offer your improvements or bug fixes, or new features. 192
So as I said, it's almost like a social network for programmers and you can make a lot of great friends 193
on here, and you can also get a lot of help on here in your development journey. 194
So the last thing that I wanted to say was that in this module, I've mentioned a lot of different 195
GitHub or Git commands and it can be quite difficult to remember all of it just by watching these videos 196
once. 197
So remember, you always have these videos, so you can always come back and listen to my terrible 198
jokes, 199
but also the information again. 200
So you can always rewatch it and refresh yourself. 201
But I've actually made a PDF Cheat Sheet of some of the most common Git and GitHub commands that you'll 202
be using. 203
And I've laid it all out in terms of arrows that we've explained before so that you'll know what I'm 204
talking about, and you can download this PDF inside this lesson. 205
So I hope you enjoyed all of that and I will see you on the next lesson.