Install Git, set up authentication, and push commits from a real terminal. The workflow you will use at your first job.
← back to the GitHub tutorial hubBefore you start these steps, make sure you already have the shared setup done. If any of these are missing, click back to the hub and take care of them first.
First thing: make sure Git is actually installed on your computer. Open a terminal window and check.
In your terminal, type this command and press Enter:
$ git --version
If you see something like git version 2.40.1, you are done with this step. Skip to Step 2. If you see command not found or an error, keep going.
$ xcode-select --install
If you already use Homebrew, you can also run:
$ brew install git
Close your terminal, reopen it, and run:
$ git --version git version 2.40.1
If you see a version number, Git is ready. Move on.
Git needs to know your name and email so your commits are labeled. This is a one-time setup on each machine. Use the same email you used for your GitHub account.
$ git config --global user.name "First Last" $ git config --global user.email "your.email@example.com"
Verify both are set:
$ git config --global user.name First Last $ git config --global user.email your.email@example.com
Set the default branch name to main (GitHub's default, so they match):
$ git config --global init.defaultBranch main
This is the part that trips everyone up. GitHub no longer accepts your account password from the command line. You need either a Personal Access Token or an SSH key. Pick one.
Run this in your terminal, replacing the email with yours:
$ ssh-keygen -t ed25519 -C "your.email@example.com"
Press Enter to accept the default file location. Press Enter twice more to skip setting a passphrase (or set one if you want extra security). This creates two files: a private key and a public key ending in .pub.
Copy the contents of the public key:
# macOS $ pbcopy < ~/.ssh/id_ed25519.pub # Windows (Git Bash) $ cat ~/.ssh/id_ed25519.pub | clip
On github.com, go to Settings → SSH and GPG keys → New SSH key. Paste the key, give it a title like My laptop, and click Save. Done. You can now push and pull without typing a password ever again.
You already created a repo on github.com earlier. Now you need a local copy on your machine. This is called cloning.
$ cd ~/Documents $ git clone https://github.com/your-username/your-repo.git Cloning into 'your-repo'... remote: Enumerating objects: 3, done. remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 Receiving objects: 100% (3/3), done.
Now change into the new folder:
$ cd your-repo $ ls README.md
You are now inside a local copy of your repo. Any files you add, edit, or delete here can be pushed back up to GitHub with a few commands.
This is the loop you will run over and over. Memorize these five commands and you know 90% of Git.
Open a file in your editor (VS Code, Sublime, Notepad, whatever), edit it, and save. You can also add brand new files.
$ git status On branch main Your branch is up to date with 'origin/main'. Changes not staged for commit: (use "git add <file>..." to update what will be committed) modified: README.md Untracked files: (use "git add <file>..." to include in what will be committed) newfile.py no changes added to commit (use "git add" to track)
Staging means "I want these specific changes in my next commit." Use . to stage everything that changed:
$ git add .
Or stage one file at a time:
$ git add README.md $ git add newfile.py
$ git commit -m "Add login form and update README" [main a1b2c3d] Add login form and update README 2 files changed, 45 insertions(+), 2 deletions(-)
This uploads your commit to the github.com copy of the repo:
$ git push Enumerating objects: 5, done. Counting objects: 100% (5/5), done. Writing objects: 100% (3/3), 420 bytes | 420.00 KiB/s, done. To https://github.com/your-username/your-repo.git 9f8a7b6..a1b2c3d main -> main
Refresh your repo page on github.com and you will see the new commit with your message. The files are live.
# Make your edits in your editor, then: $ git status # see what changed $ git add . # stage everything $ git commit -m "Clear message" # save a snapshot $ git push # upload to GitHub
What if your project already exists on your laptop and you have not created the GitHub repo yet? You can turn any folder into a Git repo with git init and push it up. Here is the full sequence.
# Step 1: Go into your project folder $ cd ~/Documents/my-capstone # Step 2: Initialize it as a Git repo $ git init Initialized empty Git repository in /Users/you/Documents/my-capstone/.git/ # Step 3: Stage everything $ git add . # Step 4: First commit $ git commit -m "Initial commit" [main (root-commit) f0e9d8c] Initial commit 12 files changed, 340 insertions(+) # Step 5: Rename the branch to main (if needed) $ git branch -M main # Step 6: Create an empty repo on github.com first, then copy its URL. # Connect your local folder to it: $ git remote add origin https://github.com/your-username/my-capstone.git # Step 7: Push for the first time $ git push -u origin main Enumerating objects: 15, done. Writing objects: 100% (15/15), 8.42 KiB | 8.42 MiB/s, done. To https://github.com/your-username/my-capstone.git * [new branch] main -> main branch 'main' set up to track 'origin/main' from origin.
After that, just use git add, git commit, and git push like in Step 5.
The commands you will actually use, with one-line explanations. Bookmark this.
# Setup (run once per machine) git config --global user.name "First Last" # your name on commits git config --global user.email "you@email.com" # your commit email git config --global init.defaultBranch main # match GitHub default # Starting a project git clone <url> # copy a GitHub repo to your machine git init # turn current folder into a Git repo git remote add origin <url> # link local folder to GitHub repo # Daily loop git status # what changed? git add <file> # stage one file git add . # stage everything git commit -m "Message" # save a snapshot git push # upload to GitHub git pull # download changes from GitHub # Looking around git log --oneline # list past commits git diff # see unstaged changes git diff --staged # see staged changes # Undoing things git restore <file> # discard unsaved changes to a file git restore --staged <file> # unstage a file git reset --soft HEAD~1 # undo last commit, keep changes
The README is the front page of your repo. When a recruiter, a professor, or your future self lands on the page, this is the first thing they read. A repo without a good README looks abandoned. A repo with a clear README looks professional, even if the code inside is modest. This is the single highest-leverage thing you can write.
Here is a working template you can paste directly into your README.md and fill in. Markdown is just plain text with a few symbols — GitHub formats it automatically.
# Capstone Inventory App A Python and SQLite inventory tracking application built for small businesses that need to manage stock without the cost of commercial software. Developed as my NOVA ITP 120 capstone project. ## Screenshot  ## Features - Add, edit, and delete inventory items - Search and filter by category or supplier - Low-stock alerts with configurable thresholds - Export reports to CSV - Simple login with hashed passwords ## Tech Stack - **Language:** Python 3.11 - **Framework:** Flask - **Database:** SQLite - **Front end:** HTML, CSS, Bootstrap 5 - **Deployment:** Local only (capstone scope) ## How to Run It 1. Clone this repo: `git clone https://github.com/yourname/capstone-inventory-app.git` 2. Install dependencies: `pip install -r requirements.txt` 3. Initialize the database: `python init_db.py` 4. Start the app: `python app.py` 5. Open your browser to `http://localhost:5000` ## What I Learned Working on this project taught me how to structure a real multi-file Python application, how to design a normalized SQLite schema, and how to handle user authentication safely with password hashing. The hardest part was the CSV export — encoding edge cases took me a full afternoon to debug. ## Credits Built by First Last for NOVA ITP 120, Spring 2026. LinkedIn: [linkedin.com/in/yourname](https://linkedin.com/in/yourname) Flask tutorial adapted from the official Flask documentation. ## License This project is open for educational use.
This is the URL you put on your resume, in your LinkedIn, and in cover letters. It is the whole reason we are doing this.
Your repo URL is always this format:
Your profile URL (shows all your repos at once) is this:
You can get the exact URL by just copying it from your browser's address bar when you are on the repo page. That is the easiest way.
If your capstone is anything with HTML, CSS, or JavaScript in it (a portfolio site, a web app front end, a landing page, an interactive tutorial), GitHub Pages will turn your repo into a real live website for free in under a minute. This is huge. A live URL is 10x more impressive on a resume than a zip file.
Your live URL will look like this:
Every time you commit a change to your repo, the live site updates automatically in about a minute. No deployment headaches, no servers to maintain, no credit card required.
You can install Git, authenticate, clone a repo, push commits, and use the daily workflow loop. This is the skill you will use at your first job every single day.