Slide 1

Slide 1 text

Git Demystified for non-programmers @jimmycuadra

Slide 2

Slide 2 text

Disclaimers

Slide 3

Slide 3 text

Distributed version control

Slide 4

Slide 4 text

Initial version Revision 1 Revision 2

Slide 5

Slide 5 text

Why should a writer care?

Slide 6

Slide 6 text

EXAMPLE CONVENTIONS

Slide 7

Slide 7 text

File / Tree Commit / Ref Repository

Slide 8

Slide 8 text

$ tree . !"" chapters # !"" chapter_1.txt # !"" chapter_2.txt # $"" chapter_3.txt !"" intro.txt $"" outro.txt

Slide 9

Slide 9 text

$ git init Initialized empty Git repository in /Users/jimmy/Code/git- demystified/.git/ $ git commit -m "Add intro, outro, and three chapters." [master (root-commit) bbedcbe] Add intro, outro, and three chapters. 5 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 chapters/chapter_1.txt create mode 100644 chapters/chapter_2.txt create mode 100644 chapters/chapter_3.txt create mode 100644 intro.txt create mode 100644 outro.txt

Slide 10

Slide 10 text

GIT REPOSITORIES

Slide 11

Slide 11 text

Blobs

Slide 12

Slide 12 text

Blob Blob Blob Blob Blob Blob Blob Blob

Slide 13

Slide 13 text

jpeg text wav markdown html doc py exe

Slide 14

Slide 14 text

Trees

Slide 15

Slide 15 text

Derrick Coetzee / Wikimedia Commons / Public Domain

Slide 16

Slide 16 text

$ git commit -m "Add intro, outro, and three chapters." [master (root-commit) bbedcbe] Add intro, outro, and three chapters. $ git cat-file -p e0e642a 040000 tree 5938ce63424981f08d17edff734614a825f781e2 chapters 100644 blob e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 intro.txt 100644 blob e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 outro.txt $ git cat-file -p 5938ce6 100644 blob e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 chapter_1.txt 100644 blob e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 chapter_2.txt 100644 blob e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 chapter_3.txt

Slide 17

Slide 17 text

Commits

Slide 18

Slide 18 text

Commit Tree Metadata

Slide 19

Slide 19 text

$ git commit -m "Add intro, outro, and three chapters." [master (root-commit) bbedcbe] Add intro, outro, and three chapters. 5 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 chapters/chapter_1.txt create mode 100644 chapters/chapter_2.txt create mode 100644 chapters/chapter_3.txt create mode 100644 intro.txt create mode 100644 outro.txt

Slide 20

Slide 20 text

$ git cat-file -p bbedcbe tree e0e642ac3334754ff3f49e7ec6aa25241bdeeeda author Jimmy Cuadra 1458099001 -0700 committer Jimmy Cuadra 1458099001 -0700 Add intro, outro, and three chapters.

Slide 21

Slide 21 text

Repository

Slide 22

Slide 22 text

Database of Git Objects

Slide 23

Slide 23 text

Repository Blob Blob Tree Commit

Slide 24

Slide 24 text

History

Slide 25

Slide 25 text

Commit Commit Commit Commit Commit Commit

Slide 26

Slide 26 text

THE THREE STATES

Slide 27

Slide 27 text

Working directory

Slide 28

Slide 28 text

$ git status On branch master Initial commit Untracked files: (use "git add ..." to include in what will be committed) chapters/ intro.txt outro.txt nothing added to commit but untracked files present (use "git add" to track)

Slide 29

Slide 29 text

Staging area (Index)

Slide 30

Slide 30 text

$ git add intro.txt

Slide 31

Slide 31 text

$ git status On branch master Initial commit Changes to be committed: (use "git rm --cached ..." to unstage) new file: intro.txt Untracked files: (use "git add ..." to include in what will be committed) chapters/ outro.txt

Slide 32

Slide 32 text

$ git add .

Slide 33

Slide 33 text

$ git status On branch master Initial commit Changes to be committed: (use "git rm --cached ..." to unstage) new file: chapters/chapter_1.txt new file: chapters/chapter_2.txt new file: chapters/chapter_3.txt new file: intro.txt new file: outro.txt

Slide 34

Slide 34 text

Git Repository

Slide 35

Slide 35 text

$ git commit -m "Add intro, outro, and three chapters." [master (root-commit) bbedcbe] Add intro, outro, and three chapters. 5 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 chapters/chapter_1.txt create mode 100644 chapters/chapter_2.txt create mode 100644 chapters/chapter_3.txt create mode 100644 intro.txt create mode 100644 outro.txt

Slide 36

Slide 36 text

$ git status On branch master nothing to commit, working directory clean

Slide 37

Slide 37 text

$ git log commit bbedcbefe51e206723ab5621d1717a660b8c0374 Author: Jimmy Cuadra Date: Tue Mar 15 20:30:01 2016 -0700 Add intro, outro, and three chapters.

Slide 38

Slide 38 text

GIT REFS

Slide 39

Slide 39 text

Pixabay / Public Domain Jim Jimmy James Hey you Dork @jimmycuadra

Slide 40

Slide 40 text

SHA-1 $ git show -1 commit bbedcbefe51e206723ab5621d1717a660b8c0374 Author: Jimmy Cuadra Date: Tue Mar 15 20:30:01 2016 -0700 Add intro, outro, and three chapters.

Slide 41

Slide 41 text

HEAD Commit Commit Commit Commit Commit Commit

Slide 42

Slide 42 text

Branches

Slide 43

Slide 43 text

m1 m2 m3 master HEAD

Slide 44

Slide 44 text

m1 m2 m3 master HEAD my-feature

Slide 45

Slide 45 text

Tags

Slide 46

Slide 46 text

m1 m2 m3 master HEAD

Slide 47

Slide 47 text

m1 m2 m3 master HEAD v1.0.0 “First release”

Slide 48

Slide 48 text

MERGING BRANCHES

Slide 49

Slide 49 text

m1 m2 m3 master HEAD

Slide 50

Slide 50 text

m1 m2 m3 master HEAD bad-idea

Slide 51

Slide 51 text

m1 m2 m3 master bad-idea HEAD

Slide 52

Slide 52 text

m1 m2 m3 master bad-idea c1 HEAD

Slide 53

Slide 53 text

m1 m2 m3 master HEAD bad-idea c1 c2

Slide 54

Slide 54 text

m1 m2 m3 master HEAD bad-idea c1 c2 “Fast forward merge”

Slide 55

Slide 55 text

m1 m2 m3 master HEAD bad-idea c1 c2

Slide 56

Slide 56 text

m1 m2 m3 master HEAD bad-idea c1 c2

Slide 57

Slide 57 text

m1 m2 m3 master HEAD bad-idea c1 c2 m4

Slide 58

Slide 58 text

m1 m2 m3 master HEAD bad-idea c1 c2 m4 m5

Slide 59

Slide 59 text

m1 m2 m3 master HEAD c1 c2 m4 m5

Slide 60

Slide 60 text

m1 m2 m3 master HEAD c1 c2 m4 m5 m6

Slide 61

Slide 61 text

DISTRIBUTED GIT

Slide 62

Slide 62 text

Repository File File File File Alice File File Bob File File Carol

Slide 63

Slide 63 text

Alice Repository File File Bob Repository File File Carol Repository File File

Slide 64

Slide 64 text

Remotes

Slide 65

Slide 65 text

Alice Repository alice1

Slide 66

Slide 66 text

origin Repository alice1 Bob Repository alice1 $ git clone https://alice.example.com/repo.git

Slide 67

Slide 67 text

origin Repository alice1 Bob Repository alice1 $ git commit -m “Make some changes” bob1

Slide 68

Slide 68 text

origin Repository alice1 Bob Repository alice1 $ git remote add carol https://carol.example.com/repo.git $ git fetch carol bob1 carol Repository alice1 carol1

Slide 69

Slide 69 text

origin Repository alice1 Bob Repository alice1 $ git merge carol/master bob1 carol Repository alice1 carol1 carol1

Slide 70

Slide 70 text

CLOSING ADVICE

Slide 71

Slide 71 text

Git is complicated software, but built on many simple concepts

Slide 72

Slide 72 text

Don’t try to remember every single command

Slide 73

Slide 73 text

Learn only what you need as you need it

Slide 74

Slide 74 text

Remember that the concepts are simple, even when the interface seems complicated

Slide 75

Slide 75 text

Git is a history of snapshots of your project at each state throughout its life

Slide 76

Slide 76 text

THANK YOU @jimmycuadra Git logo: Jason Long / https://git-scm.com/downloads/logos / Creative Commons Attribution 3.0