Git Processing 101

distributed version control for sketches

Processing Austin

$ whoami

@earthtravis


README.md
  • Bachelor of Business
  • Enterprise Experience
  • Master of Technology
  • Passion for Startups

Git

open.

fast.

scalable.

Save and Share

  • Every directory is repository.
    • history and version tracking
  • Not dependent on network access or central server.
    • connectivity != blocker
  • Free software.
    • GNU General Public License version 2

Back in the day

  • FTP
  • Copies

Do not make copies of sketches.
Make commits @ logical stopping points!

Collaboration

same files == version nightmare

  • Different times
  • Some overlaps

Revision History

Content Changes

  • Who
  • What
  • When
  • Why

Features

  • local branching
  • staging areas
  • multiple workflows


Example: John Resig's port of Processing to JavaScript.


  • Code
  • Network
  • Graphs

$ git log

  • copyright holder of BitKeeper withdraws free use
  • Linus Torvalds (Linux) builds something better

Priority

  • Performance

His goal was for patches to take three seconds.

Wikipedia

Design Criteria

  • Opposite of Concurrent Versions System (CVS)
  • Distributed workflow
  • Safeguard against corruption

Open Source

philosophy promoting universal access via free license to product's design or blueprint and universal redistribution of that design or blueprint, including subsequent improvements by anyone.

Wikipedia

Open Source

  • Apache
  • Linux
  • Ruby
  • WordPress
  • Processing
  • Arduino
  • SuperCollider


OpenProcessing

Open Source Initiative

GitHub

  • GUI
  • Social Coding


Sign up for GitHub

Installer

Downloads

Exercise

  • create processing repository on GitHub
  • Open Terminal

Set Up Git

Configure Username, Email and Password caching settings.

Clone repo.

Navigate to directory you want files stored in.

git clone <HTTPS clone URL>

$ git clone https://github.com/earth2travis/processing.git

See current state of project.

  • $ cd processing
  • $ git status

Update /flocking/flocking.pde

  • Open flocking.pde in Processing IDE
  • Change: background(50);
  • To: background(153, 204, 255);
  • Save

To start tracking changes made to flocking.pde, add it to the staging area.

Return to Terminal

$ git status

$ git diff

$ git add flocking.pde

Move changes to repository running commit command and describing changes.

$ git status

$ git commit -m "Change background to blue."

View existing remotes

$ git remote -v
# origin https://github.com/earth2travis/processing.git (fetch)
# origin https://github.com/earth2travis/processing.git (push)


Change the 'origin' remote's URL

$ git remote set-url origin https://github.com/user/processing.git
replace user with GitHub username

# Verify new remote URL

$ git remote -v
# origin https://github.com/user/processing.git (fetch)
# origin https://github.com/user/processing.git (push)

Push tells Git where to put our commits.

  • Remote (repo): origin
  • Local (branch): master
  • -u: Remember parameters, for origin and master.

$ git push -u origin master

Remember the workflow.

add, commit, push

Create branch to add feature or fix bug.

$ git branch add_trees


See branches.

$ git branch

Switch branches.

$ git checkout add_trees


Add background image.

  • Open flocking.ide in Processing
  • replace:

void setup()...

and

void draw()...

With

PImage bg;
void setup() {
size(1000, 563);
bg = loadImage("trees.jpg");
flock = new Flock();
// Add an initial set of boids into the system
for (int i = 0; i < 150; i++) {
flock.addBoid(new Boid(width/2,height/2));}}
void draw() {
background(bg);
flock.run();}

Take a look.

  • Save flocking.ide
  • Run sketch

Check changes.

$ git status

Track changes.

$ git add flocking.pde

Commit changes.

$ git commit -m "Add trees in background."

Switch back to master branch.

$ git checkout master

Merge changes from add_trees branch into master branch.

$ git merge add_trees


Delete add_trees branch.

$ git branch -d add_trees


Push to remote repository.

$ git branch

$ git push

add, commit, push

Fancy Log

$ git log --graph --decorate --abbrev-commit --all --pretty=oneline

Quick Wins

  • Content, not files
  • Opt-in, not opt-out
  • Open, not locked
  • Distributed, not centralized
  • Conversations, not cut-offs
  • People, not tools
  • Journal, not backup
  • Anywhere, not just online

Learn Free

Git in your browser with Try Git

Pro Git by Scott Chacon is available online.

Learn More

Code School

 

Cheat

Git Workflow and its commands…

Thank You

l4m

Resources

Attribution

Git Processing 101

By tRavIs McCutcheon