Practical Gitat work and open source
Chris Gomez@SpaceShot
www.chrisgomez.com
Slide deck: http://bit.ly/phlcc16_git
Chris Gomez• Microsoft MVP in Visual Studio Tools and Technologies• 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 repositories
SpaceShot/SignalR-BoardGame(on GitHub)*
* This could also be Visual Studio Team Services, BitBucket, your company’s git server, or any git repo on another server you have access to.
Git clone
SpaceShot/SignalR-BoardGame(on GitHub)
C:\Source\SignalR-BoardGame(my computer)
Copy
Git clone
SpaceShot/SignalR-BoardGame
C:\Source\SignalR-BoardGame
Each is a fully independent repository
“Fork”
SpaceShot/SignalR-BoardGame
Copies in the cloud (or your server)
phlgameworks/SignalR-BoardGame
Each is a fully independent repository
“Fork”• Is Fork a Git concept?• GitHub / Bitbucket / Gitlab concept (and others)• Not in Visual Studio Team Services• Can be simulated with git commands, if necessary.
•Why fork?• Isolation of work• Freedom to experiment and commit• Not just with source control
Git remotes
SpaceShot/SignalR-BoardGame
C:\Source\SignalR-BoardGame
Lightweight link to source
feature
Remotes
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
message C7
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 Git documentation.
Top Related