Practical Git - NYC Code Camp

Preview:

Citation preview

Practical Gitat work and open source

Chris Gomez

@SpaceShot

www.chrisgomez.com

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

Git

• Created by Linus Torvalds

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

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

It’s just a Directed Acyclic Graph!

• A very complicated way of saying something very simple:

http://xkcd.com/1597/

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

git merge – putting two branches together

C1 C2

C3

C5C4

C6

C7

master

feature

Merge commit with two parents

master

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

C1 C2

C3

C5C4

C6

C7

master

feature

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

C1 C2 C3C5C4 C6C7

master

feature

git rebase interactive – Why?

C1 C2

C3 C5C4 C6 C7

master

feature

git rebase interactive – rewrite history

C1 C2

C3/C4 squashedC6 better commit

messageC7

master

feature

C5 was dumped.Can rewrite commitsSquash commitsPick commits

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>

So advanced!

• git filter-branch:

example:

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

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

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?!?!

To the Cloud!...

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/

Some great resources

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

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

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

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.

Recommended