Slide 1

Slide 1 text

GIT&GITHUB&SECRETS

Slide 2

Slide 2 text

NO FORKING HOLMAN @ LOST YO QUIT READING THIS SHIT

Slide 3

Slide 3 text

githu

Slide 4

Slide 4 text

I AM DEFINITELY NOT A SMART GUY

Slide 5

Slide 5 text

LUCKILY I HANG AROUND THIS CREW A LOT

Slide 6

Slide 6 text

THIS IS MOSTLY WHAT GETS DISCUSSED

Slide 7

Slide 7 text

BUT SOMETIMES ALSO GIT THINGS

Slide 8

Slide 8 text

LEMME THROW A BUNCH AT YOU ALL AT ONCE

Slide 9

Slide 9 text

SECRETS

Slide 10

Slide 10 text

SOMETIMES FEATURES DON’T MAKE IT INTO THE UI

Slide 11

Slide 11 text

HIDDEN HTML DIFF TOOLS EMAIL HACKS DEEP LINKING CLEVER APIS MEANING OF LIFE

Slide 12

Slide 12 text

EXPERIMENTATION

Slide 13

Slide 13 text

I’d use this all the time! But Holman, “ WHY DON’T YOU JUST ADD A BUTTON? You ass.”

Slide 14

Slide 14 text

lemme mock that up for u

Slide 15

Slide 15 text

No content

Slide 16

Slide 16 text

aim for simplicity BUT STAY FLEXIBLE

Slide 17

Slide 17 text

GITHUB

Slide 18

Slide 18 text

.DIFF & .PATCH

Slide 19

Slide 19 text

ADD OR TO URLS: .DIFF .PATCH COMPARE VIEWS PULL REQUESTS COMMIT PAGES .DIFF & .PATCH

Slide 20

Slide 20 text

IGNORE WHITESPACE ADD TO ANY DIFF URL ?w=1

Slide 21

Slide 21 text

SUBVERSION EVERY GIT REPOSITORY SVN REPOSITORY is also a

Slide 22

Slide 22 text

SUBVERSION SVN/GIT SERVICE LAYER

Slide 23

Slide 23 text

SUBVERSION SVN CALLS TRANSLATE INTO GIT CALLS ON OUR SERVERS

Slide 24

Slide 24 text

SUBVERSION SVN CHECKOUT GITHUB.COM/HOLMAN/BOOM

Slide 25

Slide 25 text

HTTP & SSH ZOMG SNEAKY STEALTH CHANGES

Slide 26

Slide 26 text

HTTP & SSH PREVIOUSLY

Slide 27

Slide 27 text

HTTP & SSH NEW HOTNESS

Slide 28

Slide 28 text

HTTP & SSH WE USE SMART HTTP (EFFICIENT SERVERSIDE PACKFILE GENERATION)

Slide 29

Slide 29 text

HTTP & SSH WE USE SMART HTTP (EFFICIENT SERVERSIDE PACKFILE GENERATION) CORPORATE FIREWALLS (OH NUTS)

Slide 30

Slide 30 text

HTTP & SSH WE USE SMART HTTP (EFFICIENT SERVERSIDE PACKFILE GENERATION) CORPORATE FIREWALLS (OH NUTS) NO KEY GENERATION (WINDOWS, NON-NECKBEARDS)

Slide 31

Slide 31 text

HTTP & SSH LOLWAT I DONT CARE

Slide 32

Slide 32 text

HTTP & SSH › git push origin master Username for 'github.com': FUUUUUUUUUUUUUUUUU

Slide 33

Slide 33 text

HTTP & SSH CREDENTIAL CACHING IN GIT 1.7.9 HELP.GITHUB.COM/ARTICLES/SET-UP-GIT (INSTALLED BY HOMEBREW)

Slide 34

Slide 34 text

HTTP & SSH STICKY SELECTOR CLICK THIS, GITHUB REMEMBERS

Slide 35

Slide 35 text

GIT CLONE HTTPS://GITHUB.COM/HOLMAN/BOOM CLONING WITHOUT .GIT GIT CLONE HTTPS://GITHUB.COM/HOLMAN/BOOM.GIT

Slide 36

Slide 36 text

GITHUB HD™ WITH OUR NEW ICON SET, WE’RE SUPER-ZOOMABLE (⌘++ on a Mac or pinch on iOS)

Slide 37

Slide 37 text

GITHUB HD™

Slide 38

Slide 38 text

GITHUB HD™

Slide 39

Slide 39 text

GITHUB HD™

Slide 40

Slide 40 text

GITHUB HD™

Slide 41

Slide 41 text

AUDITING PUBLIC KEYS GITHUB.COM/SETTINGS/SECURITY REPOSITORIES ·

Slide 42

Slide 42 text

OCTOCAT CHEAP ISTOCKPHOTO ILLUSTRATION FOR OUR ERROR PAGE

Slide 43

Slide 43 text

OCTOCAT THEN PEOPLE LIKED HIM

Slide 44

Slide 44 text

OCTOCAT BECAME SORT OF A GITHUB MASCOT

Slide 45

Slide 45 text

OCTOCAT HOLY CRAP WE SHOULD GET EXCLUSIVE RIGHTS

Slide 46

Slide 46 text

OCTOCAT DOZENS OF OCTOCATS OCTODEX.GITHUB.COM

Slide 47

Slide 47 text

GIT.IO GITHUB.COM URL SHORTENER

Slide 48

Slide 48 text

GIT.IO git.io/nxVVig SHELL SCRIPT

Slide 49

Slide 49 text

GIT.IO › gitio USAGE http://git.io/nxVVig

Slide 50

Slide 50 text

OS X 

Slide 51

Slide 51 text

WINDOWS

Slide 52

Slide 52 text

LINGUIST LANGUAGE detection syntax highlighting vendored files

Slide 53

Slide 53 text

LINGUIST GITHUB.COM/GITHUB/LINGUIST OPEN SOURCE AT:

Slide 54

Slide 54 text

EMAIL REPLIES REPLY TO AN EMAIL! SRSLY!

Slide 55

Slide 55 text

ABUSING GIST

Slide 56

Slide 56 text

ABUSING GIST AIN’T JUST FOR SNIPPETS

Slide 57

Slide 57 text

@NRRRDCORE Julie Horvath ABUSING GIST DESIGNERS

Slide 58

Slide 58 text

ABUSING GIST DESIGNERS

Slide 59

Slide 59 text

ABUSING GIST DESIGNERS PROTOTYPING TOOL COMMENTS SCREENSHOTS CODE

Slide 60

Slide 60 text

ABUSING GIST DEVELOPERS

Slide 61

Slide 61 text

ABUSING GIST DEVELOPERS GISTS ARE FULL REPOS

Slide 62

Slide 62 text

jeffkreeftmeijer.com/2011/microgems-five-minute-rubygems ABUSING GIST DEVELOPERS MICROGEMS

Slide 63

Slide 63 text

aka GEM IN A GIST INCLUDE A GEMSPEC IN YOUR GIST ABUSING GIST DEVELOPERS

Slide 64

Slide 64 text

gem 'test-spec-mini', :git => 'git://gist.github.com/1806986.git' GEMFILE ABUSING GIST DEVELOPERS

Slide 65

Slide 65 text

git.io/mini EXAMPLE ABUSING GIST DEVELOPERS

Slide 66

Slide 66 text

ABUSING GIST DEVELOPERS QUICK, DISPOSABLE PROJECTS

Slide 67

Slide 67 text

IMAGE VIEW MODES COMPARE IMAGE REVISIONS

Slide 68

Slide 68 text

IMAGE VIEW MODES SWIPE TO SEE DIFFERENCES

Slide 69

Slide 69 text

IMAGE VIEW MODES SWIPE TO SEE DIFFERENCES

Slide 70

Slide 70 text

HUB COMMAND LINE GITHUB

Slide 71

Slide 71 text

HUB brew install hub INSTALL

Slide 72

Slide 72 text

HUB hub clone holman/boom FANCY CLONING

Slide 73

Slide 73 text

HUB hub push origin,staging MULTI-REMOTE PUSHES

Slide 74

Slide 74 text

HUB hub pull-request -i ATTACH A PULL REQUEST TO AN ISSUE

Slide 75

Slide 75 text

HUB alias git=hub ALIASING FTW

Slide 76

Slide 76 text

HUB GITHUB.COM/DEFUNKT/HUB OPEN SOURCE AT:

Slide 77

Slide 77 text

ERROR PAGES

Slide 78

Slide 78 text

ACCELEROMETERS!

Slide 79

Slide 79 text

KEYBOARD SHORTCUTS tFILE FINDER

Slide 80

Slide 80 text

KEYBOARD SHORTCUTS

Slide 81

Slide 81 text

KEYBOARD SHORTCUTS w BRANCH SELECTOR

Slide 82

Slide 82 text

KEYBOARD SHORTCUTS

Slide 83

Slide 83 text

KEYBOARD SHORTCUTS SQUICK SEARCH

Slide 84

Slide 84 text

KEYBOARD SHORTCUTS ?ALL COMMANDS

Slide 85

Slide 85 text

SUBSCRIBING PEOPLES MOST OF OUR ISSUES END WITH MENTIONS

Slide 86

Slide 86 text

SUBSCRIBING PEOPLES MENTIONED USERS GET SUBSCRIBED TO ALL SUBSEQUENT NOTIFICATIONS

Slide 87

Slide 87 text

SUBSCRIBING PEOPLES ALSO MENTION TEAMS DIRECTLY @ORG/TEAM

Slide 88

Slide 88 text

AUTOLINKED SHAS GITHUB FLAVORED MARKDOWN MENTION SHA, WE AUTOLINK

Slide 89

Slide 89 text

AUTOLINKED CROSS-REPO SHAS GITHUB FLAVORED MARKDOWN USER@SHA1 USER/REPO@SHA1

Slide 90

Slide 90 text

AUTOLINKED CROSS-REPO ISSUES GITHUB FLAVORED MARKDOWN #1 USER#1 · USER/REPO#1 ·

Slide 91

Slide 91 text

FENCED CODE HIGHLIGHTING ```ruby require 'redcarpet' markdown = Redcarpet.new("Hello World!") puts markdown.to_html ``` SPECIFY YOUR LANGUAGE GITHUB FLAVORED MARKDOWN

Slide 92

Slide 92 text

FENCED CODE HIGHLIGHTING require 'redcarpet' markdown = Redcarpet.new("Hello World!") puts markdown.to_html RENDERED README OUTPUT GITHUB FLAVORED MARKDOWN

Slide 93

Slide 93 text

AUTO-CLOSING ISSUES CLOSES/CLOSED/CLOSE #1 FIXES/FIXED/FIX #1

Slide 94

Slide 94 text

COMMITS BY AUTHOR github.com/play/play/commits/master REPOSITORY COMMITS

Slide 95

Slide 95 text

COMMITS BY AUTHOR ?author=holman AUTHOR QUERY PARAM

Slide 96

Slide 96 text

BRANCH-TO-BRANCH PULL REQUESTS PULLS NEEDN’T BE FROM A FORK

Slide 97

Slide 97 text

BRANCH-TO-BRANCH PULL REQUESTS WE ONLY WORK OFF BRANCHES

Slide 98

Slide 98 text

BRANCH-TO-BRANCH PULL REQUESTS SIMPLE PERMISSIONS SIMPLE GIT COMMANDS

Slide 99

Slide 99 text

USE SCREENSHOTS PULL REQUESTS MARKDOWN ![title](http://example.com/image.png)

Slide 100

Slide 100 text

CONVERT ISSUE TO PULL PULL REQUESTS POST /repos/:user/:repo/pulls { "issue": "5", "head": "octocat:new-feature", "base": "master" }

Slide 101

Slide 101 text

EMOJI! EMOJI-CHEAT-SHEET.COM SHIPIT +1 -1 RAGE2 SHIT HEART FIRE :EMOJI:

Slide 102

Slide 102 text

LINE LINKING CLICK A LINE ADDS #L16 TO URL

Slide 103

Slide 103 text

LINE LINKING ALSO ACCEPTS RANGES #L16-25

Slide 104

Slide 104 text

ADVANCED COMPARE VIEW github.com/user/repo/compare/{range} {RANGE} = MASTER...MY-BRANCH

Slide 105

Slide 105 text

ADVANCED COMPARE VIEW {RANGE} IS SMART

Slide 106

Slide 106 text

ADVANCED COMPARE VIEW MASTER@{1.day.ago}...MASTER

Slide 107

Slide 107 text

ADVANCED COMPARE VIEW MASTER@{yesterday}...MASTER

Slide 108

Slide 108 text

ADVANCED COMPARE VIEW MASTER@{2012-02-25}...MASTER

Slide 109

Slide 109 text

GIT

Slide 110

Slide 110 text

COMMITLESS COMMITS --allow-empty

Slide 111

Slide 111 text

COMMITLESS COMMITS › git commit \ -m “LOOK AT ME TROLOLOL” \ --allow-empty [master 1a3fbce] LOOK AT ME TROLOLOL

Slide 112

Slide 112 text

STAGING HUNKS diff --git a/README.md b/README.md index e69de29..a224a77 100644 --- a/README.md +++ b/README.md @@ -0,0 +1,5 @@ +# THE README + +## A quality story by @holman Stage this hunk [y,n,q,a,d,/,e,?]? git add -p

Slide 113

Slide 113 text

STAGING HUNKS Stage this hunk [y,n,q,a,d,/,e,?]? ? y - stage this hunk n - do not stage this hunk q - quit; do not stage this hunk nor any of the remaining ones a - stage this hunk and all later hunks in the file d - do not stage this hunk nor any of the later hunks in the file g - select a hunk to go to / - search for a hunk matching the given regex j - leave this hunk undecided, see next undecided hunk J - leave this hunk undecided, see next hunk k - leave this hunk undecided, see previous undecided hunk K - leave this hunk undecided, see previous hunk s - split the current hunk into smaller hunks e - manually edit the current hunk ? - print help git add -p

Slide 114

Slide 114 text

STAGING HUNKS git add -p SMALL, LOGICAL COMMIT SETS

Slide 115

Slide 115 text

LAST MATCHED COMMIT SEARCH git show :/query

Slide 116

Slide 116 text

LAST MATCHED COMMIT SEARCH › git show :/stupid commit 76f4b2b15722d05c7acf7ec12b3ea98d6fb4c213 Author: Aman Gupta Date: Fri Apr 27 16:34:55 2012 -0700 stupid hacks around rails Logger monkey patching

Slide 117

Slide 117 text

GO BACK › git checkout - Switched to branch 'master' › git checkout - Switched to branch 'master' › git checkout - Switched to branch 'next' › cd -

Slide 118

Slide 118 text

MERGED BRANCHES › git branch --merged * master change_email auth

Slide 119

Slide 119 text

MERGED BRANCHES › git branch --no-merged date-fix test-speed

Slide 120

Slide 120 text

MERGED BRANCHES › git branch --contains 838ad46 date-fix

Slide 121

Slide 121 text

CONTENT COPY › git checkout BRANCH -- path/to/file.rb COPIES file.rb AT BRANCH WITHOUT SWITCHING BRANCHES

Slide 122

Slide 122 text

REACHABLE COMMITS › git log branchA ^branchB COMMITS IN A THAT AREN’T IN B

Slide 123

Slide 123 text

FINDING LOST COMMITS › git fsck −−lost-found dangling blob 517b8fc32153761aadc15a96947911938f809a28 dangling commit e4fb392355bf37db17f2f601ca68a208a7c16a1d dangling commit f53b6771ed929896eca1149e741084930262b9fb dangling blob 61bd82962fc470543b17ce6adee37c184cae63cf dangling commit 9cbd3ff21acbd8673259969efaa0a9762fe75046 ...

Slide 124

Slide 124 text

DIFFSTATS › git diff HEAD^ --stat README.md | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)

Slide 125

Slide 125 text

BLAME › git blame ^b649495 (Zach Holman 1) class User ^b649495 (Zach Holman 2) def name c8c05b6e (Zach Holman 3) 'Foucault' ^b649495 (Zach Holman 4) end ^b649495 (Zach Holman 5) end

Slide 126

Slide 126 text

BLAME › git blame ^b649495 (Zach Holman 1) class User ^b649495 (Zach Holman 2) def name c8c05b6e (Zach Holman 3) 'Foucault' ^b649495 (Zach Holman 4) end ^b649495 (Zach Holman 5) end

Slide 127

Slide 127 text

BLAME › git blame -w ^b649495 (Zach Holman 1) class User ^b649495 (Zach Holman 2) def name ^b649495 (Zach Holman 3) 'Foucault' ^b649495 (Zach Holman 4) end ^b649495 (Zach Holman 5) end IGNORE WHITESPACE

Slide 128

Slide 128 text

BLAME › git blame -M A B DETECT MOVES

Slide 129

Slide 129 text

BLAME › git blame -M B A DETECT MOVES

Slide 130

Slide 130 text

BLAME › git blame -M DETECT MOVES BLAMES ORIGINAL COMMIT, NOT THE MOVE COMMIT

Slide 131

Slide 131 text

BLAME › git blame -C DETECT MOVES OVER FILES LIKE -M, BUT LOOKS AT OTHER FILES IN THAT SAME COMMIT

Slide 132

Slide 132 text

BLAME › git blame -CC DETECT MOVES OVER FILES ALSO LOOKS AT THE COMMIT THE FILE WAS CREATED IN

Slide 133

Slide 133 text

BLAME › git blame -CCC DETECT MOVES OVER FILES ALSO LOOKS AT ALL COMMITS

Slide 134

Slide 134 text

MULTI-REMOTE FETCHES › git config remotes.mygroup 'remote1 remote2' › git fetch mygroup

Slide 135

Slide 135 text

A BETTER STATUS › git status › git status # On branch master # Changes not staged for commit: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # modified: README.md # no changes added to commit (use "git add" and/or "git commit -a")

Slide 136

Slide 136 text

A BETTER STATUS › git status -sb ## master M README.md

Slide 137

Slide 137 text

WORD DIFFING › git diff HEAD^ index 37ebc1b..2589f44 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,3 @@ # This is a repository -There are many like it, but this one is mine. +There are many like it, but this one is prolly mine.

Slide 138

Slide 138 text

WORD DIFFING › git diff HEAD^ --word-diff index 37ebc1b..2589f44 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,3 @@ # This is a repository There are many like it, but this one is {+prolly+} mine.

Slide 139

Slide 139 text

CONFIG: SPELLING › git comit git: 'comit' is not a git command. See 'git --help'. Did you mean this? commit

Slide 140

Slide 140 text

CONFIG: SPELLING › git comit WARNING: You called a Git command named 'comit', which does not exist. Continuing under the assumption that you meant 'commit' in 0.1 seconds automatically... › git config --global help.autocorrect 1

Slide 141

Slide 141 text

CONFIG: GIT RERERE › git config --global rerere.enabled 1 REUSE RECORDED RESOLUTION REMEMBERS AND RECORDS MERGE CONFLICTS LONG-RUNNING BRANCHES

Slide 142

Slide 142 text

CONFIG: COLOR! › git config --global color.ui 1

Slide 143

Slide 143 text

ALIAS: GIT-AMEND › git commit --amend -C HEAD › git-amend

Slide 144

Slide 144 text

ALIAS: GIT-UNDO › git reset --soft HEAD^ (RETAINS COMMIT AS STAGED)

Slide 145

Slide 145 text

ALIAS: GIT-COUNT › git shortlog -sn 500 Zach Holman 42 Jon Maddox 29 Jason Costello 18 Joey Wendt 17 Aman Gupta 13 Michael Edwards 10 Ben Bleikamp 9 medwards 6 Paul Betts 5 Tom Bell ...

Slide 146

Slide 146 text

SCRIPT: GIT-CREDIT › git commit --amend --author "$1 <$2>" -C HEAD › git credit "Zach Holman" [email protected] SETS HEAD’S AUTHOR AS SOMEONE ELSE

Slide 147

Slide 147 text

Whew.

Slide 148

Slide 148 text

Also, AN OCTOCAT: 4 LEGS 1 TAIL

Slide 149

Slide 149 text

THANKS&THANKS

Slide 150

Slide 150 text

ZACHHOLMAN ZACHHOLMAN.COM/TALKS @HOLMAN