DEV Community

Cover image for Working with GitHub Repositories
Erika Heidi
Erika Heidi

Posted on

Working with GitHub Repositories

In a previous part of this series, you saw how to create a new GitHub account and how to customize your profile by committing a README file into a special repository. We did all this through GitHub’s web interface. In this guide, you’ll learn how to work with GitHub repositories by pulling this special repository to your local machine, making changes to your README, and pushing the changes back to GitHub.

Creating a New SSH Key

For increased security when working with remote Git repositories, it is recommended to set up an SSH key for communicating with GitHub. If you already have an SSH key set up for your current system user, you can skip to the next step.

You can create a new SSH key by running the following command on your terminal, replacing “your_email@example.com” with your actual email address:

ssh-keygen -t ed25519 -C "your_email@example.com"
Enter fullscreen mode Exit fullscreen mode

You will be prompted to provide the location to save your key, and a passphrase. You can use the default location ~/.ssh/id_ed25519. The passphrase is like a password that adds increased security to your key, so it’s not recommended to leave it blank. You will be prompted to provide this passphrase from time to time to unlock your SSH key.

You can verify that the key was created by looking at your .ssh directory:

ls -la ~/.ssh
Enter fullscreen mode Exit fullscreen mode
-rw-------  1 erika erika  464 Sep 23 19:48 id_ed25519
-rw-r--r--  1 erika erika  102 Sep 23 19:48 id_ed25519.pub
Enter fullscreen mode Exit fullscreen mode

The id_ed25519.pub file is the public portion of your SSH key. You’ll use the content of this file to set up your SSH key within GitHub. The id_ed25519 file without extension is the private portion of your SSH key, and should never be shared.

Adding an SSH Key to your GitHub Account

To add your SSH key to your GitHub account, access the menu “SSH and GPG Keys” under your Settings.

Accessing your SSH and GPG Keys on GitHub

Click on the “New SSH Key” button. On the screen that appears, you’ll be asked to provide a title for your key, and the public key contents. Leave the key type as “Authentication Key”. If you created your SSH key following the instructions on this guide, this is how you can obtain the contents of the public key:

cat ~/.ssh/id_ed25519.pub
Enter fullscreen mode Exit fullscreen mode

Copy the full output to the “Key” field.

Adding a new SSH key to GitHub

Click on the “Add SSH Key” to confirm.

With the key added, you are now ready to pull repositories from GitHub via SSH.

Cloning a GitHub Repository

You’ll now pull your special GitHub repository to your local system, so that you’re able to edit your README offline. Access your GitHub profile and go to your special repository. You can also access your repo directly with the address https://github.com/your-github-username/your-github-username.

Click on the green “Code” button, then click on the “SSH” tab under “Clone”. Copy the URL that starts with git@ in the text box.

Obtaining the URL of a repository in order to clone it locally

Then, go to your terminal to clone the repository to your local machine:

git clone git@github.com:boredcatmom/boredcatmom.git
Enter fullscreen mode Exit fullscreen mode

You may be prompted to provide your SSH key passphrase. You should get output similar to this:

Cloning into 'boredcatmom'...
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0)
Receiving objects: 100% (3/3), done.
Enter fullscreen mode Exit fullscreen mode

You can now access your repository files directly from a text or code editor or from your terminal.

ls boredcatmom
README.md
Enter fullscreen mode Exit fullscreen mode

Committing and Pushing your Changes

After making the changes you want in your README.md file, it is time to commit your changes and push them back to the remote repository. Let’s review the Git workflow with this image:

The Git Workflow

This will be similar to what we did in the first article in this series, when we initiated an empty Git repository and committed a file to it. To see the current repository status, run:

git status
Enter fullscreen mode Exit fullscreen mode

This should indicate that the README.md file was modified, but its not yet staged for commit. To add the file to the commit stage, run:

git add README.md
Enter fullscreen mode Exit fullscreen mode

Then, commit your changes with:

git commit -m "updating readme"
Enter fullscreen mode Exit fullscreen mode

Now you can finally push your commit to the remote repository:

git push origin main
Enter fullscreen mode Exit fullscreen mode

Again, you may be prompted to provide the passphrase to your SSH keypair. You should get output similar to this:

Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 8 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 1.36 KiB | 1.36 MiB/s, done.
Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
To github.com:boredcatmom/boredcatmom.git
   691417c..26edb28  main -> main
Enter fullscreen mode Exit fullscreen mode

Now, if you reload your GitHub profile, it should reflect the changes made to the README file.

Congratulations! You made your first push. Now you know how to clone a repository, make changes, and send them back to the remote repository.

Creating new Repositories and Connecting Existing Repositories to GitHub

Remember the testgit local repository from the first part of this series? That repository was not connected with any remote repo, so there was nowhere to push. Now that you have your GitHub account set up, you can create an empty repository and connect it with your local testgit repo. Instead of cloning the remote repo locally, you’ll configure your existing local repository to use the GitHub remote repo as upstream. In the context of Git and GitHub, "upstream" or “origin” refers to the original or main repository from which your local repository was created, and where changes should be sent. That’s why we run git push origin main when we want to push changes to the remote main branch.

To test this out, go to your GitHub dashboard at github.com and click on the + button on the top right, then select “New Repository”.

Creating a new repository on GitHub

You’ll be redirected to a form to create a new repository. Choose a name for it – it doesn’t need to be the same name as your local git repo. Add a description if you want, and leave all other fields unchecked. Click on the “Create repository” button when you’re ready.

Creating a new repository on GitHub - filling the form

Once the repo is created, and because it is empty, it will show you information about how to connect this repo with your local Git setup. Grab the repository’s SSH URL, we’ll need it to configure your local testgit repo.

New repository page - get SSH URL

Then, go to your terminal and access the repo that was previously initialized::

cd ~/testgit
Enter fullscreen mode Exit fullscreen mode

You’ll now run a command that will connect this repo with a remote one that will now be the origin.

git remote add origin git@github.com:boredcatmom/sandbox.git
Enter fullscreen mode Exit fullscreen mode

This command will not give you any output. To update the remote repository and set your local repo to track the remote main branch as its upstream, run:

git push -u origin main
Enter fullscreen mode Exit fullscreen mode
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Writing objects: 100% (3/3), 1.24 KiB | 1.24 MiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
To github.com:boredcatmom/sandbox.git
 * [new branch]     main -> main
branch 'main' set up to track 'origin/main'.
Enter fullscreen mode Exit fullscreen mode

If you reload your repository page on GitHub, it should now have a single readme.txt file that says “Git Crash Course”. You effectively copied your local repo and all its history to the brand-new repository you created.

Conclusion

In this article, you learned how to clone repositories and push your changes back to GitHub, and you also learned how to connect a local git repository to a remote GitHub repository.

In the next part of this series, we’ll learn about Git branches and how to collaborate with other developers and work together in the same repository.

Top comments (0)