Installation and Setup – GitHub



Installation and Setup – GitHub

22 0


gdi-git-intro

Girl Develop It Philly - slides for intro to Git and Github

On Github ajmers / gdi-git-intro

Show navigation

Installation and Setup

Install git

http://git-scm.com/downloads

*Note for Windows Users: use Git Bash instead of Terminal

Installation and Setup

Create a GitHub account

Select a free account - your content will be public.

https://github.com/join

Welcome!

Some "rules"

  • We are here for you!
  • Every question is important
  • Help each other
  • Have fun

What we will cover today

  • What is version control and why should we care?
  • Basics of git -- the essential commands
  • "Gitting" social with Github

What is version control?

Version control allows you (and your team) to do two powerful things

Collaborate

Create anything with other people, from academic papers to entire websites and applications.

Track and revert changes

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?

Working without Version Control

The Horror!

Working with Version Control

Rainbows and bunny rabbits!

Brief history of Version Control

1990s -- CVS (Concurrent Version Systems)

2000s -- SVN (Apache Subversion)

2005 -- Git (well, Git)

Version Control Types

Centralized Version Control

Examples: CVS, SVN

One central server, each client (person) checks out and merges changes to main server

Distributed Version Control

Examples: Git, Mercurial

Each client (person) has a local repository, which they can then reconcile with the main server.

Intro to Git

Goals of Git Design

  • Fast -- add to your team and code base quickly
  • Distributed (see slide above)
  • Each commit has a corresponding hash (track changes from everyone)
  • Everyone has a local copy of the history

Git vs Github

Git is not the same as Github

GitHub

  • Launched in 2008
  • Leader in Social Coding
  • GitHub is a commercial site that allows users to host Git repositories publicly and privately
  • Open source projects host or mirror their repositories on GitHub
  • Post your own code for others to use or contribute to
  • Use and learn from the code in other people's repositories

GitHub

Create your first repository

GitHub

Create your first repository

GitHub

ReadME

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.

Cloning

Create a Local Copy of Repo

cd ~/

git clone https://github.com/username/FORKED-REPO-NAME.git

cd FORKED-REPO-NAME

git remote add origin https://github.com/original-username/FORKED-REPO-NAME.git
# Assigns the original repository to a remote called "origin"

git remote -v
# Lists URL of remote repos
        

Git Local Setup

Setup name and email in gitconfig

$ git config --global user.name "Your Name Here"
# Sets the default name for git to use when you commit
          
$ git config --global user.email "your_email@example.com"
# Sets the default email for git to use when you commit
          
$ git config --list
          

Your first Local Repository

Go to home directory

cd ~/
OR
cd Users\username
          

Create a "working directory"

mkdir my-first-repo
cd my-first-repo
          

Initialize repository with Git

git init
git status
          

Add files

Create a new hello_world.txt file in your new folder

Check repo status

git status
          

Tell Git to track our new file

git add hello_world.txt
git status
          

File is now tracked by Git

Changes and commits

Commit the change

git commit -m "First commit. Added hello world to repository."
          

What did we just do??

How is this all different than just saving a file?

  • When we add a new file, we tell Git to add the file to the repository to be tracked
  • When we stage an existing file (also with the keyword 'add'), we are telling Git to track the current state of our file
  • A commit saves changes made to a file, not the file as a whole. The commit will have a 'hash' so we can track which changes were committed when and by whom.

Look at our progress

git log
          
commit [HASH HERE]
Author: Your name <you@your-email.com>
Date:   [DATE HERE]

    First commit. Added hello world to repository.
            </you@your-email.com>

Look at our progress, visually

gitk
          

Problem?

-bash: gitk: command not found
          
http://git-scm.com/downloads/guis
-Error in startup script: unknown color name "lime"
          
Replace "lime" with hex code #99FF00 in /usr/local/bin/gitk

Nobody's Perfect

Undoing local changes

If you haven't committed yet

Open hello_world.txt and add some new text

git checkout hello_world.txt
            

Look at hello_world.txt. Your changes are gone.

Nobody's Perfect

Undoing staged changes

Open hello_world.txt and add some new text

git add hello_world.txt
git reset HEAD hello_world.txt
git checkout hello_world.txt
            

Look at hello_world.txt. Your changes are gone.

Nobody's Perfect

Undoing committed changes

Open hello_world.txt and add some new text

git add hello_world.txt
git commit -am "Changing and committing some lines"
git log --pretty=oneline
git revert [HASH]
            

Look at hello_world.txt. Your changes are gone.

Branching

  • Develop different code on the same base
  • Conduct exploratory work without affecting the work on master branch
  • Incorporate changes to your master branch only when you are ready

Branching

Branching

Create a new branch called version2

git checkout -b version2
          

Add new lines to hello_world.txt

git add hello_world.txt
git commit -m "Adding changes to version 2"
          

Branching

Switching branches

See all branches. Branch with * is active

git branch
          

Switch to master and look at hello_world.txt

git checkout master
          

Switch to version2 and look at hello_world.txt

git checkout version2
          

Merging

Merge to get changes from one branch into another*

Switch to master and merge changes

git checkout master
git merge version2
          

*rebase is another option, but will not be covered in this workshop

Merging

Merge conflicts

Change first line in hello_world.txt in master branch

git add hello_world.txt
git commit -m "Changing first line in master"
          

Change first line in hello_world.txt in version2 branch

git checkout version2
# open hello_world.txt and change first line
git add hello_world.txt
git commit -m "Changing first line in version2"
          

Merging

Merge conflicts, cont.

Merge from master into version2

git merge master
          

You will be notified of a conflict. Go to the file and fix the problem. Then commit your edits.

GitHub

Push to GitHub Repo

	git push origin master
	        

Go look at your github repo online

GitHub

Pulling from remote repository

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

GitHub

Pulling and Pushing

	# Commit local changes
	git commit -m "My latest commit"
	# Pull changes other people have made
	git pull origin master
	# Fix any conflicts (see merge conflicts above) and commit
	git commit -m "Fixing merging conflicts"
	# push local changes to GitHub
	git push origin master
	        

Forking

  • There are MILLIONS of public repositories on GitHub
  • If you want to use or contribute to a repository, you can fork it.

Pull Requests

  • After you fork and clone a repository all pushed changes will go to your fork
  • These changes will not affect the original repository
  • If you would like to get your changes to be incorporated into the original repo, you can submit a pull request

Starting a pull request

Previewing and sending pull request

Managing pull requests

How to manage pull requests is out of the scope of this short workshop, but you can learn more from the Github Collaborating Tutorials

Questions?

?

Survey

Please take a moment to give us your feedback. http://bit.ly/2e4dTxP

Intro to Git and Github ~ Girl Develop It ~