Slide 1

Slide 1 text

So You Think You Know Git? Co-founder of GitHub / GitButler Scott Chacon

Slide 2

Slide 2 text

About Me

Slide 3

Slide 3 text

github.com About Me

Slide 4

Slide 4 text

git-scm.com/book github.com About Me

Slide 5

Slide 5 text

git-scm.com/book gitbutler.com github.com About Me

Slide 6

Slide 6 text

How Well Do You Know Git? PORCELAIN (82) 44 main commands (add, commit, push, pull, …) 11 manipulators (config, reflog, replace, …) 17 interrogators (blame, fsck, rerere, …) 10 interactors (send-email, p4, svn, …) PLUMBING (63) 19 manipulators (apply, commit-tree, update-ref, …) 21 interrogators (cat-file, for-each-ref, …) 5 syncing (fetch-pack, send-pack, …) 18 internal (check-attr, sh-i18n, …) TOTAL: 145

Slide 7

Slide 7 text

How Well Do You Know Git? PORCELAIN (82) 44 main commands (add, commit, push, pull, …) 11 manipulators (config, reflog, replace, …) 17 interrogators (blame, fsck, rerere, …) 10 interactors (send-email, p4, svn, …) PLUMBING (63) 19 manipulators (apply, commit-tree, update-ref, …) 21 interrogators (cat-file, for-each-ref, …) 5 syncing (fetch-pack, send-pack, …) 18 internal (check-attr, sh-i18n, …) TOTAL: 145

Slide 8

Slide 8 text

How Well Do You Know Git? PORCELAIN (82) 44 main commands (add, commit, push, pull, …) 11 manipulators (config, reflog, replace, …) 17 interrogators (blame, fsck, rerere, …) 10 interactors (send-email, p4, svn, …) PLUMBING (63) 19 manipulators (apply, commit-tree, update-ref, …) 21 interrogators (cat-file, for-each-ref, …) 5 syncing (fetch-pack, send-pack, …) 18 internal (check-attr, sh-i18n, …) TOTAL: 145

Slide 9

Slide 9 text

How Well Do You Know Git? PORCELAIN (82) 44 main commands (add, commit, push, pull, …) 11 manipulators (config, reflog, replace, …) 17 interrogators (blame, fsck, rerere, …) 10 interactors (send-email, p4, svn, …) PLUMBING (63) 19 manipulators (apply, commit-tree, update-ref, …) 21 interrogators (cat-file, for-each-ref, …) 5 syncing (fetch-pack, send-pack, …) 18 internal (check-attr, sh-i18n, …) TOTAL: 145

Slide 10

Slide 10 text

How Well Do You Know Git? PORCELAIN (82) 44 main commands (add, commit, push, pull, …) 11 manipulators (config, reflog, replace, …) 17 interrogators (blame, fsck, rerere, …) 10 interactors (send-email, p4, svn, …) PLUMBING (63) 19 manipulators (apply, commit-tree, update-ref, …) 21 interrogators (cat-file, for-each-ref, …) 5 syncing (fetch-pack, send-pack, …) 18 internal (check-attr, sh-i18n, …) TOTAL: 145

Slide 11

Slide 11 text

How Well Do You Know Git? PORCELAIN (82) 44 main commands (add, commit, push, pull, …) 11 manipulators (config, reflog, replace, …) 17 interrogators (blame, fsck, rerere, …) 10 interactors (send-email, p4, svn, …) PLUMBING (63) 19 manipulators (apply, commit-tree, update-ref, …) 21 interrogators (cat-file, for-each-ref, …) 5 syncing (fetch-pack, send-pack, …) 18 internal (check-attr, sh-i18n, …) TOTAL: 145

Slide 12

Slide 12 text

How Well Do You Know Git? PORCELAIN (82) 44 main commands (add, commit, push, pull, …) 11 manipulators (config, reflog, replace, …) 17 interrogators (blame, fsck, rerere, …) 10 interactors (send-email, p4, svn, …) PLUMBING (63) 19 manipulators (apply, commit-tree, update-ref, …) 21 interrogators (cat-file, for-each-ref, …) 5 syncing (fetch-pack, send-pack, …) 18 internal (check-attr, sh-i18n, …) TOTAL: 145

Slide 13

Slide 13 text

How Well Do You Know Git? PORCELAIN (82) 44 main commands (add, commit, push, pull, …) 11 manipulators (config, reflog, replace, …) 17 interrogators (blame, fsck, rerere, …) 10 interactors (send-email, p4, svn, …) PLUMBING (63) 19 manipulators (apply, commit-tree, update-ref, …) 21 interrogators (cat-file, for-each-ref, …) 5 syncing (fetch-pack, send-pack, …) 18 internal (check-attr, sh-i18n, …) TOTAL: 145

Slide 14

Slide 14 text

How Well Do You Know Git? PORCELAIN (82) 44 main commands (add, commit, push, pull, …) 11 manipulators (config, reflog, replace, …) 17 interrogators (blame, fsck, rerere, …) 10 interactors (send-email, p4, svn, …) PLUMBING (63) 19 manipulators (apply, commit-tree, update-ref, …) 21 interrogators (cat-file, for-each-ref, …) 5 syncing (fetch-pack, send-pack, …) 18 internal (check-attr, sh-i18n, …) TOTAL: 145

Slide 15

Slide 15 text

How Well Do You Know Git? PORCELAIN (82) 44 main commands (add, commit, push, pull, …) 11 manipulators (config, reflog, replace, …) 17 interrogators (blame, fsck, rerere, …) 10 interactors (send-email, p4, svn, …) PLUMBING (63) 19 manipulators (apply, commit-tree, update-ref, …) 21 interrogators (cat-file, for-each-ref, …) 5 syncing (fetch-pack, send-pack, …) 18 internal (check-attr, sh-i18n, …) TOTAL: 145

Slide 16

Slide 16 text

- There are still an average of 9 commits per day - ~10k commits in the last 3 years - What has been changing? How Well Do You Know Git?

Slide 17

Slide 17 text

- There are still an average of 9 commits per day - ~10k commits in the last 3 years - What has been changing? How Well Do You Know Git?

Slide 18

Slide 18 text

- There are still an average of 9 commits per day - ~10k commits in the last 3 years - What has been changing? How Well Do You Know Git?

Slide 19

Slide 19 text

- There are still an average of 9 commits per day - ~10k commits in the last 3 years - What has been changing? How Well Do You Know Git?

Slide 20

Slide 20 text

- There are still an average of 9 commits per day - ~10k commits in the last 3 years - What has been changing? How Well Do You Know Git? Git is 5 months old 19 years ago

Slide 21

Slide 21 text

- Some helpful config stuff - Oldies but goodies - Some new stuff you may not have noticed - Some big repo / monorepo stuff - Some new GitHub stuff Our Agenda

Slide 22

Slide 22 text

- Some helpful config stuff - Oldies but goodies - Some new stuff you may not have noticed - Some big repo / monorepo stuff - Some new GitHub stuff Our Agenda Shotgun buffet

Slide 23

Slide 23 text

- Some helpful config stuff - Oldies but goodies - Some new stuff you may not have noticed - Some big repo / monorepo stuff - Some new GitHub stuff Our Agenda Shotgun buffet blog.gitbutler.com

Slide 24

Slide 24 text

Some Helpful Con fi g Stuff

Slide 25

Slide 25 text

Some Helpful Con fi g Stuff $ git config - - global alias.staash 'stash -- all'

Slide 26

Slide 26 text

Some Helpful Con fi g Stuff $ git config - - global alias.staash 'stash -- all' All ignored and untracked fi les are also stashed and then cleaned up with git clean.

Slide 27

Slide 27 text

Some Helpful Con fi g Stuff $ git config -- global alias.bb !better-branch.sh https: // gist.github.com/schacon

Slide 28

Slide 28 text

No content

Slide 29

Slide 29 text

Some Helpful Con fi g Stuff Conditional Configs

Slide 30

Slide 30 text

No content

Slide 31

Slide 31 text

No content

Slide 32

Slide 32 text

No content

Slide 33

Slide 33 text

Some Helpful Con fi g Stuff Conditional Configs

Slide 34

Slide 34 text

- Some helpful config stuff - Oldies but goodies - Some new stuff you may not have noticed - Some big repo / monorepo stuff - Some new GitHub stuff Our Agenda

Slide 35

Slide 35 text

- Some helpful config stuff - Oldies but goodies - Some new stuff you may not have noticed - Some big repo / monorepo stuff - Some new GitHub stuff Our Agenda

Slide 36

Slide 36 text

Oldies But Goodies

Slide 37

Slide 37 text

Oldies But Goodies $ git blame

Slide 38

Slide 38 text

Oldies But Goodies $ git blame -L

Slide 39

Slide 39 text

Oldies But Goodies $ git blame -L just blame a "L"ittle

Slide 40

Slide 40 text

git blame -L 15,26 path/to/file

Slide 41

Slide 41 text

git blame -L 15,26 path/to/file git log -L 15,26:path/to/file

Slide 42

Slide 42 text

git blame -L 15,26 path/to/file git log -L 15,26:path/to/file

Slide 43

Slide 43 text

git blame -L 15,26 path/to/file git log -L 15,26:path/to/file

Slide 44

Slide 44 text

git blame -L 15,26 path/to/file git log -L :File:path/to/file

Slide 45

Slide 45 text

git blame -L 15,26 path/to/file

Slide 46

Slide 46 text

Oldies But Goodies $ git blame -w ignore whitespace

Slide 47

Slide 47 text

Oldies But Goodies $ git blame -w -C ignore whitespace and detect lines moved or copied in the same commit

Slide 48

Slide 48 text

Oldies But Goodies $ git blame -w -C -C ignore whitespace and detect lines moved or copied in the same commit or the commit that created the fi le

Slide 49

Slide 49 text

Oldies But Goodies $ git blame -w -C -C -C ignore whitespace and detect lines moved or copied in the same commit or the commit that created the fi le or any commit at all

Slide 50

Slide 50 text

git blame -L 15,26 path/to/file

Slide 51

Slide 51 text

git blame -w -C -C -C —L 15,26 path/to/file

Slide 52

Slide 52 text

git blame -w -C -C -C —L 15,26 path/to/file

Slide 53

Slide 53 text

git blame -w -C -C -C —L 15,26 path/to/file

Slide 54

Slide 54 text

git blame -w -C -C -C —L 15,26 path/to/file

Slide 55

Slide 55 text

Oldies But Goodies $ git log -S the "pickaxe"

Slide 56

Slide 56 text

git log -S files_watcher -p

Slide 57

Slide 57 text

Oldies But Goodies $ git reflog

Slide 58

Slide 58 text

No content

Slide 59

Slide 59 text

git pull

Slide 60

Slide 60 text

git reset

Slide 61

Slide 61 text

git checkout

Slide 62

Slide 62 text

git rebase -i

Slide 63

Slide 63 text

Oldies But Goodies $ git diff -- word-diff

Slide 64

Slide 64 text

No content

Slide 65

Slide 65 text

No content

Slide 66

Slide 66 text

No content

Slide 67

Slide 67 text

No content

Slide 68

Slide 68 text

Oldies But Goodies $ git config - - global rerere.enabled true

Slide 69

Slide 69 text

Oldies But Goodies $ git config - - global rerere.enabled true REuse REcorded REsolution

Slide 70

Slide 70 text

No content

Slide 71

Slide 71 text

No content

Slide 72

Slide 72 text

No content

Slide 73

Slide 73 text

c

Slide 74

Slide 74 text

No content

Slide 75

Slide 75 text

No content

Slide 76

Slide 76 text

No content

Slide 77

Slide 77 text

- Some helpful config stuff - Oldies but goodies - Some new stuff you may not have noticed - Some big repo / monorepo stuff - Some new GitHub stuff Our Agenda

Slide 78

Slide 78 text

- Some helpful config stuff - Oldies but goodies - Some new stuff you may not have noticed - Some big repo / monorepo stuff - Some new GitHub stuff Our Agenda

Slide 79

Slide 79 text

Some New Stuff You May Not Have Noticed

Slide 80

Slide 80 text

Some New Stuff You May Not Have Noticed $ git branch -- column

Slide 81

Slide 81 text

No content

Slide 82

Slide 82 text

No content

Slide 83

Slide 83 text

No content

Slide 84

Slide 84 text

No content

Slide 85

Slide 85 text

No content

Slide 86

Slide 86 text

No content

Slide 87

Slide 87 text

Some New Stuff You May Not Have Noticed $ git push -- force-with-lease

Slide 88

Slide 88 text

No content

Slide 89

Slide 89 text

No content

Slide 90

Slide 90 text

No content

Slide 91

Slide 91 text

No content

Slide 92

Slide 92 text

No content

Slide 93

Slide 93 text

No content

Slide 94

Slide 94 text

No content

Slide 95

Slide 95 text

No content

Slide 96

Slide 96 text

No content

Slide 97

Slide 97 text

No content

Slide 98

Slide 98 text

No content

Slide 99

Slide 99 text

No content

Slide 100

Slide 100 text

No content

Slide 101

Slide 101 text

No content

Slide 102

Slide 102 text

No content

Slide 103

Slide 103 text

No content

Slide 104

Slide 104 text

No content

Slide 105

Slide 105 text

No content

Slide 106

Slide 106 text

No content

Slide 107

Slide 107 text

Some New Stuff You May Not Have Noticed $ git push -- force-with-lease

Slide 108

Slide 108 text

Some New Stuff You May Not Have Noticed signing commits with ssh

Slide 109

Slide 109 text

Some New Stuff You May Not Have Noticed signing commits with ssh $ git config gpg.format ssh

Slide 110

Slide 110 text

Some New Stuff You May Not Have Noticed signing commits with ssh $ git config gpg.format ssh $ git config user.signingkey ~/.ssh/key.pub

Slide 111

Slide 111 text

Some New Stuff You May Not Have Noticed signing commits with ssh $ git config gpg.format ssh $ git config user.signingkey ~/.ssh/key.pub $ git commit -S

Slide 112

Slide 112 text

No content

Slide 113

Slide 113 text

No content

Slide 114

Slide 114 text

No content

Slide 115

Slide 115 text

No content

Slide 116

Slide 116 text

No content

Slide 117

Slide 117 text

No content

Slide 118

Slide 118 text

No content

Slide 119

Slide 119 text

No content

Slide 120

Slide 120 text

No content

Slide 121

Slide 121 text

No content

Slide 122

Slide 122 text

No content

Slide 123

Slide 123 text

No content

Slide 124

Slide 124 text

No content

Slide 125

Slide 125 text

Some New Stuff You May Not Have Noticed $ git push - - signed

Slide 126

Slide 126 text

Some New Stuff You May Not Have Noticed $ git push - - signed

Slide 127

Slide 127 text

Some New Stuff You May Not Have Noticed $ git push - - signed

Slide 128

Slide 128 text

Some New Stuff You May Not Have Noticed $ git push - - signed

Slide 129

Slide 129 text

Some New Stuff You May Not Have Noticed $ git maintainance

Slide 130

Slide 130 text

Some New Stuff You May Not Have Noticed $ git maintainance start

Slide 131

Slide 131 text

No content

Slide 132

Slide 132 text

gc: disabled commit-graph: hourly prefetch: hourly loose-objects: daily incremental-repack: daily pack-refs: none Some New Stuff You May Not Have Noticed

Slide 133

Slide 133 text

- Some helpful config stuff - Oldies but goodies - Some new stuff you may not have noticed - Some big repo / monorepo stuff - Some new GitHub stuff Our Agenda

Slide 134

Slide 134 text

- Some helpful config stuff - Oldies but goodies - Some new stuff you may not have noticed - Some big repo / monorepo stuff - Some new GitHub stuff Our Agenda

Slide 135

Slide 135 text

Big Repo Stuff

Slide 136

Slide 136 text

Big Repo Stuff Windows

Slide 137

Slide 137 text

•approximately 3.5M files that results in a Git repo of about 300 gigabytes in size. •with 4,000 engineers producing 1,760 daily “lab builds” across 440 branches, plus thousands of pull request validation builds. Big Repo Stuff Windows

Slide 138

Slide 138 text

•approximately 3.5M files that results in a Git repo of about 300 gigabytes in size. •with 4,000 engineers producing 1,760 daily “lab builds” across 440 branches, plus thousands of pull request validation builds. Big Repo Stuff Windows

Slide 139

Slide 139 text

•approximately 3.5M files that results in a Git repo of about 300 gigabytes in size. •with 4,000 engineers producing 1,760 daily “lab builds” across 440 branches, plus thousands of pull request validation builds. Big Repo Stuff Windows

Slide 140

Slide 140 text

•approximately 3.5M files that results in a Git repo of about 300 gigabytes in size. •with 4,000 engineers producing 1,760 daily “lab builds” across 440 branches, plus thousands of pull request validation builds. Big Repo Stuff Windows

Slide 141

Slide 141 text

Big Repo Stuff Windows * VFS for Git * Scalar * Git

Slide 142

Slide 142 text

Big Repo Stuff Windows * VFS for Git * Scalar * Git

Slide 143

Slide 143 text

Big Repo Stuff Windows * VFS for Git * Scalar * Git

Slide 144

Slide 144 text

Big Repo Stuff prefetching

Slide 145

Slide 145 text

No content

Slide 146

Slide 146 text

Big Repo Stuff commit-graph

Slide 147

Slide 147 text

linux, 1.2M commits

Slide 148

Slide 148 text

linux, 1.2M commits

Slide 149

Slide 149 text

linux, 1.2M commits

Slide 150

Slide 150 text

linux, 1.2M commits

Slide 151

Slide 151 text

linux, 1.2M commits

Slide 152

Slide 152 text

linux, 1.2M commits

Slide 153

Slide 153 text

linux, 1.2M commits

Slide 154

Slide 154 text

Big Repo Stuff commit-graph $ git config -- global fetch.writeCommitGraph true

Slide 155

Slide 155 text

Big Repo Stuff filesystem monitor

Slide 156

Slide 156 text

Big Repo Stuff filesystem monitor $ git config core.untrackedcache true $ git config core.fsmonitor true

Slide 157

Slide 157 text

chromium, 470k files

Slide 158

Slide 158 text

chromium, 470k files

Slide 159

Slide 159 text

chromium, 470k files

Slide 160

Slide 160 text

chromium, 470k files

Slide 161

Slide 161 text

chromium, 470k files

Slide 162

Slide 162 text

No content

Slide 163

Slide 163 text

chromium, 470k files

Slide 164

Slide 164 text

chromium, 470k files chromium, 470k files

Slide 165

Slide 165 text

chromium, 470k files chromium, 470k files

Slide 166

Slide 166 text

partial cloning Big Repo Stuff

Slide 167

Slide 167 text

Big Repo Stuff ❯ git clone https: // github.com/torvalds/linux.git

Slide 168

Slide 168 text

Big Repo Stuff ❯ time git clone https: // github.com/torvalds/linux.git Cloning into 'linux' .. . remote: Enumerating objects: 9982489, done. remote: Counting objects: 100% (14/14), done. remote: Compressing objects: 100% (12/12), done. remote: Total 9982489 (delta 8), reused 4 (delta 2), pack-reused 9982475 Receiving objects: 100% (9982489/9982489), 4.67 GiB | 4.11 MiB/s, done. Resolving deltas: 100% (8153512/8153512), done. Updating files: 100% (83463/83463), done. real 21m32.198s user 6m27.004s sys 3m10.791s

Slide 169

Slide 169 text

Big Repo Stuff ❯ time git clone https: // github.com/torvalds/linux.git Cloning into 'linux' .. . remote: Enumerating objects: 9982489, done. remote: Counting objects: 100% (14/14), done. remote: Compressing objects: 100% (12/12), done. remote: Total 9982489 (delta 8), reused 4 (delta 2), pack-reused 9982475 Receiving objects: 100% (9982489/9982489), 4.67 GiB | 4.11 MiB/s, done. Resolving deltas: 100% (8153512/8153512), done. Updating files: 100% (83463/83463), done. real 21m32.198s user 6m27.004s sys 3m10.791s

Slide 170

Slide 170 text

Big Repo Stuff ❯ git clone -- filter=blob:none

Slide 171

Slide 171 text

Big Repo Stuff ❯ git clone -- filter=blob:none

Slide 172

Slide 172 text

Big Repo Stuff ❯ git clone -- filter=blob:none

Slide 173

Slide 173 text

Big Repo Stuff ❯ time git clone - - filter=blob:none https: / / github.com/torvalds/linux.git Cloning into 'linux-blobless' .. . remote: Enumerating objects: 7255556, done. remote: Counting objects: 100% (13/13), done. remote: Total 7255556 (delta 8), reused 4 (delta 2), pack-reused 7255543 Receiving objects: 100% (7255556/7255556), 1.41 GiB | 7.10 MiB/s, done. Resolving deltas: 100% (5832826/5832826), done. remote: Enumerating objects: 83004, done. remote: Counting objects: 100% (17980/17980), done. remote: Total 83004 (delta 2074), reused 1359 (delta 1359), pack-reused 65024 Receiving objects: 100% (83004/83004), 243.18 MiB | 13.69 MiB/s, done. Updating files: 100% (83463/83463), done. real 4m46.250s user 1m34.593s sys 1m2.973s

Slide 174

Slide 174 text

Big Repo Stuff ❯ time git clone - - filter=blob:none https: / / github.com/torvalds/linux.git Cloning into 'linux-blobless' .. . remote: Enumerating objects: 7255556, done. remote: Counting objects: 100% (13/13), done. remote: Total 7255556 (delta 8), reused 4 (delta 2), pack-reused 7255543 Receiving objects: 100% (7255556/7255556), 1.41 GiB | 7.10 MiB/s, done. Resolving deltas: 100% (5832826/5832826), done. remote: Enumerating objects: 83004, done. remote: Counting objects: 100% (17980/17980), done. remote: Total 83004 (delta 2074), reused 1359 (delta 1359), pack-reused 65024 Receiving objects: 100% (83004/83004), 243.18 MiB | 13.69 MiB/s, done. Updating files: 100% (83463/83463), done. real 4m46.250s user 1m34.593s sys 1m2.973s Commits and Trees WD Blobs

Slide 175

Slide 175 text

Big Repo Stuff ❯ git clone -- filter=tree:0

Slide 176

Slide 176 text

Big Repo Stuff ❯ git clone -- filter=tree:0

Slide 177

Slide 177 text

Big Repo Stuff ❯ time git clone - - filter=tree:0 https: // github.com/torvalds/linux.git Cloning into 'linux-treeless' . .. remote: Enumerating objects: 1249970, done. remote: Counting objects: 100% (2/2), done. remote: Total 1249970 (delta 0), reused 2 (delta 0), pack-reused 1249968 Receiving objects: 100% (1249970/1249970), 637.40 MiB | 11.69 MiB/s, done. remote: Enumerating objects: 5447, done. remote: Counting objects: 100% (2376/2376), done. remote: Total 5447 (delta 4), reused 2 (delta 2), pack-reused 3071 Receiving objects: 100% (5447/5447), 2.57 MiB | 10.76 MiB/s, done. remote: Enumerating objects: 83004, done. remote: Counting objects: 100% (17984/17984), done. remote: Total 83004 (delta 2052), reused 1336 (delta 1336), pack-reused 65020 Receiving objects: 100% (83004/83004), 243.19 MiB | 10.58 MiB/s, done. Updating files: 100% (83463/83463), done. real 2m2.138s user 0m35.061s sys 0m18.005s

Slide 178

Slide 178 text

Big Repo Stuff ❯ time git clone - - filter=tree:0 https: // github.com/torvalds/linux.git Cloning into 'linux-treeless' . .. remote: Enumerating objects: 1249970, done. remote: Counting objects: 100% (2/2), done. remote: Total 1249970 (delta 0), reused 2 (delta 0), pack-reused 1249968 Receiving objects: 100% (1249970/1249970), 637.40 MiB | 11.69 MiB/s, done. remote: Enumerating objects: 5447, done. remote: Counting objects: 100% (2376/2376), done. remote: Total 5447 (delta 4), reused 2 (delta 2), pack-reused 3071 Receiving objects: 100% (5447/5447), 2.57 MiB | 10.76 MiB/s, done. remote: Enumerating objects: 83004, done. remote: Counting objects: 100% (17984/17984), done. remote: Total 83004 (delta 2052), reused 1336 (delta 1336), pack-reused 65020 Receiving objects: 100% (83004/83004), 243.19 MiB | 10.58 MiB/s, done. Updating files: 100% (83463/83463), done. real 2m2.138s user 0m35.061s sys 0m18.005s

Slide 179

Slide 179 text

Big Repo Stuff ❯ time git clone - - filter=tree:0 https: // github.com/torvalds/linux.git Cloning into 'linux-treeless' . .. remote: Enumerating objects: 1249970, done. remote: Counting objects: 100% (2/2), done. remote: Total 1249970 (delta 0), reused 2 (delta 0), pack-reused 1249968 Receiving objects: 100% (1249970/1249970), 637.40 MiB | 11.69 MiB/s, done. remote: Enumerating objects: 5447, done. remote: Counting objects: 100% (2376/2376), done. remote: Total 5447 (delta 4), reused 2 (delta 2), pack-reused 3071 Receiving objects: 100% (5447/5447), 2.57 MiB | 10.76 MiB/s, done. remote: Enumerating objects: 83004, done. remote: Counting objects: 100% (17984/17984), done. remote: Total 83004 (delta 2052), reused 1336 (delta 1336), pack-reused 65020 Receiving objects: 100% (83004/83004), 243.19 MiB | 10.58 MiB/s, done. Updating files: 100% (83463/83463), done. real 2m2.138s user 0m35.061s sys 0m18.005s Commits WD Trees WD Blobs

Slide 180

Slide 180 text

Big Repo Stuff ❯ time git blame lib/bootconfig.c remote: Enumerating objects: 1, done. remote: Counting objects: 100% (1/1), done. remote: Total 1 (delta 0), reused 0 (delta 0), pack-reused 0 Receiving objects: 100% (1/1), 5.95 KiB | 1.98 MiB/s, done. remote: Enumerating objects: 1, done. remote: Counting objects: 100% (1/1), done. remote: Total 1 (delta 0), reused 0 (delta 0), pack-reused 0 Receiving objects: 100% (1/1), 5.95 KiB | 1.98 MiB/s, done. remote: Enumerating objects: 1, done. remote: Counting objects: 100% (1/1), done. remote: Total 1 (delta 0), reused 0 (delta 0), pack-reused 0 Receiving objects: 100% (1/1), 5.62 KiB | 2.81 MiB/s, done. remote: Enumerating objects: 1, done. remote: Counting objects: 100% (1/1), done. remote: Total 1 (delta 0), reused 0 (delta 0), pack-reused 0 Receiving objects: 100% (1/1), 5.95 KiB | 2.98 MiB/s, done. remote: Enumerating objects: 1, done.

Slide 181

Slide 181 text

Big Repo Stuff ❯ time git blame lib/bootconfig.c remote: Enumerating objects: 1, done. remote: Counting objects: 100% (1/1), done. remote: Total 1 (delta 0), reused 0 (delta 0), pack-reused 0 Receiving objects: 100% (1/1), 5.95 KiB | 1.98 MiB/s, done. remote: Enumerating objects: 1, done. remote: Counting objects: 100% (1/1), done. remote: Total 1 (delta 0), reused 0 (delta 0), pack-reused 0 Receiving objects: 100% (1/1), 5.95 KiB | 1.98 MiB/s, done. remote: Enumerating objects: 1, done. remote: Counting objects: 100% (1/1), done. remote: Total 1 (delta 0), reused 0 (delta 0), pack-reused 0 Receiving objects: 100% (1/1), 5.62 KiB | 2.81 MiB/s, done. remote: Enumerating objects: 1, done. remote: Counting objects: 100% (1/1), done. remote: Total 1 (delta 0), reused 0 (delta 0), pack-reused 0 Receiving objects: 100% (1/1), 5.95 KiB | 2.98 MiB/s, done. remote: Enumerating objects: 1, done.

Slide 182

Slide 182 text

Big Repo Stuff ❯ time git blame lib/bootconfig.c remote: Enumerating objects: 1, done. remote: Counting objects: 100% (1/1), done. remote: Total 1 (delta 0), reused 0 (delta 0), pack-reused 0 Receiving objects: 100% (1/1), 5.95 KiB | 1.98 MiB/s, done. remote: Enumerating objects: 1, done. remote: Counting objects: 100% (1/1), done. remote: Total 1 (delta 0), reused 0 (delta 0), pack-reused 0 Receiving objects: 100% (1/1), 5.95 KiB | 1.98 MiB/s, done. remote: Enumerating objects: 1, done. remote: Counting objects: 100% (1/1), done. remote: Total 1 (delta 0), reused 0 (delta 0), pack-reused 0 Receiving objects: 100% (1/1), 5.62 KiB | 2.81 MiB/s, done. remote: Enumerating objects: 1, done. remote: Counting objects: 100% (1/1), done. remote: Total 1 (delta 0), reused 0 (delta 0), pack-reused 0 Receiving objects: 100% (1/1), 5.95 KiB | 2.98 MiB/s, done. remote: Enumerating objects: 1, done.

Slide 183

Slide 183 text

Big Repo Stuff ❯ time git blame lib/bootconfig.c remote: Enumerating objects: 1, done. remote: Counting objects: 100% (1/1), done. remote: Total 1 (delta 0), reused 0 (delta 0), pack-reused 0 Receiving objects: 100% (1/1), 5.95 KiB | 1.98 MiB/s, done. remote: Enumerating objects: 1, done. remote: Counting objects: 100% (1/1), done. remote: Total 1 (delta 0), reused 0 (delta 0), pack-reused 0 Receiving objects: 100% (1/1), 5.95 KiB | 1.98 MiB/s, done. remote: Enumerating objects: 1, done. remote: Counting objects: 100% (1/1), done. remote: Total 1 (delta 0), reused 0 (delta 0), pack-reused 0 Receiving objects: 100% (1/1), 5.62 KiB | 2.81 MiB/s, done. remote: Enumerating objects: 1, done. remote: Counting objects: 100% (1/1), done. remote: Total 1 (delta 0), reused 0 (delta 0), pack-reused 0 Receiving objects: 100% (1/1), 5.95 KiB | 2.98 MiB/s, done. remote: Enumerating objects: 1, done.

Slide 184

Slide 184 text

Big Repo Stuff linux ❯ time git blame lib/nlattr.c >/dev/null 2>/dev/null real 0m4.592s user 0m1.241s sys 0m0.501s linux-blobless ❯ time git blame lib/nlattr.c >/dev/null 2>/dev/null real 0m45.873s user 0m4.550s sys 0m3.209s

Slide 185

Slide 185 text

Big Repo Stuff multipack indexes and reachability bitmaps and geometric repacking https: / / github.blog/2021-04-29-scaling-monorepo-maintenance/

Slide 186

Slide 186 text

Monorepo Stuff

Slide 187

Slide 187 text

Monorepo Stuff sparse-checkout

Slide 188

Slide 188 text

❯ time git status On branch main Your branch is up to date with 'origin/main'. nothing to commit, working tree clean real 0m5.931s ❯ git sparse-checkout set build base ❯ time git status On branch main Your branch is up to date with 'origin/main'. You are in a sparse checkout with 2% of tracked files present. nothing to commit, working tree clean real 0m0.386s

Slide 189

Slide 189 text

❯ time git status On branch main Your branch is up to date with 'origin/main'. nothing to commit, working tree clean real 0m5.931s ❯ git sparse-checkout set build base ❯ time git status On branch main Your branch is up to date with 'origin/main'. You are in a sparse checkout with 2% of tracked files present. nothing to commit, working tree clean real 0m0.386s

Slide 190

Slide 190 text

❯ time git status On branch main Your branch is up to date with 'origin/main'. nothing to commit, working tree clean real 0m5.931s ❯ git sparse-checkout set build base ❯ time git status On branch main Your branch is up to date with 'origin/main'. You are in a sparse checkout with 2% of tracked files present. nothing to commit, working tree clean real 0m0.386s

Slide 191

Slide 191 text

❯ time git status On branch main Your branch is up to date with 'origin/main'. nothing to commit, working tree clean real 0m5.931s ❯ git sparse-checkout set build base ❯ time git status On branch main Your branch is up to date with 'origin/main'. You are in a sparse checkout with 2% of tracked files present. nothing to commit, working tree clean real 0m0.386s

Slide 192

Slide 192 text

- Some helpful config stuff - Oldies but goodies - Some new stuff you may not have noticed - Some big repo / monorepo stuff - Some new GitHub stuff Our Agenda

Slide 193

Slide 193 text

- Some helpful config stuff - Oldies but goodies - Some new stuff you may not have noticed - Some big repo / monorepo stuff - Some new GitHub stuff Our Agenda

Slide 194

Slide 194 text

GitHub Stuff

Slide 195

Slide 195 text

GitHub Stuff allowed merge types

Slide 196

Slide 196 text

GitHub Stuff allowed merge types

Slide 197

Slide 197 text

GitHub Stuff allowed merge types

Slide 198

Slide 198 text

GitHub Stuff allowed merge types

Slide 199

Slide 199 text

GitHub Stuff auto merge

Slide 200

Slide 200 text

GitHub Stuff auto merge

Slide 201

Slide 201 text

GitHub Stuff auto merge

Slide 202

Slide 202 text

GitHub Stuff merge queue

Slide 203

Slide 203 text

No content

Slide 204

Slide 204 text

No content

Slide 205

Slide 205 text

No content

Slide 206

Slide 206 text

No content

Slide 207

Slide 207 text

GitHub Stuff refs/pull /*

Slide 208

Slide 208 text

$ git ls-remote 593c09ffa229592be6247338a39cce09085aaee6 refs/heads/inertia 95ac6279f06baa7535e2d084df05cf9d0065e64b refs/heads/master ad8b29eeb8ff141cb06b2819d277bedd3aa358a9 refs/heads/new-vector-cl e37d20595e0c55fd4ab1b28e6ad195100dacd42c refs/heads/remote-vector dc29ff8048689b25a5384a567a7b70264ebc63f9 refs/pull/220/head 99daa15a96073549e11d4fe5a1ee3ef27e95e199 refs/pull/221/head 3a171b4261728292805160fca87e2c901b3e9110 refs/pull/222/head 59e4fa4373be1b062fcd01c559ffcbfac73a7900 refs/pull/223/head 6358f1136de48bf22f244a60429502b85b8553b1 refs/pull/223/merge ec54ea7fcd11d820b6df61f63a3d6c0215db0128 refs/pull/224/head 9af6be7cb29806c788f8ee1c757696671cda8727 refs/pull/225/head 93ef792cde39c7c79d4fcda099321edc872369c4 refs/pull/226/head 97f570af65aa72677b278b3e0c5a5d3c0efdc04a refs/pull/227/head 340a38f8e140c2379b2d51507939dda9a7c88911 refs/pull/227/merge 27300a34fb5276f2ac92d90429bce8d0c6a679ef refs/pull/228/head

Slide 209

Slide 209 text

$ git ls-remote 593c09ffa229592be6247338a39cce09085aaee6 refs/heads/inertia 95ac6279f06baa7535e2d084df05cf9d0065e64b refs/heads/master ad8b29eeb8ff141cb06b2819d277bedd3aa358a9 refs/heads/new-vector-cl e37d20595e0c55fd4ab1b28e6ad195100dacd42c refs/heads/remote-vector dc29ff8048689b25a5384a567a7b70264ebc63f9 refs/pull/220/head 99daa15a96073549e11d4fe5a1ee3ef27e95e199 refs/pull/221/head 3a171b4261728292805160fca87e2c901b3e9110 refs/pull/222/head 59e4fa4373be1b062fcd01c559ffcbfac73a7900 refs/pull/223/head 6358f1136de48bf22f244a60429502b85b8553b1 refs/pull/223/merge ec54ea7fcd11d820b6df61f63a3d6c0215db0128 refs/pull/224/head 9af6be7cb29806c788f8ee1c757696671cda8727 refs/pull/225/head 93ef792cde39c7c79d4fcda099321edc872369c4 refs/pull/226/head 97f570af65aa72677b278b3e0c5a5d3c0efdc04a refs/pull/227/head 340a38f8e140c2379b2d51507939dda9a7c88911 refs/pull/227/merge 27300a34fb5276f2ac92d90429bce8d0c6a679ef refs/pull/228/head

Slide 210

Slide 210 text

$ git ls-remote 593c09ffa229592be6247338a39cce09085aaee6 refs/heads/inertia 95ac6279f06baa7535e2d084df05cf9d0065e64b refs/heads/master ad8b29eeb8ff141cb06b2819d277bedd3aa358a9 refs/heads/new-vector-cl e37d20595e0c55fd4ab1b28e6ad195100dacd42c refs/heads/remote-vector dc29ff8048689b25a5384a567a7b70264ebc63f9 refs/pull/220/head 99daa15a96073549e11d4fe5a1ee3ef27e95e199 refs/pull/221/head 3a171b4261728292805160fca87e2c901b3e9110 refs/pull/222/head 59e4fa4373be1b062fcd01c559ffcbfac73a7900 refs/pull/223/head 6358f1136de48bf22f244a60429502b85b8553b1 refs/pull/223/merge ec54ea7fcd11d820b6df61f63a3d6c0215db0128 refs/pull/224/head 9af6be7cb29806c788f8ee1c757696671cda8727 refs/pull/225/head 93ef792cde39c7c79d4fcda099321edc872369c4 refs/pull/226/head 97f570af65aa72677b278b3e0c5a5d3c0efdc04a refs/pull/227/head 340a38f8e140c2379b2d51507939dda9a7c88911 refs/pull/227/merge 27300a34fb5276f2ac92d90429bce8d0c6a679ef refs/pull/228/head

Slide 211

Slide 211 text

$ git ls-remote 593c09ffa229592be6247338a39cce09085aaee6 refs/heads/inertia 95ac6279f06baa7535e2d084df05cf9d0065e64b refs/heads/master ad8b29eeb8ff141cb06b2819d277bedd3aa358a9 refs/heads/new-vector-cl e37d20595e0c55fd4ab1b28e6ad195100dacd42c refs/heads/remote-vector dc29ff8048689b25a5384a567a7b70264ebc63f9 refs/pull/220/head 99daa15a96073549e11d4fe5a1ee3ef27e95e199 refs/pull/221/head 3a171b4261728292805160fca87e2c901b3e9110 refs/pull/222/head 59e4fa4373be1b062fcd01c559ffcbfac73a7900 refs/pull/223/head 6358f1136de48bf22f244a60429502b85b8553b1 refs/pull/223/merge ec54ea7fcd11d820b6df61f63a3d6c0215db0128 refs/pull/224/head 9af6be7cb29806c788f8ee1c757696671cda8727 refs/pull/225/head 93ef792cde39c7c79d4fcda099321edc872369c4 refs/pull/226/head 97f570af65aa72677b278b3e0c5a5d3c0efdc04a refs/pull/227/head 340a38f8e140c2379b2d51507939dda9a7c88911 refs/pull/227/merge 27300a34fb5276f2ac92d90429bce8d0c6a679ef refs/pull/228/head

Slide 212

Slide 212 text

❯ git config remote.origin.fetch '+refs/pull /* :refs/remotes/origin/pull / * ' ❯ git fetch remote: Enumerating objects: 23, done. remote: Counting objects: 100% (23/23), done. remote: Compressing objects: 100% (12/12), done. remote: Total 23 (delta 12), reused 16 (delta 11), pack-reused 0 Unpacking objects: 100% (23/23), 11.47 KiB | 1.04 MiB/s, done. From github.com:gitbutlerapp/web * [new ref] refs/pull/100/head - > origin/pull/100/head * [new ref] refs/pull/101/head - > origin/pull/101/head * [new ref] refs/pull/102/head - > origin/pull/102/head * [new ref] refs/pull/103/head - > origin/pull/103/head * [new ref] refs/pull/104/head - > origin/pull/104/head * [new ref] refs/pull/105/head - > origin/pull/105/head * [new ref] refs/pull/106/head - > origin/pull/106/head * [new ref] refs/pull/107/head - > origin/pull/107/head * [new ref] refs/pull/108/head - > origin/pull/108/head * [new ref] refs/pull/109/head - > origin/pull/109/head

Slide 213

Slide 213 text

❯ git config remote.origin.fetch '+refs/pull /* :refs/remotes/origin/pull / * ' ❯ git fetch remote: Enumerating objects: 23, done. remote: Counting objects: 100% (23/23), done. remote: Compressing objects: 100% (12/12), done. remote: Total 23 (delta 12), reused 16 (delta 11), pack-reused 0 Unpacking objects: 100% (23/23), 11.47 KiB | 1.04 MiB/s, done. From github.com:gitbutlerapp/web * [new ref] refs/pull/100/head - > origin/pull/100/head * [new ref] refs/pull/101/head - > origin/pull/101/head * [new ref] refs/pull/102/head - > origin/pull/102/head * [new ref] refs/pull/103/head - > origin/pull/103/head * [new ref] refs/pull/104/head - > origin/pull/104/head * [new ref] refs/pull/105/head - > origin/pull/105/head * [new ref] refs/pull/106/head - > origin/pull/106/head * [new ref] refs/pull/107/head - > origin/pull/107/head * [new ref] refs/pull/108/head - > origin/pull/108/head * [new ref] refs/pull/109/head - > origin/pull/109/head

Slide 214

Slide 214 text

❯ git config remote.origin.fetch '+refs/pull /* :refs/remotes/origin/pull / * ' ❯ git fetch remote: Enumerating objects: 23, done. remote: Counting objects: 100% (23/23), done. remote: Compressing objects: 100% (12/12), done. remote: Total 23 (delta 12), reused 16 (delta 11), pack-reused 0 Unpacking objects: 100% (23/23), 11.47 KiB | 1.04 MiB/s, done. From github.com:gitbutlerapp/web * [new ref] refs/pull/100/head - > origin/pull/100/head * [new ref] refs/pull/101/head - > origin/pull/101/head * [new ref] refs/pull/102/head - > origin/pull/102/head * [new ref] refs/pull/103/head - > origin/pull/103/head * [new ref] refs/pull/104/head - > origin/pull/104/head * [new ref] refs/pull/105/head - > origin/pull/105/head * [new ref] refs/pull/106/head - > origin/pull/106/head * [new ref] refs/pull/107/head - > origin/pull/107/head * [new ref] refs/pull/108/head - > origin/pull/108/head * [new ref] refs/pull/109/head - > origin/pull/109/head

Slide 215

Slide 215 text

❯ git pull origin pull/220/head From github.com:gitbutlerapp/web * branch refs/pull/220/head -> FETCH_HEAD Already up to date.

Slide 216

Slide 216 text

GitButler gitbutler.com

Slide 217

Slide 217 text

GitButler

Slide 218

Slide 218 text

No content

Slide 219

Slide 219 text

No content

Slide 220

Slide 220 text

No content

Slide 221

Slide 221 text

No content

Slide 222

Slide 222 text

No content

Slide 223

Slide 223 text

No content

Slide 224

Slide 224 text

Thank you! Be sure to let us buy you a beer at our drinkup tonight! Le Waff, 6p

Slide 225

Slide 225 text

?????? Be sure to let us buy you a beer at our drinkup tonight! Le Waff, 6p

Slide 226

Slide 226 text

Any Questions? Be sure to let us buy you a beer at our drinkup tonight! Le Waff, 6p