Git is a version control system created by Linus Torvalds for open source collaboration. It allows contributors to work independently without a central server by using a content-addressable filesystem and distributed repositories. The document discusses various Git commands like clone, fork, merge, rebase, and remote that help manage branches and integrate changes in a distributed workflow. It also notes how most users interact with Git through hosted services like GitHub rather than directly.
1. Practical Git
at work and open source
Chris Gomez
@SpaceShot
www.chrisgomez.com
Slide deck: http://bit.ly/phlcc16_git
2. 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
3. Git
• Created by Linus Torvalds
https://www.youtube.com/watch?v=4XpnKHJAok8
4. 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
5. It’s just a Directed Acyclic Graph!
• A very complicated way of saying something very simple:
7. 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
12. “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
18. git rebase interactive – rewrite history
C1 C2
C3/C4 squashed
C6 better commit
message
C7
master
feature
C5 was dumped.
Can rewrite commits
Squash commits
Pick commits
19. 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>
20. So advanced!
• git filter-branch:
example:
git filter-branch --tree-filter 'rm filename' HEAD
https://git-scm.com/docs/git-filter-branch
21. 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?!?!
23. 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/
25. 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.
Notas do Editor
This is a directed acyclic graph. Ignore the branch pointers (in orange). It’s a graph of objects, which is just a set of nodes that are connected. It is directed, because the arrows indicate there is a direction to the nodes (in Git’s case, the parent nodes), and it is acyclic because you don’t end up with nodes that are pointed back to themselves. That’s why it’s often represented as a flowing line with forks that usually jut out and come back.