- Copy a repository to your local machine with
git clone
- List remotes with
git remote
- Duplicate other organizations' repositories into your own via GitHub with the "Fork" button
Git repositories let us create logged histories of the versions of the files we "track." Just think, right now, around the world people are using Git to track their projects: Star Trek Fan Fiction, resumes, Ruby Code, JavaScript code, PhD theses, etc.
Git not only lets you track files in a local repo on your machine, you can "share" your repo on the internet so that others can use your code. In this lesson we'll discuss how to get others' repositories.
In a later lesson we'll cover how to push our locally-created repositories onto the internet so that others can see our projects.
We use git clone
to copy someone else's repo from the internet to our local machine.
We are not getting their repo from their local machine (that would be very creepy).
Instead, they must have already "mirrored" their local repository onto the internet. In Git-speak we'd say they would have had to have created a remote repository: a copy of their local repository, but on the internet. We'll be cloning that remote repository.
Let's get the code for the popular ReactJS framework.
-
Navigate to the https://github.com/facebook/react repository.
-
Click the green "Code" button on the right.
-
Make sure you select
Use SSH
as your URL type. -
Click the "Copy to clipboard" button (highlighted below). This will copy the URL for us to use when we clone.
-
In the terminal, run the
git clone
command. It takes the URL we just copied as an argument, like so:
$ git clone your-copied-github-url
This will create a local copy of the GitHub repository on our own machine.
If you use the ls
command, you'll see Git created a directory called
react
. Use cd
to enter that directory.
$ cd react
Type git remote
to see the names of each remote repository (or, "remote") available.
Since you cloned your repository, you should see a remote name called origin
. The remote
name origin
is the default name Git gives to the remote you cloned from:
$ git remote
origin
Let's prove that the origin
name has some relationship to the address GitHub gave us.
$ git remote show origin
* remote origin
Fetch URL: git@github.com:facebook/react.git
The "remote address" git@github.com:facebook/react.git
assigned to the
"remote name" - origin
- is the same thing you copied from the
GitHub web interface. This confirms that the remote repository you
cloned automatically set up a remote name called origin
.
Forking a GitHub repository is just a way to create a personal, online duplicate of it. When you fork a repository, GitHub creates a duplicate of that repository under your control.
If my GitHub username were octocat
and I "forked" facebook/react
, GitHub would
copy the remote repository facebook/react
and create it under my name as
octocat/react
. It's making a copy of one remote repository to a new remote
repository.
It's like saying "Hey, can I have the Louvre's version of The Mona Lisa?" The
Louvre would say, "No." If you were to create a perfect online duplicate by forking
it from louvre/mona_lisa
to your-name/mona_lisa
, and then were to clone
from that remote repository, then the Louvre can keep their copy and you can
update your copy as you choose.
Let's try a fork and clone workflow.
Click the GitHub Octocat icon at the top of this page:
This will bring you to the "learn-co-curriculum" version of this lesson. Click the 'Fork' button in the upper right corner of the page. You will be prompted to choose where the repository should be forked to, so go ahead and choose your account. GitHub will take a few moments to create the fork, then navigate to your copy of the repository.
If all has gone well, you will see your username at
the top of the page, followed by a /
and the name of the repository, along
with a link just below to the original repository. (More on forking in the GitHub docs.)
The important take away is to not misuse the words "fork" and "clone" when speaking
with other Git users. To get a local copy: clone; to make an online copy of
a repository to your personal organization so that you have the ability to
update its master
(or main
) branch, fork.
All Software Engineering lessons in Canvas will have an Octocat icon linking to a repository of that lesson. Using the process discussed in this lesson, you can fork any lesson you'd like.
For assignments in Canvas, you will also see an additional Fork button beside the Octocat
We encourage you to use this button when you see it to start the forking process. During this phase of the course, the Fork button in Canvas will do the same thing as clicking GitHub's Fork button. Later on in the course, the Canvas Fork button will behave differently as some assignment steps will be automated.
GitHub gives developers many ways to collaborate. Using GitHub's "Fork" button and git clone
together allows you to make copies of others' code.
Often, the original authors will include license information regarding how you can use their repository, so make sure to check before you publish, sell or distribute any material you've forked, cloned and modified.