GitGot: 
The Swiss Army Chainsaw 
of Git Repo Management 
John SJ Anderson • Infinity Interactive 
@genehack • OSCON'14
Hi, I'm John.
@genehack
Sammy
@sammygenehack
Two kids
A Wife
long-suffering conference widow 
A Wife
photobomber is 
not impressed. 
long-suffering conference widow 
A Wife
Job
Hobbies
Hobbies
Hobbies
Lots of Hobbies
I've got a lot of balls in the air
Revision control 
$HOME
Why bother?
say 
automation 
again
Ingy döt Net
Things I wanted to steal
Things I wanted to add
App::AYCABTU?!?!‽
GitGot
Whirlwind 
Tour
got add
% got add 
Name: foo 
URL: 
Path: /Users/genehack/foo 
Tags: bar
got add -D
got clone <REPO URL>
got clone -D <REPO URL>
got fork <GITHUB URL>
~/.gitgot
- name: App-Amylase 
path: /Users/genehack/proj/App-Amylase 
repo: git@github.com:genehack/App-Amylase.git 
type: git 
- name: Git-Wrapper 
path: /Users/genehack/proj/Git-Wrapper 
repo: git@github.com:genehack/Git-Wrapper.git 
tags: git 
type: git 
- name: HiD 
path: /Users/genehack/proj/HiD 
repo: git@github.com:genehack/HiD.git 
type: git 
- name: Perl-Build 
path: /opt/plenv/plugins/perl-build 
repo: git://github.com/tokuhirom/Perl-Build.git 
type: git
But now what?
got list
got ls
1) App-Amylase git git@github.com:genehack/App-Amylase.git 
2) Git-Wrapper git git@github.com:genehack/Git-Wrapper.git 
3) HiD git git@github.com:genehack/HiD.git 
4) Perl-Build git git://github.com/tokuhirom/Perl-Build.git 
5) Perl-Critic git git@github.com:genehack/Perl-Critic.git 
6) STAMPS git git@github.com:genehack/STAMPS.git 
7) advanced-moose-class git ssh://git@git.iinteractive.com/train/advanced-moose-class.git 
8) app-gitgitr git git@github.com:genehack/app-gitgitr.git 
9) app-gitgot git git@github.com:genehack/app-gitgot.git
got ls -q
1) App-Amylase 
2) Git-Wrapper 
3) HiD 
4) Perl-Build 
5) Perl-Critic 
6) STAMPS 
7) advanced-moose-class 
8) app-gitgitr 
9) app-gitgot
got ls [repos]
got ls 5
5) Perl-Critic
got ls 5-8
5) Perl-Critic 
6) STAMPS 
7) advanced-moose-class 
8) app-gitgitr
got ls HiD
3) HiD
got ls -t git
2) Git-Wrapper 
8) app-gitgitr 
9) app-gitgot
got ls 5-8 HiD 21 -t git
2) Git-Wrapper 
3) HiD 
5) Perl-Critic 
6) STAMPS 
7) advanced-moose-class 
8) app-gitgitr 
9) app-gitgot 
21) etc
got status
got st
1) App-Amylase : OK 
2) Git-Wrapper : OK 
3) HiD : OK 
4) Perl-Build : OK 
5) Perl-Critic : OK 
6) STAMPS : OK 
7) advanced-moose-class : OK 
8) app-gitgitr : OK 
9) app-gitgot : OK
1) App-Amylase : OK 
2) Git-Wrapper : OK 
3) HiD : Dirty 
Dirty 
4) Perl-Build : OK 
5) Perl-Critic : OK 
6) STAMPS : OK 
7) advanced-moose-class : OK 
8) app-gitgitr : OK 
9) app-gitgot : OK
1) App-Amylase : OK 
2) Git-Wrapper : OK 
3) HiD : OK 
4) Perl-Build : Dirty 
5) Perl-Critic : OK 
6) STAMPS : OK 
7) advanced-moose-class : OK 
8) app-gitgitr : OK 
9) app-gitgot : OK 
1) 1) App-App-Amylase Amylase : : OK 
OK 
2) 2) Git-Git-Wrapper Wrapper : : OK 
OK 
3) 3) HiD HiD : : OK 
OK 
4) 4) Perl-Perl-Build Build : : OK 
OK 
5) 5) Perl-Perl-Critic Critic : : OK 
OK 
6) STAMPS STAMPS : : OK OK Ahead by 1 
7) advanced-moose-class : OK 
8) app-gitgitr : OK 
9) app-gitgot : OK 
7) advanced-moose-class : OK 
8) app-gitgitr : OK 
9) app-gitgot : OK
got st -q
3) HiD : Dirty 
6) STAMPS : OK Ahead by 1 
got st -q 
Dirty
got update
got up
1) App-Amylase : Up to date 
2) Git-Wrapper : Up to date 
3) HiD : Up to date 
4) Perl-Build : Updated 
Updating 7f25f89..72587c8 
Fast-forward 
lib/Perl/Build.pm | 14 +++++++++++++- 
script/perl-build | 14 +++++++++++++- 
2 files changed, 26 insertions(+), 2 deletions(-) 
5) Perl-Critic : Up to date
got update_status
got upst
got upst -q
How much would you pay?
Wait, don't answer yet
got fetch
got push
got gc
got this
got that
got chdir
got cd
got tmux
got tmux -s
How much 
would 
you pay 
now
Good news! 
It's free!
Works on any perl 
from the last 5 years
cpan App::GitGot
cpanm App::GitGot
Find me at OSCON 
and I'll help you install!
Easy to extend
package App::GitGot::Command::chdir; 
# ABSTRACT: open a subshell in a selected project 
! 
use Mouse; 
extends 'App::GitGot::Command'; 
use 5.010; 
! 
sub command_names { qw/ chdir cd / } 
! 
sub _execute { 
my( $self, $opt, $args ) = @_; 
! 
unless ( $self->active_repos and $self->active_repos == 1 ) { 
say STDERR 'ERROR: You need to select a single repo'; 
exit(1); 
} 
! 
my( $repo ) = $self->active_repos; 
! 
chdir $repo->path 
or say STDERR "ERROR: Failed to chdir to repo ($!)" and exit(1); 
! 
exec $ENV{SHELL}; 
} 
! 
__PACKAGE__->meta->make_immutable; 
1;
package App::GitGot::Command::chdir; 
# ABSTRACT: open a subshell in a 
selected project 
! 
use Mouse; 
extends 'App::GitGot::Command'; 
use 5.010;
sub command_names { qw/ chdir cd / } 
!
sub _execute { 
my( $self, $opt, $args ) = @_; 
! 
unless ( $self->active_repos and $self->active_repos == 1 ) { 
say STDERR 'ERROR: You need to select a single repo'; 
exit(1); 
} 
! 
my( $repo ) = $self->active_repos; 
! 
chdir $repo->path 
or say STDERR "ERROR: Failed to chdir to repo ($!)" 
and exit(1); 
! 
exec $ENV{SHELL}; 
}
package App::GitGot::Command::chdir; 
# ABSTRACT: open a subshell in a selected project 
! 
use Mouse; 
extends 'App::GitGot::Command'; 
use 5.010; 
! 
sub command_names { qw/ chdir cd / } 
! 
sub _execute { 
my( $self, $opt, $args ) = @_; 
! 
unless ( $self->active_repos and $self->active_repos == 1 ) { 
say STDERR 'ERROR: You need to select a single repo'; 
exit(1); 
} 
! 
my( $repo ) = $self->active_repos; 
! 
chdir $repo->path 
or say STDERR "ERROR: Failed to chdir to repo ($!)" and exit(1); 
! 
exec $ENV{SHELL}; 
} 
! 
__PACKAGE__->meta->make_immutable; 
1;
Suggestions welcome!
Wait… 
there's 
more!
App::MiseEnPlace
% cat .mise 
--- 
manage: 
- doc 
- etc 
- private 
- proj/* 
- src/* 
create: 
directories: 
- bin 
- proj 
- src 
- var 
links: 
- Desktop: var/tmp 
- Desktop: tmp
create: 
directories: 
- ~/.ssh 
links: 
- authinfo: ~/.authinfo 
- bash_private: ~/.bash_private 
- github-identity: ~/.github-identity 
- netrc: ~/.netrc 
- ssh/authorized_keys: ~/.ssh/authorized_keys 
- ssh/config: ~/.ssh/config 
- ssh/id_dsa: ~/.ssh/id_dsa 
- ssh/id_dsa.pub: ~/.ssh/id_dsa.pub 
- zsh_private: ~/.zsh_private
got
https://github.com/ 
genehack/app-gitgot
https://github.com/ 
genehack/app-miseenplace
Thanks 
Ingy döt Net 
Yanick Champoux 
Michael Greb 
Rolando Pereira 
Chris Prather
Questions?
https://github.com/genehack/ 
app-gitgot 
! 
https://github.com/genehack/ 
app-miseenplace

More Related Content

PDF
Tools Bringing Happiness
PDF
My Notes from https://www.codeschool.com/courses/git-real
PDF
Git inter-snapshot public
PDF
[로켓 자바] Part 1 성능 튜닝 마인드 확립
PDF
JPA Week5. Join Fetch
PDF
Git real slides
PDF
Loading...git
PDF
떠먹는 '오브젝트' Ch02 객체지향 프로그래밍
Tools Bringing Happiness
My Notes from https://www.codeschool.com/courses/git-real
Git inter-snapshot public
[로켓 자바] Part 1 성능 튜닝 마인드 확립
JPA Week5. Join Fetch
Git real slides
Loading...git
떠먹는 '오브젝트' Ch02 객체지향 프로그래밍

What's hot (20)

PDF
Git Real
PDF
JPA Week3 Entity Mapping / Hexagonal Architecture
PDF
DO YOU WANT TO USE A VCS
KEY
Gittalk
PDF
Reading Other Peoples Code (NDC London 2019)
PDF
Ankara jug mayıs 2013 sunumu
PDF
Geb for browser automation
PDF
Let the contribution begin
KEY
Git Basics - RubyFest 2009
PDF
Secure Programming Practices in C++ (NDC Oslo 2018)
PDF
git. WTF is it doing anyway?
ODP
Introduction to Git (Greg Lonnon)
PDF
Week7 bean life cycle
PDF
Puppet Continuous Integration with PE and GitLab
PDF
Git, Jenkins & Chuck
PDF
とりあえずはじめるChatOps
ODP
DrupalCafe5 VCS
PPT
Testing of javacript
KEY
DevQuiz 2011 の模範解答 Android編
PDF
C++ The Principles of Most Surprise
Git Real
JPA Week3 Entity Mapping / Hexagonal Architecture
DO YOU WANT TO USE A VCS
Gittalk
Reading Other Peoples Code (NDC London 2019)
Ankara jug mayıs 2013 sunumu
Geb for browser automation
Let the contribution begin
Git Basics - RubyFest 2009
Secure Programming Practices in C++ (NDC Oslo 2018)
git. WTF is it doing anyway?
Introduction to Git (Greg Lonnon)
Week7 bean life cycle
Puppet Continuous Integration with PE and GitLab
Git, Jenkins & Chuck
とりあえずはじめるChatOps
DrupalCafe5 VCS
Testing of javacript
DevQuiz 2011 の模範解答 Android編
C++ The Principles of Most Surprise

Viewers also liked (17)

PPTX
Cuestionario niños primero
PDF
The Ultimate Car Repair Cheatsheet
PDF
Parts of speech_handbook
DOCX
Resepi nasi ayam
PPTX
Convertible Leasing Guide
PPTX
How a guitar works
PDF
10 Reasons Native Advertising is for Hospitality Business
DOC
Cuestionario De Creacion De Ambientes 2
PPTX
Dzul herrerapractica2
PPTX
Behind the Curtain: Real-world HR Tech Implementations and What You Need to ...
PDF
20160629 Habitat Introduction: Austin DevOps/Mesos User Group
PDF
Emma Burlow, QSA Partners, Go Green December Business Breakfast, St Mary Redc...
PPTX
Licencias
PPTX
Game of thrones slide show UPDATED
PPT
Game of thrones
PPTX
Simon Reason - Unleashing the power of your definition of done
Cuestionario niños primero
The Ultimate Car Repair Cheatsheet
Parts of speech_handbook
Resepi nasi ayam
Convertible Leasing Guide
How a guitar works
10 Reasons Native Advertising is for Hospitality Business
Cuestionario De Creacion De Ambientes 2
Dzul herrerapractica2
Behind the Curtain: Real-world HR Tech Implementations and What You Need to ...
20160629 Habitat Introduction: Austin DevOps/Mesos User Group
Emma Burlow, QSA Partners, Go Green December Business Breakfast, St Mary Redc...
Licencias
Game of thrones slide show UPDATED
Game of thrones
Simon Reason - Unleashing the power of your definition of done

Similar to GitGot: The Swiss Army Chainsaw of Git Repo Management (20)

PDF
Git::Hooks
DOCX
setting up a repository using GIT
KEY
Git and GitHub
PDF
An Introduction to Git (even for non-developers)
PDF
Introduction to Git (even for non-developers)
PPTX
Git Basic
PDF
Version Control and Git - GitHub Workshop
KEY
Git Magic: Versioning Files like a Boss
PDF
JAZOON'13 - Thomas Hug & Bartosz Majsak - Git Workshop -Essentials
PPTX
Git for a newbie
PDF
Introduction to Git for Non-Developers
PDF
Introduction to Git for Non-Developers
PDF
GIT_GITHUB_2016_06_17
PPTX
1-Intro to VC & GIT PDF.pptx
PDF
GTFO: Git Theory For OpenSource
PDF
Intro to Git and GitHub
PDF
Git Recipes 1st Edition Wodzimierz Gajda Auth
PDF
Github - Git Training Slides: Foundations
PPTX
Modern Perl for the Unfrozen Paleolithic Perl Programmer
Git::Hooks
setting up a repository using GIT
Git and GitHub
An Introduction to Git (even for non-developers)
Introduction to Git (even for non-developers)
Git Basic
Version Control and Git - GitHub Workshop
Git Magic: Versioning Files like a Boss
JAZOON'13 - Thomas Hug & Bartosz Majsak - Git Workshop -Essentials
Git for a newbie
Introduction to Git for Non-Developers
Introduction to Git for Non-Developers
GIT_GITHUB_2016_06_17
1-Intro to VC & GIT PDF.pptx
GTFO: Git Theory For OpenSource
Intro to Git and GitHub
Git Recipes 1st Edition Wodzimierz Gajda Auth
Github - Git Training Slides: Foundations
Modern Perl for the Unfrozen Paleolithic Perl Programmer

More from John Anderson (20)

PDF
#speakerlife
PDF
Logs are-magic-devfestweekend2018
PDF
Logs Are Magic: Why Git Workflows and Commit Structure Should Matter To You
PDF
A static site generator should be your next language learning project
PDF
Do you want to be right or do you want to WIN?
PDF
You got chocolate in my peanut butter! .NET on Mac & Linux
PDF
A static site generator should be your next language learning project
PDF
Old Dogs & New Tricks: What's New with Perl5 This Century
PDF
Introduction to Git (even for non-developers!)
PDF
A Modest Introduction To Swift
PDF
A static site generator should be your next language learning project
PDF
Logs Are Magic: Why Git Workflows and Commit Structure Should Matter To You
PDF
JSON Web Tokens Will Improve Your Life
PDF
Old Dogs & New Tricks: What's New With Perl5 This Century
PDF
A Modest Introduction to Swift
PDF
Logs Are Magic: Why Git Workflows and Commit Structure Should Matter To You
PDF
Friends Don't Let Friends Browse Unencrypted: Running a VPN for friends and f...
PDF
A Modest Introduction To Swift
PDF
Logs Are Magic! Why git workflows & commit structure should matter to you
PDF
#speakerlife
#speakerlife
Logs are-magic-devfestweekend2018
Logs Are Magic: Why Git Workflows and Commit Structure Should Matter To You
A static site generator should be your next language learning project
Do you want to be right or do you want to WIN?
You got chocolate in my peanut butter! .NET on Mac & Linux
A static site generator should be your next language learning project
Old Dogs & New Tricks: What's New with Perl5 This Century
Introduction to Git (even for non-developers!)
A Modest Introduction To Swift
A static site generator should be your next language learning project
Logs Are Magic: Why Git Workflows and Commit Structure Should Matter To You
JSON Web Tokens Will Improve Your Life
Old Dogs & New Tricks: What's New With Perl5 This Century
A Modest Introduction to Swift
Logs Are Magic: Why Git Workflows and Commit Structure Should Matter To You
Friends Don't Let Friends Browse Unencrypted: Running a VPN for friends and f...
A Modest Introduction To Swift
Logs Are Magic! Why git workflows & commit structure should matter to you
#speakerlife

Recently uploaded (20)

PPTX
Going_to_Greece presentation Greek mythology
PDF
B2B Marketing mba class material for study
PPTX
Information and Network Security types of cipher
PDF
B450721.pdf American Journal of Multidisciplinary Research and Review
PPTX
Dating App Development Cost: Factors, Features & Estimates
PPTX
DAY 1 - Introduction to Git.pptxttttttttttttttttttttttttttttt
PPTX
REE IN CARBONATITE EEPOSIT AND INCLUDE CASE STUDY ON AMBADUNGAR
PPTX
c_languagew_structure_and_functions.pptx
PDF
Black and White Modern Technology Presentation.pdf
PPTX
National-Historical-Commission-of-the-PhilippinesNHCP.pptx
PPTX
IoT Lecture IoT Lecture IoT Lecture IoT Lecture
PPTX
WEEK 15.pptx WEEK 15.pptx WEEK 15.pptx WEEK 15.pptx
PDF
JuanConnect E-Wallet Guide for new users.pdf
PDF
Tailieuhoctiengnhat.com__(N5) 1021 từ vựng tổng hợp.pdf
PDF
Role of Data & Analytics in Modern Shopify App Development.pdf
PPTX
Data Flows presentation hubspot crm.pptx
PDF
ilide.info-huawei-odn-solution-introduction-pdf-pr_a17152ead66ea2617ffbd01e8c...
PDF
Information Technology practical assignment
PDF
Lesson.-Reporting-and-Sharing-of-Findings.pdf
PPTX
Information and Network Security Introduction
Going_to_Greece presentation Greek mythology
B2B Marketing mba class material for study
Information and Network Security types of cipher
B450721.pdf American Journal of Multidisciplinary Research and Review
Dating App Development Cost: Factors, Features & Estimates
DAY 1 - Introduction to Git.pptxttttttttttttttttttttttttttttt
REE IN CARBONATITE EEPOSIT AND INCLUDE CASE STUDY ON AMBADUNGAR
c_languagew_structure_and_functions.pptx
Black and White Modern Technology Presentation.pdf
National-Historical-Commission-of-the-PhilippinesNHCP.pptx
IoT Lecture IoT Lecture IoT Lecture IoT Lecture
WEEK 15.pptx WEEK 15.pptx WEEK 15.pptx WEEK 15.pptx
JuanConnect E-Wallet Guide for new users.pdf
Tailieuhoctiengnhat.com__(N5) 1021 từ vựng tổng hợp.pdf
Role of Data & Analytics in Modern Shopify App Development.pdf
Data Flows presentation hubspot crm.pptx
ilide.info-huawei-odn-solution-introduction-pdf-pr_a17152ead66ea2617ffbd01e8c...
Information Technology practical assignment
Lesson.-Reporting-and-Sharing-of-Findings.pdf
Information and Network Security Introduction

GitGot: The Swiss Army Chainsaw of Git Repo Management