Git internals book
This morning I saw at my rss feed that a book called Git Internals by Scott Chacon has been opensourced. So, having an idle afternoon, I borrowed an ebook from a relative and read it while taking a sunbath (idea! Have a tablet with a electronic ink screen and vim, and program on the beach.. I’m eager to see fast enough e. ink for that!)
The first 10-15 pages of the book are about the internal cogs of git, and they are easy to read and very well explained with diagrams. I invite you to read them, because thanks to them I now understand Git very well. The rest of the book covers how to work with git, and typical commands. Some of its bits are new to me, so I have summarized them here for you and me (well, mostly for me, I doubt anyone is reading this :P).
Possible workflows for decentralized SCM systems as git
- Central repository model: better for small teams.

- Dictator and leutenant model: better for large teams. Eg: Linux kernel

- Integration manager model: community based git repos. Eg: Github

GUIs that come bundled with git
Provide simple visualization of git trees and commits:
- 
    gitk: Tcl/Tk based browser. Will take most of the same arguments that git log will take. 
- 
    git instaweb: Without Tk. It fires up a web server running the gitweb CGI script, using lighttpd, apache, or webrick and then opens your default browser. - 
        Open: git instaweb --httpd = lighttpd or apache or webrick
- 
        Close: git intaweb stop
 
- 
        
Crypto signed tags
- 
    Sign tag: git tag -s(sign with email address GPG key)or git tag -u <keyID> v1.0 -m "release v1.0"
- 
    Verify signed tag: git tag -v v1.0
- 
    push tag to remote: git push origin [tagname]
###Caring of git From time to time, you need to take care of git repos, usually the big ones. To have them healthy and running quickly:
- 
    Garbage collection: git gc(it is possible to turn it off and on automatically).
- 
    Fsck: git fsck: To know if there are unreachable or corrupted objects in the DB and fix them.git prune: To remove dangling objects.
Sharing repos
It is done using the git-daemon, which supports these 3 protocols:
- 
    git: No built in integration, generally you cannot push over it. 
- 
    ssh: If an user has ssh and write access, that user can push. 
- 
    http: easy setup, you need just static web server. But to push, you need to run a DAV server. 
Browse git objects(blobs) directly
- 
    git show [object]
- 
    git cat-file [object]
Generating patch files
- 
    Generate: git diff master..experiment > patchFile
- 
    Apply patch: patch -p1 patchFile patching file fileToPatch
Export a tree
git-archive: For exporting a snapshot of a git tree.
Interactive shells
git add -i: Provides an interactive shell to select files, and
also allows to commit only chunk of files (useful for a patch).
git rebase -i: For complex rebasing.
Víctor Cuadrado Juan
I'm Víctor Cuadrado Juan, a developer and FOSS enthusiast, in love with Linux. Currently living in Nürnberg, Germany. Feel free to waste your precious time around here, or to contact me.