Get a jump on the day and install git now!
http://git-scm.com/downloads
slides: http://cherimarie.github.io/gdi-2day-core-git-github
Girl Develop It is here to provide affordable and accessible programs to learn software through mentorship and hands-on instruction.
Some "rules"
Tell us about yourself.
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
Create anything with other people, from academic papers to entire websites and applications.
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?
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.
Goals of Git Design
Install git
http://git-scm.com/downloads
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 $.
$ git config --global user.name "Your Name Here"
# Sets the name git associates with your commits
$ git config --global user.email "your_email@example.com"
# Sets the email git associates with your commits
$ git config --list
# Shows your configuration settings
# change to root/home directory
cd ~
#or
cd Users\username
# 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 #reset
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 #shows log of commits
git revert [SHA] #undoes specified commit
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 #shows log of commits
git reset --hard [SHA] #resets repo
This rolls back all changes since the specified commit - be careful! This isn't often used in real life.
Create a new branch called feature_1
git checkout -b feature_1
Make a change to hello.txt, then add and commit.
See all branches. Branch with * is active.
git branch
Switch to the master branch.
git checkout master
You'll notice the changes from feature_1 branch aren't there.
Switch to master and merge in the feature_1 branch
git checkout master
git merge feature_1
Now if you check out hello.txt, you'll see the changes you made in the feature_1 branch.
*rebase is another option, but will not be covered in this workshop
Change first line in hello.txt in master branch, then add and commit it.
Then switch to the feature_1 branch and change first line in hello.txt, and add and commit it.
Merge the master branch into feature_1 branch
# on feature_1 branch
git merge master
You will be notified of a conflict. Go to the file, fix the problem and delete the helpful comments Git added. Then commit your edits.
Conflict resolved!
Note: somtimes, conflicts cause the files to automatically open in the Vim text editor. It looks just like a terminal window and has no obvious way to exit. Don't panic. Just type :q[enter] to exit it.
You've got the basics of Git down. Spend the next week practicing. Remember, it's hard to really, truly break anything with Git, so be brave!
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.https://help.github.com/articles/generating-ssh-keys
Cheri Allen
@cherimarie