Practical Git - NYC Code Camp
-
Upload
christopher-gomez -
Category
Software
-
view
156 -
download
1
Transcript of Practical Git - NYC Code Camp
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.