GIT Presentation

Post on 10-May-2015

222 views 2 download

Tags:

description

A Presentation on GIT SCM Tool. Covers Basics and Internals of GIT Few References [Recommended Learning]: http://git-scm.com/doc https://github.com/pluralsight/git-internals-pdf/releases Few Interactive Learning [Will get you going]: https://try.github.io/levels/1/challenges/1 http://pcottle.github.io/learnGitBranching/

Transcript of GIT Presentation

GITthe stupid content tracker

Resources: Peep Code and Git-SCM

GIT“In many ways you can just see git as a filesystem — it’s content-addressable, and it has a notion of versioning, but I really really designed it coming at the problem from the viewpoint of a filesystem person (hey, kernels is what I do), and I actually have absolutely zero interest in creating a traditional SCM system.” – Linus

GIT as a SCM is an usecase

Non-SCM Use Cases of GIT:

Peer to Peer Content Distribution Network

Distributed Document Oriented Database [like wiki]

GIT 1. Non Linear Development - Cheap and efficient branching2. Distributed Development - No repository is special3. Efficiency - Fastness, Size & Network Operations

The GIT Way1. Snapshots not differences

2. Nearly every operations are local.

3. Ensures Integrity.

4. Undo is always an option.

5. And the three states

GIT Setup1. Setting up the origin2. Setting up the local

GIT Tracking

GIT Tracking1. Staging2. Status3. Viewing the diff

3.1 Working directory and Stage3.2 Stage and a Commit3.3 Working directory and a Commit

4. Remove5. Move or Rename6. Referencing

GIT Tracking1. Commit2. Undo

2.1 Checkout

2.2 Reset [hard, soft, mixed - default]2.3 Revert

3. Working with remote

An interactive Demo

GIT TrackingIgnores Files from1. .gitignore from directories [like IDE Related Folders]2. $GIT_DIR/info/exclude [Project Specific Setting like logs, binaries]3. core.excludesfile [Stuffs needn’t be shared among developers]

GIT Tracking (Checkout vs Reset vs Revert)

GIT Objects1. Blob2. Tree3. Commit4. Tag

*3 in italics are important to understand git

GIT Objects1. The Git Directory serves as the Git Object Database.2. Each object is compressed and referenced by SHA-1 value of [Header + Content].

GIT Objectstamil@dv-lp-tamil-s:~/gitdemo$ git initInitialized empty Git repository in /home/tamil/gitdemo/.git/tamil@dv-lp-tamil-s:~/gitdemo$ cd .git/tamil@dv-lp-tamil-s:~/gitdemo/.git$ lltotal 40drwxr-xr-x 7 tamil tamil 4096 Mar 24 17:25 ./drwxr-xr-x 3 tamil tamil 4096 Mar 24 17:25 ../drwxr-xr-x 2 tamil tamil 4096 Mar 24 17:25 branches/-rw-r--r-- 1 tamil tamil 92 Mar 24 17:25 config-rw-r--r-- 1 tamil tamil 73 Mar 24 17:25 description-rw-r--r-- 1 tamil tamil 23 Mar 24 17:25 HEADdrwxr-xr-x 2 tamil tamil 4096 Mar 24 17:25 hooks/drwxr-xr-x 2 tamil tamil 4096 Mar 24 17:25 info/drwxr-xr-x 4 tamil tamil 4096 Mar 24 17:25 objects/drwxr-xr-x 4 tamil tamil 4096 Mar 24 17:25 refs/

GIT Objects [blob]1. Stores Contents of files.2. No file metadata.3. Two different files with similar contents are marked one [even while transfers].

GIT Objects [tree]1. List of trees and blobs [similar to ls -l in unix] + Some Header.2. An entry in tree has mode, type, name and sha of file or another tree.

GIT Objects [commit]1. Holds a reference to a tree object.2. Has author, committer, message and any parent commits that directly preceded it.3. History is built from the references to parent commits.

GIT Objects [tag]1. Refers to one particular commit object.2. Has object, type, tag, tagger and a message.3. Mostly the type is commit and object referred is the SHA-1 of commit being tagged.

GIT Data Model

commit

tree

blob

HEAD

branch

remote tag

GIT Data Model [Demo]

…. Some Action

Branching and Merging1. Creating a branch is nothing more than just writing 40 characters to a file.2. Add Remotes to point to other people copies.

Merge Types:Fast Forward [--no-ff]3-Way Merge

Merge Strategies:Resolve

Recursive [Default for merging 2 branches]

Ours

Octopus [Default for merging from more than one branch]

Subtree

Merging [Fast Forward]

After Merge:

C0 C1 C3

Test

HEAD

C0 C1 C3

HEAD

Test

C0 C1

C3

HEAD

Test

C4

--no-ff Mode:

Merging [3-Way]

C0 C1 C3

C4

HEAD

Test

C0 C1 C3

C4

Test

C5

HEADBase Ours

Theirs

More Complex Merges

More Complex Merge [contd.]

GIT Tagging1. Lightweight - Just a cheap reference to a commit2. Annotated - More than a reference

Tags can be published or shared with other developers via push.They aren’t pushed by default.

git-describe - Shows the most recent tag that is reachable from a commit

GIT Stash1. Helps switching to a different branch even when working directory isn’t clean.2. Saves uncommitted changes [modified tracked files and staged changes] as WIP in master.

3. Can be reapplied, dropped or applied on a new branch.

GIT Patches & Cherry Picks1. Patches are alternate for merge or pull requests [SVN way].2. Can Merge specific file from different branch or a commit using patch mode.3. Cherry Pick helps in applying specific commit from same or another branch.

GIT GrepFile Grep:git grep -e “isStringSet” *.js

Log Grep:git log --grep=fix --author=tamil.s since=’yesterday’

GIT LogList By (with stats or patches):UserTime Limit [before, after, since and until]GrepLocate the introductory Commitand many more..

Might take an year to explore ;)

GIT Workflows

Centralized Workflow

GIT Workflows

Integration manager

GIT Workflows

Benevolent Dictator

GIT Lab1. Managing your profile2. Creating a project3. Managing Members4. Code Reviews & Comments5. Managing Issues + Milestones6. Cool Commit Messages7. Merge Requests

Questions