• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Git in action
 

Git in action

on

  • 1,177 views

 

Statistics

Views

Total Views
1,177
Views on SlideShare
1,175
Embed Views
2

Actions

Likes
3
Downloads
30
Comments
0

1 Embed 2

http://localhost 2

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Git in action Git in action Presentation Transcript

    • Git in Action
    • Agenda● Introduction● Action● Q&A
    • Introduction
    • Distributed Version Control Remote Repository Repository Repository(public or privat) push pull Workspace Workspace Workspace Local Repository Repository Repository Alice Bob Charlie
    • Git repositoryrepository = object database .git/objects
    • Git repositoryid(object) = SHA1(object content) 4afd 57aa 34da 45f5 90ff aabc 3daa 9873 78dd 12df 8810 675b aacc 456c ddaa.git/objects/45/6c...
    • Git repositorycontent is stored in blob objects => File 4afd 57aa 34da 45f5 90ff aabc 3daa 9873 78dd 12df 8810 675b aacc 456c ddaa
    • Git repositorystructure is stored in tree objects => Directory 4afd 57aa 34da 45f5 90ff aabc 3daa 9873 78dd 12df 8810 675b aacc 456c ddaa
    • Git repositoryHistory is stored in commit objects => Authenticated hierarchical snapshots 4afd 57aa 90ff 34da 45f5 78dd 9873 aabc 8810 3daa ddaa 12df aacc 456c 675b
    • Git repository
    • Git repositoryreferences are stored as tag objects => (Signed)symbolic link 4afd 57aa 90ff 34da 45f5 78dd 9873 aabc 8810 3daa ddaa 12df aacc 456c 675b
    • Git repository repository entry point => symbolic link branches master 4afd 57aa 90ff 34da 45f5 78ddtags aabc 8810 9873 3daa ddaa 12df aacc 456c 675b
    • Action
    • The most important commands● add ● fetch ● rebase● bisec ● grep ● remote● branch ● init ● reset● checkout ● log ● rm● clone ● merge ● show● commit ● mv ● stash● config ● pull ● status● diff ● push ● tag
    • Configuration in $HOME/.gitconfiggit config --global user.name "Some name"git config --global user.email some@emailgit config --global color.branch autogit config --global color.diff autogit config --global color.interactive autogit config --global color.status autogit config --global merge.tool meldgit config --global core.editor vim
    • Initializing a repository● Create a new repository git init● Clone an existing repository git clone <url>● Possible URLs: ● local directory, ssh://, git://, rsync://, ftp:// etc.
    • Show the status● Simply call git status● This will show the lifecycle of the files➔ A file which is indexed and modified afterwards, must be added explicitly to the index again!
    • The IndexWorking Copy Index Repository git add, git commit rm, mv● Buffer between working copy and repository● Describes whats commited next● Shortcut: git commit -a
    • Commit● Changes stored in the index are written into the repository and get a new SHA1 checksum● The HEAD-reference points to the new commit● The last commit can be changed and re-committed using the --amend parameter, e.G. typos in the comment, missed changes to be commited etc. git commit --amend
    • Show differences● Between workspace and index git diff● Between index and the last commit git diff --staged● Between the workspace and the last commit git diff HEAD● Between two commits git diff $commit $commit● Between current branch and another one git diff branch_name
    • Object references● SHA1: d37f32a8058b2c4b5d1b1c55c4cab41611899cb3● Short SHA1: d37f32a● Tags: v1.5.1● Local branch: master● Remote branch: origin/master● Checkout: HEAD● Last Fetch: LAST_FETCH● Previous Head: ORIG_HEAD
    • Object references● Parents: Name^, Name^^^, Name~10, Name^2, …● What was yesterday? Name@{yesterday}● What was on ...? Name@{1 June}● What was … days before?Name@{3}● What happened since...? --since=“2 weeks ago“● What was until ...? --until=“1 week ago“● Who has...? --committer=pattern● What was between...? name1..name2
    • Show me the commit● Prints the diffs in a commit● Shows diffs as well as statistics ● git show ● git show --stat● Can be used with all object references
    • Reset● git reset modifies different elements: ● Variant 1: --hard The HEAD, the index and all local modifications in the workspace will be erased! ● Variant 2: --soft The HEAD will be overwritten. Previous commits will change to „changes to be committed“ ● Variante 3: --mixed (default) The HEAD and the index are overwritten● The HEAD is just a reference to a specific commit
    • Logs● Shows the commit logs ● git log ● git log -10● Can be used with all object references ● git log -3 master@{15 July} ● git log --author=Max Mustermann ● git log --grep=pattern
    • Search in files● git provides a grep integration● MUCH faster than standard grep git grep -e pattern -- some/file git grep -e pattern branch -- some/file
    • Tags● Tags are named references to commits● There are annotated and lightweight tags● Creation of a tag ● Lightweight: git tag <name> ● Annotated: git tag -a <name> -m „message“● Show all tags: git tag
    • Create and change branches● Branches are references to commits● The default-branch is called master● Create: git branch name [commit]● Change: git checkout name● Create and change: git checkout -b name● The HEAD will be adapted accordingly
    • Delete branches● Branches can be deleted every time● To delete a merged branch git branch -d branch_name● To delete a non-merged branch git branch -D branch_name
    • Show all branches● Local ones git branch● Remote ones git branch -r● All branches git branch -a● All non-merged branches git branch --no-merged
    • Conflicts and merging● Merge as many branches as you want at the same time git merge branch_a branch_b● Merged branches can also be deleted● Conflict markers indicates auto-merge problems ● Show with git status or git mergetool ● Use editor or mergetool to fix the conflict ● Stash the resolved conflict on the index ● Do a commit
    • Cherry-pick● Sometimes you only want to merge specific commits into another branch● Git allows this cherry picking git cherry-pick <commit>
    • Rebase● Alternative to git merge● Simple rebase pushes the branch onto the HEADgit merge master test git rebase master test f e e d e d d master c master c b b a a
    • Interactive rebase● git rebase -i master● Handles multiple commits: f t(e+f) master ● delete e ● ignore d s(d) ● edit c ● squash together b b● You can squash multiple commits a into one to have a clean history
    • Remote Branches● Clone creates a new local branch within a namespace: remotes/origin/<branch name>● Default-name for remote server is origin ● Can be changed using git remote● Checkout a remote branch using git checkout -b <remote_name>/<branch>● Remote branches are Tracking Branches
    • Adding remotes● Unlimited number of remotes● Modifications with git remote● Typing git remote will list all remotes➔ Team members can add other team members remotes for easy code exchange
    • Pull the changes● Tracking-branches know the SHA1 from the remote since the last pull● Changes are fetched using git fetch remote:branch ➔ Note, these changes are not merged yet!● Shortcut: Do a pull git pull remote:branch = git fetch + git merge
    • Provide your changes● Store the commits on a central repository server● Not all local branches must be pushed → private stuff keeps private! git push remote:branch➔ NEVER change the history of distributed changes using rebase!
    • Stashing● Common problem: ● Current work must be pushed asside but the changes shouldnt be commited yet ● Changes in the workspace/index must be transfered in another branch● Solution: The index and changed files are cached and the workspace and index is resetted git stash save „description“ git stash apply git stash pop # apply and drop
    • Stashing episode II● Advantage: Stashing indexes the files and write them into the reflog● Even if these changes are never commited, you can get them back git stash list git log stash@{10} git show stash@{26} git checkout -b old_work stash@{32}● Use stashes simply like branches➔ The reflog exists independent from the commits
    • Blame● Problem: You dont know who implemented the code snippet● Solution: git blame -- file shows a list of changes for a file and when and who modified it
    • Q&A