Skip to content

Instantly share code, notes, and snippets.

@cfriedline
Created August 21, 2014 10:45
Show Gist options
  • Save cfriedline/2ffc5daba9419d955d76 to your computer and use it in GitHub Desktop.
Save cfriedline/2ffc5daba9419d955d76 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"worksheets": [
{
"cells": [
{
"metadata": {
"slide_helper": "slide_end",
"internals": {
"slide_helper": "subslide_end"
},
"slideshow": {
"slide_type": "skip"
}
},
"cell_type": "code",
"input": "%automagic on\n%rehashx",
"outputs": [],
"language": "python",
"trusted": true,
"collapsed": false
},
{
"metadata": {
"slide_helper": "subslide_end",
"internals": {
"slide_type": "subslide",
"slide_helper": "subslide_end"
},
"slideshow": {
"slide_type": "slide"
}
},
"cell_type": "markdown",
"source": "#Version Control"
},
{
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"slide_type": "subslide",
"frag_number": 3
},
"slideshow": {
"slide_type": "subslide"
}
},
"cell_type": "markdown",
"source": "## What is version control?"
},
{
"metadata": {
"slide_helper": "subslide_end",
"internals": {
"slide_helper": "subslide_end",
"frag_number": 4
},
"slideshow": {
"slide_type": "fragment"
}
},
"cell_type": "markdown",
"source": "<center>![](http://www.datamation.com/imagesvr_ce/3829/version-control.jpg)</center>"
},
{
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"slide_type": "subslide",
"frag_number": 4
},
"slideshow": {
"slide_type": "subslide"
}
},
"cell_type": "markdown",
"source": "## What is version control?"
},
{
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 6
},
"slideshow": {
"slide_type": "fragment"
}
},
"cell_type": "markdown",
"source": "* A record of changes to a file or set of files"
},
{
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 7
},
"slideshow": {
"slide_type": "fragment"
}
},
"cell_type": "markdown",
"source": "* Allows changes to be recovered a certain point in time"
},
{
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 8
},
"slideshow": {
"slide_type": "fragment"
}
},
"cell_type": "markdown",
"source": "* Nothing is ever lost after committing it"
},
{
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 9
},
"slideshow": {
"slide_type": "fragment"
}
},
"cell_type": "markdown",
"source": "* System of blame (snicker)"
},
{
"metadata": {
"slide_helper": "slide_end",
"internals": {
"frag_helper": "fragment_end",
"slide_helper": "subslide_end",
"frag_number": 10
},
"slideshow": {
"slide_type": "fragment"
}
},
"cell_type": "markdown",
"source": "* Many variations on a theme\n * local file copies\n * centralized systems\n * decentralized systems"
},
{
"metadata": {
"slide_helper": "subslide_end",
"internals": {
"frag_helper": "fragment_end",
"slide_type": "subslide",
"slide_helper": "subslide_end",
"frag_number": 10
},
"slideshow": {
"slide_type": "slide"
}
},
"cell_type": "markdown",
"source": "# Version control with git"
},
{
"metadata": {
"slide_helper": "subslide_end",
"internals": {
"frag_helper": "fragment_end",
"slide_type": "subslide",
"slide_helper": "subslide_end",
"frag_number": 10
},
"slideshow": {
"slide_type": "subslide"
}
},
"cell_type": "markdown",
"source": "<center>![](trends.png)\n\n<p><b>\n<font color=blue>Git</font><br>\n<font color=red>Svn</font><br>\n<font color=orange>Hg</font><br>\n<font color=green>CVS</font><br>\n</b>\n</center>\n"
},
{
"metadata": {
"slide_helper": "subslide_end",
"internals": {
"frag_helper": "fragment_end",
"slide_type": "subslide",
"slide_helper": "subslide_end",
"frag_number": 10
},
"slideshow": {
"slide_type": "subslide"
}
},
"cell_type": "markdown",
"source": "##What is git?\n![](https://lh3.googleusercontent.com/-89ozPMrQDIQ/U9uP-bfCVQI/AAAAAAAENY8/126AHEaJQRo/w960-h720/git-hilbert.jpg)"
},
{
"metadata": {
"slide_helper": "subslide_end",
"internals": {
"frag_helper": "fragment_end",
"slide_type": "subslide",
"slide_helper": "subslide_end",
"frag_number": 10
},
"slideshow": {
"slide_type": "subslide"
}
},
"cell_type": "markdown",
"source": "<center>\"Many forms of Government have been tried, and will be tried in this world of sin and woe. No one pretends that democracy is perfect or all-wise. Indeed it has been said that democracy is the worst form of Government except for all those other forms that have been tried from time to time . . .\"\n</center>\n\n<p><center>\n--Churchill (quoting another)\n\n</center>"
},
{
"metadata": {
"slide_helper": "subslide_end",
"internals": {
"frag_helper": "fragment_end",
"slide_type": "subslide",
"slide_helper": "subslide_end",
"frag_number": 10
},
"slideshow": {
"slide_type": "subslide"
}
},
"cell_type": "markdown",
"source": "<center>\"Many forms of **version control** have been tried, and will be tried in this world of sin and woe. No one pretends that **git** is perfect or all-wise. Indeed it has been said that **git** is the worst form of **version control** except for all those other forms that have been tried from time to time . . .\"</center>"
},
{
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"slide_type": "subslide",
"frag_number": 10
},
"slideshow": {
"slide_type": "subslide"
}
},
"cell_type": "markdown",
"source": "## What is git (really, more or less)?\n\n* Distributed Version Control System (DVCS)\n* Snapshot vs files\n* Database integrity (checksums)\n* Working isolation (i.e., branches)"
},
{
"metadata": {
"slide_helper": "subslide_end",
"internals": {
"frag_helper": "fragment_end",
"slide_helper": "subslide_end",
"frag_number": 17
},
"slideshow": {
"slide_type": "fragment"
}
},
"cell_type": "markdown",
"source": "* PITA?"
},
{
"metadata": {
"slide_helper": "subslide_end",
"internals": {
"frag_helper": "fragment_end",
"slide_type": "subslide",
"slide_helper": "subslide_end",
"frag_number": 17
},
"slideshow": {
"slide_type": "subslide"
}
},
"cell_type": "markdown",
"source": "## Core concepts of git\n\n1. The **repository** (clone, fetch/merge (pull), push)\n1. The **working directory** (edit, checkout)\n1. The **staging area** (add, commit)"
},
{
"metadata": {
"slide_helper": "subslide_end",
"internals": {
"frag_helper": "fragment_end",
"slide_type": "subslide",
"slide_helper": "subslide_end",
"frag_number": 17
},
"slideshow": {
"slide_type": "subslide"
}
},
"cell_type": "markdown",
"source": "## Sections of a git project\n\n![](http://git-scm.com/figures/18333fig0106-tn.png)\n<center><span style=\"color:gray; font-size:0.5em;\">git-scm.com/book</span></center>"
},
{
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"slide_type": "subslide",
"frag_number": 17
},
"slideshow": {
"slide_type": "subslide"
}
},
"cell_type": "markdown",
"source": "## Example"
},
{
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 17
},
"slideshow": {
"slide_type": "-"
}
},
"cell_type": "code",
"input": "head /Users/chris/.gitconfig",
"outputs": [],
"language": "python",
"trusted": true,
"collapsed": false
},
{
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 17
},
"slideshow": {
"slide_type": "-"
}
},
"cell_type": "code",
"input": "mkdir /Users/chris/science/swc/2014-08-21-upenn_examples",
"outputs": [],
"language": "python",
"trusted": true,
"collapsed": false
},
{
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 17
},
"slideshow": {
"slide_type": "-"
}
},
"cell_type": "code",
"input": "cd ~/science/swc/2014-08-21-upenn_examples/",
"outputs": [],
"language": "python",
"trusted": true,
"collapsed": false
},
{
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 17
},
"slideshow": {
"slide_type": "-"
}
},
"cell_type": "code",
"input": "rm -rf .git && rm -f *.txt && git init",
"outputs": [],
"language": "python",
"trusted": true,
"collapsed": false
},
{
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 17
},
"slideshow": {
"slide_type": "-"
}
},
"cell_type": "code",
"input": "echo \"Test me!\" > example.txt",
"outputs": [],
"language": "python",
"trusted": true,
"collapsed": false
},
{
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 17
},
"slideshow": {
"slide_type": "-"
}
},
"cell_type": "code",
"input": "ls -l",
"outputs": [],
"language": "python",
"trusted": true,
"collapsed": false
},
{
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 17
},
"slideshow": {
"slide_type": "-"
}
},
"cell_type": "code",
"input": "head example.txt",
"outputs": [],
"language": "python",
"trusted": true,
"collapsed": false
},
{
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 17
},
"slideshow": {
"slide_type": "-"
}
},
"cell_type": "code",
"input": "git status",
"outputs": [],
"language": "python",
"trusted": true,
"collapsed": false
},
{
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 17
},
"slideshow": {
"slide_type": "-"
}
},
"cell_type": "code",
"input": "git add example.txt",
"outputs": [],
"language": "python",
"trusted": true,
"collapsed": false
},
{
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 17
},
"slideshow": {
"slide_type": "-"
}
},
"cell_type": "code",
"input": "git status",
"outputs": [],
"language": "python",
"trusted": true,
"collapsed": false
},
{
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 17
},
"slideshow": {
"slide_type": "-"
}
},
"cell_type": "code",
"input": "git commit -m \"added example\"",
"outputs": [],
"language": "python",
"trusted": true,
"collapsed": false
},
{
"metadata": {
"slide_helper": "subslide_end",
"internals": {
"frag_helper": "fragment_end",
"slide_helper": "subslide_end",
"frag_number": 17
},
"slideshow": {
"slide_type": "-"
}
},
"cell_type": "code",
"input": "git log",
"outputs": [],
"language": "python",
"trusted": true,
"collapsed": false
},
{
"metadata": {
"slide_helper": "slide_end",
"internals": {
"frag_helper": "fragment_end",
"slide_type": "subslide",
"slide_helper": "subslide_end",
"frag_number": 17
},
"slideshow": {
"slide_type": "subslide"
}
},
"cell_type": "markdown",
"source": "##Exercise #1\n\n[http://bit.ly/cjf-swc-git01](http://bit.ly/cjf-swc-git01)"
},
{
"metadata": {
"slide_helper": "subslide_end",
"internals": {
"frag_helper": "fragment_end",
"slide_type": "subslide",
"slide_helper": "subslide_end",
"frag_number": 17
},
"slideshow": {
"slide_type": "slide"
}
},
"cell_type": "markdown",
"source": "##Collaboration"
},
{
"metadata": {
"slide_helper": "subslide_end",
"internals": {
"frag_helper": "fragment_end",
"slide_type": "subslide",
"slide_helper": "subslide_end",
"frag_number": 17
},
"slideshow": {
"slide_type": "subslide"
}
},
"cell_type": "markdown",
"source": "## Enabling collaboration with Github\n[github.com](http://github.com)\n\n* Online storage/backup/distribution for git repos\n* Static web hosting and wikis"
},
{
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"slide_type": "subslide",
"frag_number": 17
},
"slideshow": {
"slide_type": "subslide"
}
},
"cell_type": "code",
"input": "git remote add origin [email protected]:cfriedline/2014-08-21-upenn_examples.git",
"outputs": [],
"language": "python",
"trusted": true,
"collapsed": false
},
{
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 17
},
"slideshow": {
"slide_type": "-"
}
},
"cell_type": "code",
"input": "git remote -v",
"outputs": [],
"language": "python",
"trusted": true,
"collapsed": false
},
{
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 17
},
"slideshow": {
"slide_type": "-"
}
},
"cell_type": "code",
"input": "git push -u origin master",
"outputs": [],
"language": "python",
"trusted": true,
"collapsed": false
},
{
"metadata": {
"slide_helper": "subslide_end",
"internals": {
"frag_helper": "fragment_end",
"slide_helper": "subslide_end",
"frag_number": 17
},
"slideshow": {
"slide_type": "-"
}
},
"cell_type": "code",
"input": "git push",
"outputs": [],
"language": "python",
"trusted": true,
"collapsed": false
},
{
"metadata": {
"slide_helper": "slide_end",
"internals": {
"frag_helper": "fragment_end",
"slide_type": "subslide",
"slide_helper": "subslide_end",
"frag_number": 17
},
"slideshow": {
"slide_type": "subslide"
}
},
"cell_type": "markdown",
"source": "##Exercise #2\n\n[http://bit.ly/cjf-swc-git02](http://bit.ly/cjf-swc-git02)\n\n1. Create your own github account\n1. Hook it into your files from Exercise #1"
},
{
"metadata": {
"slide_helper": "subslide_end",
"internals": {
"frag_helper": "fragment_end",
"slide_type": "subslide",
"slide_helper": "subslide_end",
"frag_number": 17
},
"slideshow": {
"slide_type": "slide"
}
},
"cell_type": "markdown",
"source": "##Working with others\n\nTwo common ways:\n\n1. Granting push access\n2. Fork/Pull request\n\nProblems?"
},
{
"metadata": {
"slide_helper": "slide_end",
"internals": {
"frag_helper": "fragment_end",
"slide_type": "subslide",
"slide_helper": "subslide_end",
"frag_number": 17
},
"slideshow": {
"slide_type": "subslide"
}
},
"cell_type": "markdown",
"source": "##Excercise #3\n\n1. Pick a partner\n1. One person grant access to the other\n1. Clone your partner's repository from github (ssh://)\n1. Make a change locally and commit\n1. Push changes up to github\n\nKeep in mind:\n\n* Why use ssh over http?\n* Did you have to use `push -u`?\n\n##Exercise #4\n\n1. Fork your partner's repository\n1. Clone it locally\n1. Make a change\n1. Submit a pull request to your partner\n1. Merge that pull request from github\n\nAgain, ask yourself and we'll discuss:\n\n1. Advantages/Disadvantages of fork over direct push\n1. If you fork, how do you get the latest changes from your buddy?"
},
{
"metadata": {
"slide_helper": "subslide_end",
"internals": {
"frag_helper": "fragment_end",
"slide_type": "subslide",
"slide_helper": "subslide_end",
"frag_number": 17
},
"slideshow": {
"slide_type": "slide"
}
},
"cell_type": "markdown",
"source": "##Branching out"
},
{
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"slide_type": "subslide",
"frag_number": 17
},
"slideshow": {
"slide_type": "subslide"
}
},
"cell_type": "code",
"input": "pwd",
"outputs": [],
"language": "python",
"trusted": true,
"collapsed": false
},
{
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 17
},
"slideshow": {
"slide_type": "-"
}
},
"cell_type": "code",
"input": "ls",
"outputs": [],
"language": "python",
"trusted": true,
"collapsed": false
},
{
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 17
},
"slideshow": {
"slide_type": "-"
}
},
"cell_type": "code",
"input": "git branch",
"outputs": [],
"language": "python",
"trusted": true,
"collapsed": false
},
{
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 17
},
"slideshow": {
"slide_type": "-"
}
},
"cell_type": "code",
"input": "git checkout -b testing",
"outputs": [],
"language": "python",
"trusted": true,
"collapsed": false
},
{
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 17
},
"slideshow": {
"slide_type": "-"
}
},
"cell_type": "code",
"input": "git branch",
"outputs": [],
"language": "python",
"trusted": true,
"collapsed": false
},
{
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 17
},
"slideshow": {
"slide_type": "-"
}
},
"cell_type": "code",
"input": "echo \"Another file\" > testing.txt",
"outputs": [],
"language": "python",
"trusted": true,
"collapsed": false
},
{
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 17
},
"slideshow": {
"slide_type": "-"
}
},
"cell_type": "code",
"input": "git status",
"outputs": [],
"language": "python",
"trusted": true,
"collapsed": false
},
{
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 17
},
"slideshow": {
"slide_type": "-"
}
},
"cell_type": "code",
"input": "git add testing.txt",
"outputs": [],
"language": "python",
"trusted": true,
"collapsed": false
},
{
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 17
},
"slideshow": {
"slide_type": "-"
}
},
"cell_type": "code",
"input": "git status",
"outputs": [],
"language": "python",
"trusted": true,
"collapsed": false
},
{
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 17
},
"slideshow": {
"slide_type": "-"
}
},
"cell_type": "code",
"input": "git commit -m \"add testing file\"",
"outputs": [],
"language": "python",
"trusted": true,
"collapsed": false
},
{
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 17
},
"slideshow": {
"slide_type": "-"
}
},
"cell_type": "code",
"input": "git log",
"outputs": [],
"language": "python",
"trusted": true,
"collapsed": false
},
{
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 17
},
"slideshow": {
"slide_type": "-"
}
},
"cell_type": "code",
"input": "ls",
"outputs": [],
"language": "python",
"trusted": true,
"collapsed": false
},
{
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 17
},
"slideshow": {
"slide_type": "-"
}
},
"cell_type": "code",
"input": "git checkout master",
"outputs": [],
"language": "python",
"trusted": true,
"collapsed": false
},
{
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 17
},
"slideshow": {
"slide_type": "-"
}
},
"cell_type": "code",
"input": "ls",
"outputs": [],
"language": "python",
"trusted": true,
"collapsed": false
},
{
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 17
},
"slideshow": {
"slide_type": "-"
}
},
"cell_type": "code",
"input": "git branch",
"outputs": [],
"language": "python",
"trusted": true,
"collapsed": false
},
{
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 17
},
"slideshow": {
"slide_type": "-"
}
},
"cell_type": "code",
"input": "git merge testing",
"outputs": [],
"language": "python",
"trusted": true,
"collapsed": false
},
{
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 17
},
"slideshow": {
"slide_type": "-"
}
},
"cell_type": "code",
"input": "ls",
"outputs": [],
"language": "python",
"trusted": true,
"collapsed": false
},
{
"metadata": {
"internals": {
"frag_helper": "fragment_end",
"frag_number": 17
},
"slideshow": {
"slide_type": "-"
}
},
"cell_type": "code",
"input": "git branch -D testing",
"outputs": [],
"language": "python",
"trusted": true,
"collapsed": false
},
{
"metadata": {
"slide_helper": "subslide_end",
"internals": {
"frag_helper": "fragment_end",
"slide_helper": "subslide_end",
"frag_number": 17
},
"slideshow": {
"slide_type": "-"
}
},
"cell_type": "code",
"input": "git branch",
"outputs": [],
"language": "python",
"trusted": true,
"collapsed": false
},
{
"metadata": {
"slide_helper": "slide_end",
"internals": {
"frag_helper": "fragment_end",
"slide_type": "subslide",
"slide_helper": "subslide_end",
"frag_number": 17
},
"slideshow": {
"slide_type": "subslide"
}
},
"cell_type": "markdown",
"source": "##Excercise 4\n\nDiscussion:\n\n1. How does this fit into the fork vs push models?\n1. What are the advantages and disadvantages to using branches?\n\nDo:\n\n1. Create a branch in either scenario\n1. Merge in some changes"
},
{
"metadata": {
"slide_helper": "slide_end",
"internals": {
"frag_helper": "fragment_end",
"slide_type": "subslide",
"slide_helper": "subslide_end",
"frag_number": 17
},
"slideshow": {
"slide_type": "slide"
}
},
"cell_type": "markdown",
"source": "##Recap\n\n1. Created a local git repository\n1. Added files, made changes, committed\n1. Used github for collaboration\n1. Checked out (!) branches and merged\n1. What's left?"
},
{
"metadata": {
"slide_helper": "slide_end",
"internals": {
"frag_helper": "fragment_end",
"slide_type": "subslide",
"slide_helper": "subslide_end",
"frag_number": 17
},
"slideshow": {
"slide_type": "slide"
}
},
"cell_type": "markdown",
"source": "##Open source (science) and Licensing\n\n1. Would we care if there was no github?\n1. What if someone steals my code, manuscript, etc?\n1. How can I control who can do what with my work?\n\n[http://bit.ly/cjf-swc-git04](http://bit.ly/cjf-swc-git04)\n\n[http://www.software-carpentry.org/v5/novice/git/04-open.html](http://www.software-carpentry.org/v5/novice/git/04-open.html)"
},
{
"metadata": {
"slide_helper": "slide_end",
"internals": {
"frag_helper": "fragment_end",
"slide_type": "subslide",
"slide_helper": "subslide_end",
"frag_number": 17
},
"slideshow": {
"slide_type": "slide"
}
},
"cell_type": "markdown",
"source": "#Credits\n<center>\n<img src=https://raw.githubusercontent.com/swcarpentry/bc/gh-pages/img/software-carpentry-banner.png>\n<img src=https://upload.wikimedia.org/wikipedia/en/8/8c/VCU_typeface.svg height=50%>\n<img src=https://www.nsf.gov/images/logos/nsf1.gif>\n</center>\n<p>\n<center>\n[@noituloveand](http://www.twitter.com/noituloveand)<br>\n[chris.friedline.net](http://chris.friedline.net)<br>\n[Eckert lab](http://eckertlab.blogspot.com)<br>\n</center>"
}
],
"metadata": {}
}
],
"metadata": {
"gist_id": "2ffc5daba9419d955d76",
"name": "",
"signature": "sha256:fe0634d481dd14443a098c5fde3184eb232ab00bc7c3f046a2305c3c5652376e"
},
"nbformat": 3
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment