practical git - nyc code camp

19
Practical Git at work and open source Chris Gomez @SpaceShot www.chrisgomez.com

Upload: christopher-gomez

Post on 21-Jan-2018

154 views

Category:

Software


1 download

TRANSCRIPT

Page 1: Practical Git - NYC Code Camp

Practical Gitat work and open source

Chris Gomez

@SpaceShot

www.chrisgomez.com

Page 2: Practical Git - NYC Code Camp

Chris Gomez

• Microsoft MVP in Visual Studio Tools and Technologies (ASP.NET)

• Co-host of the Static Void Podcast www.staticvoidpodcast.com

• Philly Game Works - www.phillygameworks.org - @phillygameworks

Page 3: Practical Git - NYC Code Camp

Git

• Created by Linus Torvalds

https://www.youtube.com/watch?v=4XpnKHJAok8

Page 4: Practical Git - NYC Code Camp

Goals

• Suitable for Open Source collaboration• No central server, lack of connectivity to contributors

• Don’t want to have to know and trust all the contributors

• Intended for Linus to have a “web of trust” in dealing with Linux

• Something that is not CVS or SVN• Intense dislike of CVS and SVN

• Top complaint seems to be “intelligent merging”

• Also complaint that merge pain often fell on a victim rather than perpetrator

Page 5: Practical Git - NYC Code Camp

It’s just a Directed Acyclic Graph!

• A very complicated way of saying something very simple:

Page 6: Practical Git - NYC Code Camp

http://xkcd.com/1597/

Page 7: Practical Git - NYC Code Camp

Exploring the git filesystem

• Content-Addressable filesystem• Objects are stored as blobs and identified by a hash of the content (plus a tiny

amount of header data)

• Labels are placed somewhere else to link up our filenames

Page 8: Practical Git - NYC Code Camp

git merge – putting two branches together

C1 C2

C3

C5C4

C6

C7

master

feature

Merge commit with two parents

master

Page 9: Practical Git - NYC Code Camp

git rebase (onto a branch) – when the world moved on…

C1 C2

C3

C5C4

C6

C7

master

feature

Page 10: Practical Git - NYC Code Camp

git rebase (onto a branch) – time travel your work

C1 C2 C3C5C4 C6C7

master

feature

Page 11: Practical Git - NYC Code Camp

git rebase interactive – Why?

C1 C2

C3 C5C4 C6 C7

master

feature

Page 12: Practical Git - NYC Code Camp

git rebase interactive – rewrite history

C1 C2

C3/C4 squashedC6 better commit

messageC7

master

feature

C5 was dumped.Can rewrite commitsSquash commitsPick commits

Page 13: Practical Git - NYC Code Camp

Other commands

• Remove commits: git reset --hard HEAD~X

• Change last commit message: git commit --amend

• Track a branch: git remote add --track <branch> <remote nickname> <remote address>

• Git branch from a commit: git checkout –b <newbranch> <commit>

• Git cherry pick: git cherry-pick <commit>

Page 14: Practical Git - NYC Code Camp

So advanced!

• git filter-branch:

example:

git filter-branch --tree-filter 'rm filename' HEAD

https://git-scm.com/docs/git-filter-branch

Page 15: Practical Git - NYC Code Camp

But how are you really going to use Git?

• You are probably going to use… a central server!

• You might use GitHub, BitBucket, Visual Studio Team Services in the cloud (among others)

• You might use TFS on premises, GitLab, GitHub Enterprise, BitBucket Enterprise

Wait, doesn’t this just make it SVN, CVS, TFS, VSS all over again?!?!

Page 16: Practical Git - NYC Code Camp

To the Cloud!...

Page 17: Practical Git - NYC Code Camp

libgit2

• A reimplementation of Git in C with many bindings:• C#, Python, Ruby, Java

• “re-entrant linkable library with a solid API”• This means it’s okay to use it in your application. It is respectful of system resources and

tries to keep from bringing down your application

https://libgit2.github.com/

Page 18: Practical Git - NYC Code Camp

Some great resources

https://www.youtube.com/watch?v=SiokK8Q1wo0

https://www.youtube.com/watch?v=dBSHLb1B8sw

https://www.youtube.com/watch?v=duqBHik7nRo

Page 19: Practical Git - NYC Code Camp

Git Man Page Generator (Fun)

• https://git-man-page-generator.lokaltog.net/

• Please note this is not real git documentation, but a joke about Gitdocumentation.