Get a jump on the day and install git now!
http://git-scm.com/downloads
Girl Develop It is here to provide affordable and accessible programs to learn software through mentorship and hands-on instruction.
Some "rules"
Git isn't simple. Like most powerful tools, it's complex and takes some time to master.
Version control allows you (and your team) to do two powerful things:
Mistakes happen. Wouldn't it be nice if you could see the changes that have been made and go "back in time" to fix something that went wrong?
Create anything with other people, from academic papers to entire websites and applications.
The Horror!
Rainbows and bunny rabbits!
1990s -- CVS (Concurrent Version Systems)
2000s -- SVN (Apache Subversion)
2005 -- Git (well, Git)
Examples: CVS, SVN
One central server, each client (person) checks out and merges changes to main server
Examples: Git, Mercurial
Each client (person) has a local repository, which they can then reconcile with the main server.
More info about the differences here.
Goals of Git Design
Install Git http://git-scm.com/downloads
Install Git for Windows https://git-for-windows.github.io/
Press CMD+SPACE
and search 'Terminal' and hit enter
Press WinKey
and search 'mintty' and hit enter
Configure Git with your name and email
# I'm a comment! Don't enter me in command line.
# Do enter lines that start with a $, but don't type the $.
# Set the name git associates with your commits
$ git config --global user.name "Your Name Here"
# Set the email git associates with your commits
$ git config --global user.email "your_email@example.com"
# Show your configuration settings
$ git config --list
An SSH key is like a secret handshake between your computer and Github. It allows Github's servers to verify your identity via public-key cryptography and challenge-response authentication- not via you typing in your Github password. It's super secure and not too difficult to set up.
More info about SSH keys.Setup ssh keys following this guide:
https://help.github.com/articles/generating-ssh-keys
# Change to your home directory
cd ~
# OR
cd
# Create and move to a "working directory"
mkdir my-repo
cd my-repo
# Initialize directory as a Git repository
git init
Create a new hello.txt
file in your my-repo
directory, then check repo status
touch hello.txt
git status
Tell Git to track our new file
git add hello.txt
git status
File is now tracked by Git!
Open hello.txt
and add some text, then check your git status
git status
Stage and commit the change
git add hello.txt
git commit -m "Added first file to repository."
How is this all different than just saving a file?
git log
commit [SHA HERE]
Author: Your name
Date: [DATE HERE]
Added first file to repository.
Cool! We'll be using that SHA later...
Always read the output of running git commands. They may look a little intimidating, but they contain all sorts of useful information. When in doubt, run:
git status
This is the general workflow in a Git repository
git init # Just once, to initialize
# Do some stuff to files
git status # What's up, git?
git add [filename] # Stage changes to a file
git commit -m "" # Commit a set of changes
git status # What's up, git?
If you've added some new text to hello.txt
, but not yet staged it, just run:
git checkout hello.txt
hello.txt
is reset to its state at the last commit - your changes are gone!
If you already staged hello.txt, run:
git reset hello.txt
hello.txt
is no longer staged, you can make whatever changes you like to it, and re-stage when it's ready.
If you've already staged hello.txt
, but want to delete it instead, run:
git rm -f hello.txt
The file is deleted, and its deletion will be part of your commit.
If you've made some changes to hello.txt
and staged it, but want the changes to disappear, run:
git reset hello.txt # Unstage
git checkout hello.txt # Undo all my local changes
hello.txt
is unstaged and reset to its state at the last commit - your changes are gone!
If you've made changes and committed them, you can revert all the changes that happened in a specific commit by running:
git log # Display log of commits
git revert [SHA] # Un-does specified commit with opposite changes
This doesn't have to be your most recent commit- you can revert any commit. It will just undo the entire set of changes that were included in that commit.
You can roll back your repo's state to where it was after any previous commit by running this with the SHA of the commit you'd like to reset to:
git log # Display log of commits
git reset --hard [SHA] # Reset the repo
This rolls back all changes since the specified commit - be careful! This isn't often used in real life.
Provide you with a separate space for you make changes. It's part of how you collaborate with other people.
Combine your current branch with another branch
While a README isn't a required part of a GitHub repository, it is a very good idea to have one. READMEs are a great place to describe your project or add some documentation such as how to install or use your project. You might want to include contact information–if your project becomes popular people will want to help you out.
Copy SSH link from Github repo
# From inside your local git repo
git remote add origin [pasted link from Github]
# Pull first, when creating connection
git pull origin master
# Push your local work to the repo
git push origin master
As you make changes locally, push to Github.
Make a change to your README file, then add and commit it. Then, push!
git push origin master
Go check out your Github repo online to see your changes.
If you are working with a team, you want to make sure that you have everyone's changes before pushing your changes to the GitHub repo
# Pull current state from Github
git pull origin master
# Fix any conflicts (see merge conflicts above) and commit
# then, push local changes to GitHub
git push origin master
Go to https://github.com/gdiseattle/GitResources and hit the fork button.
Go to your GitResources repo on Github, find this link and copy it.
Navigate to the location you want new directory to be in- NOT INSIDE ANOTHER GIT REPO! Then, clone to get a local repository of your fork.
git clone https://github.com/username/FORKED-REPO-NAME.git
cd FORKED-REPO-NAME
The git clone
command does a lot!
origin
to the Github repo it was cloned fromAdd a remote connection to the original repository, so you can stay up to date with their changes:
# Creates a remote connection, called "upstream",
# to the original repo on Github
git remote add upstream https://github.com/original-username/FORKED-REPO-NAME.git
# Pulls in changes not present in your local repository,
# without modifying your files
git fetch upstream
git add .
git commit -m "Add great new resource"
git push origin master
Visit your Github repo page
Fill out the form with a polite, helpful description, and submit.
How to manage pull requests is out of the scope of this short workshop, but you can learn more from the Github Collaborating Tutorials
Cheri Allen
@cherimarie