Slide 1

Slide 1 text

@patrickmckenna ! " Universe Git & GitHub Secrets - secret subjective, aiming for practical rather than esoteric - 2 areas of focus: - under-appreciated features - things we do at GitHub

Slide 2

Slide 2 text

! @patrickmckenna " Universe Note on URLs domains omitted; prefix with github.com or

Slide 3

Slide 3 text

! @patrickmckenna " Universe Get commits by author user/repo/commits?author=user Assume you're a team lead. You've been assigned to take over an existing project, and want a quick sense for who's done what. It's hard to beat the speed of a URL bar, so you get commits by author.

Slide 4

Slide 4 text

@patrickmckenna " Universe

Slide 5

Slide 5 text

! @patrickmckenna " Universe Compare view user/repo/compare You also want a sense of how much progress has been made on a particular feature branch, so you bring up github.com's compare view.

Slide 6

Slide 6 text

@patrickmckenna " Universe the web UI

Slide 7

Slide 7 text

! @patrickmckenna " Universe Compare view user/repo/compare/commit-ish… commit-ish If you know the revisions you’d like to compare… - commit-ish meaning commit sha, branch, tag, time

Slide 8

Slide 8 text

@patrickmckenna " Universe nb: this is actually the same output as git log ..

Slide 9

Slide 9 text

! @patrickmckenna " Universe Suppress whitespace changes ?w=1 That leads you to one diff that includes whitespace errors, and you don't want those cluttering up the screen, so: add `?w=1` to diffs to suppress whitespace changes

Slide 10

Slide 10 text

@patrickmckenna " Universe (git analogue `git diff -b` or `git diff -w`?)

Slide 11

Slide 11 text

@patrickmckenna " Universe

Slide 12

Slide 12 text

! @patrickmckenna " Universe Highlight lines user/repo/blob/commit-ish/ pathspec#L1-L2 In another commit listed in that compare view, you find a particularly clever (or problematic) few lines of code. You want to share this with your team, but don't want to just include a link to the whole file. So you: highlight lines of plaintext file

Slide 13

Slide 13 text

@patrickmckenna " Universe

Slide 14

Slide 14 text

@patrickmckenna " Universe - nb: works for plaintext, not rendered types like Markdown - can also generate URL by clicking on lines, then shift-clicking subsequent lines as needed

Slide 15

Slide 15 text

! @patrickmckenna " Universe Avatar URL user.png To celebrate the dev whose work you're highlighting, you decide to include their face in the `README`, as a visual thank you.

Slide 16

Slide 16 text

@patrickmckenna " Universe

Slide 17

Slide 17 text

@patrickmckenna " Universe

Slide 18

Slide 18 text

! @patrickmckenna " Universe Share your guidelines CONTRIBUTING.md Another unknown or overlooked “special” file on GitHub.

Slide 19

Slide 19 text

@patrickmckenna " Universe

Slide 20

Slide 20 text

@patrickmckenna " Universe

Slide 21

Slide 21 text

! @patrickmckenna " Universe Markdown - internal links [link text](#section-name)

Slide 22

Slide 22 text

! @patrickmckenna " Universe Markdown - relative links [doc](path/to/file)

Slide 23

Slide 23 text

! @patrickmckenna " Universe Pre-populated threads /user/repo/issues/new? title=your_title_here& labels%5B%5D=your_label_here& body=your_text_here Later, in browsing through the project's Issues, you find yourself wishing there was a consistent format used for new Issues. That leads you to include in the `README` links for new, pre-populated threads.

Slide 24

Slide 24 text

@patrickmckenna " Universe if the label name doens’t exist, no label will be applied

Slide 25

Slide 25 text

! @patrickmckenna " Universe Keyboard shortcuts shift + ? You don't like using the trackpad. So you try this.

Slide 26

Slide 26 text

@patrickmckenna " Universe

Slide 27

Slide 27 text

@patrickmckenna " Universe

Slide 28

Slide 28 text

! @patrickmckenna " Universe Fuzzy file finder t After celebrating, you recall the task at hand: review the current implementation of `foo`, the definition of which lives in a filename you can't quite remember. No fear, you use:

Slide 29

Slide 29 text

@patrickmckenna " Universe nb: keyboard navigation w/in fff

Slide 30

Slide 30 text

! @patrickmckenna " Universe Search syntax help.github.com/categories/search/ Alternate path 1: you can't remember even part of the filename, so you look for associated Issues and Pull Requests using the search filters.

Slide 31

Slide 31 text

@patrickmckenna " Universe

Slide 32

Slide 32 text

! @patrickmckenna " Universe Advanced search syntax shipit in:comment

Slide 33

Slide 33 text

@patrickmckenna " Universe nb: works for any emoji

Slide 34

Slide 34 text

! @patrickmckenna " Universe Advanced search syntax base:master is:unmerged updated:>=2015-10-01

Slide 35

Slide 35 text

@patrickmckenna " Universe nb: pro-tip at bottom

Slide 36

Slide 36 text

! @patrickmckenna " Universe Commits that touch given function git log -L :: Alternate path 2: you reach for command-line Git tools to find out where `foo` is declared/defined/called

Slide 37

Slide 37 text

@patrickmckenna " Universe

Slide 38

Slide 38 text

! @patrickmckenna " Universe Commits that introduce/remove given string git log -S can search for strings other than function names

Slide 39

Slide 39 text

@patrickmckenna " Universe

Slide 40

Slide 40 text

! @patrickmckenna " Universe Commits that touch given lines git log -L ,:

Slide 41

Slide 41 text

@patrickmckenna " Universe

Slide 42

Slide 42 text

! @patrickmckenna " Universe Create empty commit git commit --allow-empty Upon reviewing `foo`, you think: this needs some refactoring. You know the file to edit, but you're not sure where to start. In essence, you'd like to open a PR to begin the discussion, but aren't sure what changes to make. Use this trick to get the required unique commit for opening a PR, w/o actually changing a thing.

Slide 43

Slide 43 text

@patrickmckenna " Universe reminder: we want to open PRs early

Slide 44

Slide 44 text

! @patrickmckenna " Universe Thread keywords fix(es)(ed) close(s)(d) resolve(s)(d) In that PR's OP, you remember to link to and auto-close the several Issues that originally brought `foo`'s problems to your attention, using these keywords.

Slide 45

Slide 45 text

@patrickmckenna " Universe

Slide 46

Slide 46 text

! @patrickmckenna " Universe Canonical URL y In the PR itself, you find a need to link to a specific version of a different file.

Slide 47

Slide 47 text

! @patrickmckenna " Universe Default file URL user/repo/blob/branch/pathspec The default URL specifies the file as it appears on a given branch, but branches move forward in time.

Slide 48

Slide 48 text

! @patrickmckenna " Universe Canonical file URL user/repo/blob/commit-sha/pathspec The canonical URL solves this problem.

Slide 49

Slide 49 text

@patrickmckenna " Universe

Slide 50

Slide 50 text

@patrickmckenna " Universe despite appearances, 08dd is actually a commit object - URL implies blob - dropdown implies tree

Slide 51

Slide 51 text

! @patrickmckenna " Universe Statuses API stateful commits

Slide 52

Slide 52 text

@patrickmckenna " Universe

Slide 53

Slide 53 text

@patrickmckenna " Universe

Slide 54

Slide 54 text

@patrickmckenna " Universe

Slide 55

Slide 55 text

@patrickmckenna " Universe

Slide 56

Slide 56 text

@patrickmckenna " Universe

Slide 57

Slide 57 text

@patrickmckenna " Universe Ok, your team is really getting down to business with this refactoring. They've opened a few PRs on your PRs, and you need to inspect these locally. What if you don't want to leave the CLI?

Slide 58

Slide 58 text

! @patrickmckenna " Universe Checkout a PR hub checkout

Slide 59

Slide 59 text

! @patrickmckenna " Universe Recover original conflict git checkout -- conflict= Inspired, you jump into the code yourself. You've made a few local branches to test out your ideas (branching is cheap, remember?). While merging locally, however, you get into a bit of a mess

Slide 60

Slide 60 text

! @patrickmckenna " Universe Get original versions during merge conflict git show :N: > N = 1 common parent 2 = your version 3 = `MERGE_HEAD`

Slide 61

Slide 61 text

! @patrickmckenna " Universe Univers(al) GitHub for non-developers You love building stuff on GitHub. How do you get others using it more? Turns out even those not directly contributing to source code can really love using GitHub. One prime example: our legal team.

Slide 62

Slide 62 text

@patrickmckenna " Universe

Slide 63

Slide 63 text

@patrickmckenna " Universe More… #

Slide 64

Slide 64 text

! @patrickmckenna " Universe Many more! tiimgreen/github-cheat-sheet

Slide 65

Slide 65 text

@patrickmckenna " Universe

Slide 66

Slide 66 text

@patrickmckenna " Universe

Slide 67

Slide 67 text

! @patrickmckenna " Universe Thank you!