How to use git without rage
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

How to use git without rage

on

  • 7,101 views

 

Statistics

Views

Total Views
7,101
Views on SlideShare
7,075
Embed Views
26

Actions

Likes
11
Downloads
147
Comments
0

2 Embeds 26

http://www.ivanenviroman.com 16
http://www.scoop.it 10

Accessibility

Upload Details

Uploaded via as OpenOffice

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

How to use git without rage Presentation Transcript

  • 1. Xx de enero de 2010 Use git without rage
  • 2. “VCS should be a subject in informatics” Heared about VCS
  • 3. “ We use VCS as if we were trained monkeys” Heared about VCS
  • 4. Types of VCS LVCS (Localized VCS) CVCS (Centralized VCS) DVCS (Distributed VCS)
  • 5. LVCS
    • cp -r project projectB
    • 6. rcs (mac os)
  • 7. CVCS (Centralized VCS)
    • SVN
    • 8. CVS
  • 9. DVCS (Distributed VCS)
    • Git
    • 10. Mercurial
  • 11. Git Basics
  • 12. First-time git setup
    • Three places
      • System: git config --system (/etc/gitconfig)
      • 13. Global: git config --global (~/.gitconfig)
      • 14. Local: git config (cwd)
    • git config [--system | --local] property value
    • 15. git config --global user.name 'wadus'
  • 16. Git Basics
  • 17. File status cycle untracked staged modified unmodified git add edit git add git commit git commit -a
  • 18. Workflows
      Scenario 1: Creating a repository from the beginnig and working with it (with no rage)
  • 19. Scenario 1: creating the repository
      git init (from directory project) Pffffff... this was hard!!!!
  • 20. Workflows -Scenario 1: edit some files
      Edit and/or create some files for your project this is what developing is about in last term, isn't it?
  • 21. Workflows -Scenario 1: commiting changes
      So, now you want to commit changes, but first... some advices for those who are used to working with CSCVs such as svn or cvs 100.times do
        puts “I will think in local terms, 'cos I am not working with remotes (yet)”
      end
  • 22. Workflows - Scenario 1: adding files to the staging area
      git status git add <file> -> add files to staging area (either new or modified files) Wow!!! I could not have imagined it!!!!
  • 23. Workflows – Scenario 1: Removing files from the staging area
      Damn it!!! I staged some files I didn't have to git reset HEAD <file> Phewwww!!!!
  • 24. Workflows – Scenario 1: What am I about to commit?
      Ok, I want to commit my changes, but which files I am about to commit? git status git diff (for unstaged files) git diff --cached (for staged files)
  • 25. Workflows – Scenario 1: Let's commit!!!
      git commit -> it will commit all the files in staging area git commit <filename> -> it will commit named files git commit -a -> it will commit all modified files skipping the staging area for those which are not staged
  • 26. Workflows – Scenario 1: deleting files
      rm <filename> removes file manually git rm <filename> stages deletion
        ...or...
      git rm <filename> will do both things
  • 27. Workflows – Scenario 1: undeleting files
      git status will give you clues if deletion is in the staging area
        git reset HEAD <filename>
      if deletion is not in the staging area
        git checkout <filename>
  • 28. Workflows – Scenario 1: moving files
      mv filename filename2 git rm filename git add filename2
        ...or...
      git mv filename filename2
  • 29. Workfows- Scenario 1: undoing things
      git commit --amend will modify last commit
        git commit “ OMG, WTF, damn it!!! I forgot to add a file” git add damned_file git commit --ammend “ commit --amend FTW!!!”
  • 30. Workfows- Scenario 1: undoing things (ii)
      Unstaging a staged file
        git reset HEAD filename
      Unmodify a modified and unstaged file
        git checkout filename
  • 31. Workflows
      Scenario 2: working with remotes
  • 32. Workfows- Scenario 2: adding a remote
      So I want to work with another repo... git remote add [shortname] [url] git remote add origin your_url Now I finally understand what I've been doing with github all this time!!!
  • 33. Workfows- Scenario 2: showing your remotes
      If you want to know which repos you are working with: git remote git remote -v
  • 34. Workfows- Scenario 2: fetching and pulling
      To get data from your remotes git fetch [remote-name] git pull [remote-name] fetch or pull??? pull = fetch + merge
  • 35. Workfows- Scenario 2: pushing
      If you want to share your data: git push [remote-name] [branch]
  • 36. Workfows- Scenario 2: inspecting a remote
      git remote show [remote-name] Look at the “Local ref configured for git push” Local refs configured for 'git push':
        master pushes to master (local out of date) test pushes to test (up to date)
  • 37. Workfows- Scenario 2: removing and renaming remotes
      git remote rename [original-name] [new-name] git remote rm [remote-name] This changes take effect on your LOCAL repo (remember: local, local, local)
  • 38. Workflows
      Scenario 3: tagging
  • 39. Workfows- Scenario 3: listing tags
      git tag
  • 40. Workfows- Scenario 3: tag types
      2 types of tags: lightweight and annotated Lightweight: It is like a branch that doesn't change, a pointer to a specific commit Annotated: These are stored as full objects. Checksumed and metadata are included
  • 41. Workfows- Scenario 3: Creating and showing tags
      Annotated:
        git tag -a [tag]
      Lightweight:
        git tag [tag]
      git show [tag]
  • 42. Workfows- Scenario 3: Creating tags later
      git tag -a <tag> <(part of) checksum of the commit>
  • 43. Workfows- Scenario 3: Sharing tags
      When pushing, you do not share tags git push origin [tagname] Hey! This is like sharing branches... git push origin --tags shares all the tags
  • 44. Branching: the beginning of magic Please, keep on thinking in local... or I will send @pacoguzman to kill you!!!
  • 45. Branching: the beginning of magic
      Let's do some review... git add README test.rb LICENSE git commit -m 'initial commit of my project' How is this commit stored?
  • 46. Branching: the beginning of magic taken from http://progit.org/
  • 47. Branching: the beginning of magic
      Let's assume we keep on doing some commits
  • 48. Branching: the beginning of magic taken from http://progit.org/
  • 49. Branching: the beginning of magic
      I thought we were going to talk about branches, you son of the bit!!!
  • 50. Branching: the beginning of magic
      I thought we were going to talk about branches, you son of the bit !!!
    A very bad geek joke
  • 51. Branching: the beginning of magic
      Branch: A movable pointer to one of these commits. Do you smell it??? Yeah! And it seems that it's going to taste even better!
  • 52. Branching: the beginning of magic taken from http://progit.org/
  • 53. Branching: the beginning of magic
      So... let's imagine we want to make a new branch: git branch testing
  • 54. Branching: the beginning of magic taken from http://progit.org/
  • 55. Branching: the beginning of magic
      Hey! But somehow I have to know wich branch I am at, aren't I???
  • 56. Branching: the beginning of magic taken from http://progit.org/
  • 57. Branching: the beginning of magic
      git checkout testing
  • 58. Branching: the beginning of magic taken from http://progit.org/
  • 59. Branching: the beginning of magic
      Very pretty... but... how the hell is this supposed to be useful???
  • 60. Branching: the beginning of magic
      touch newfile.txt git commit -a -m 'new file'
  • 61. Branching: the beginning of magic taken from http://progit.org/
  • 62. Branching: the beginning of magic
      git checkout master
  • 63. Branching: the beginning of magic taken from http://progit.org/
  • 64. Branching: the beginning of magic
      touch another_file.txt git commit -a -m 'another new file in master branch'
  • 65. Branching: the beginning of magic taken from http://progit.org/
  • 66. Workflows
      Scenario 4: working with branches
  • 67. Scenario 4: Context
      You are working on a new story, comfortably and peacefully when suddenly you receive a call – OMG! and you are told that it is urgent - but surely not important - to fix some bug in the application (e.g: to change some text which only appears in that last screen of your app)
  • 68. Scenario 4: steps resume
    • Create a branch for the new story you are going to work on
    • 69. Do some work on that branch
    • 70. Swear after you receive that f*ck*ng damned call
    • 71. Commit or stash all the changes that you haven't saved yet – if you want to -
    • 72. Checkout your production (usually master) branch
    • 73. Create a branch to add the hotfix
    • 74. Fix that so f*ck*ng urgent issue
    • 75. Merge this branch and push it to production
    • 76. Switch back to your original story and continue working on it
  • 77. Scenario 4: the process
      git checkout master -b issue_1
    C1 C3 C2 master * issue_1
  • 78. Scenario 4: the process
      make some changes and commit them
    C1 C3 C2 master * issue_1 C4
  • 79. Scenario 4: the process
      Create a new branch from master for that hotfix git checkout master -b hotfix
    C1 C3 C2 master issue_1 C4 * hotfix
  • 80. Scenario 4: the process
      Fix the problem and commit changes
    C1 C3 C2 master issue_1 C4 * hotfix C5
  • 81. Scenario 4: fast forward merge
      Merge hotfix into master git checkout master git merge hotfix
    C1 C3 C2 * master issue_1 C4 hotfix C5
  • 82. Scenario 4: fast forward merge
      What kind of merge is this!!! You have done nothing but moving forward master pointer
    C1 C3 C2 * master issue_1 C4 hotfix C5
  • 83. Scenario 4: the process
      End issue_1 and commit changes
    C1 C3 C2 * master issue_1 C4 hotfix C5 C6
  • 84. Scenario 4: three way merge
      Merge changes git checkout master git merge issue_1
    C3 issue_1 C4 hotfix C5 C6 * master
  • 85. Scenario 4: three way merge
      Merge changes git checkout master git merge issue_1
    C3 * master issue_1 C4 hotfix C5 C6 C7
  • 86. Scenario 4: merge conflicts
      If there are merge conflicts you have to solve them manually. Once you have resolved them, you can set these files as merged with git add <filename> git commit
  • 87. Scenario 4: branch management
      git branch lists branches git branch -v lists branches with their last commit git branch --merged lists merged branches git branch --no-merged lists unmerged branches git branch -d <branchname> deletes merged branch (-D for unmerged branches)
  • 88. Branching workflows
  • 89. Branching workflows: long running branches taken from http://progit.org/
  • 90. Branching workflows: topic branches taken from http://progit.org/
  • 91. Branching workflows: topic branches
      Merge iss91v2 and dumbidea
    taken from http://progit.org/
  • 92. Remote branches
      References to the state of branches on your remote repos They are local branches which you can not move. They are moved automatically whenever you do any network communication
  • 93. Pushing branches
      git push <remote> <branch> [:server_branch_name] git push origin my_local_branch:server_branch
  • 94. Deleting remote branches
      git push origin :branch_to_be_deleted It's like git push origin (nothing):branch_to_be_deleted
  • 95. Tracking branches
      Checking out a remote branch, will create a tracking branch. With tracking branches you can call
        git push git pull
      without remote or branches names When you clone a repo, a local branch “master” is created, which tracks origin/master
  • 96. Rebasing
  • 97. Basic rebasing vs merge
      This is what we already know git merge experiment
    taken from http://progit.org/
  • 98. Basic rebasing vs merge
      And this is rebasing git rebase master experiment or... git checkout experiment git rebase master
  • 99. Basic rebasing vs merge taken from http://progit.org/
  • 100. Basic rebasing vs merge
      It gets the diffs introduced by each commit of the branch you're on. It saves those diffs to temporary files It resets the current branch to the common ancestor with the branch you are rebasing onto It applies these changes and creates a new commit
  • 101. Basic rebasing vs merge
      Now, you can do a fast forward merge
    taken from http://progit.org/
  • 102. Rebasing onto other branches taken from http://progit.org/
  • 103. Rebasing onto other branches
      git rebase --onto master server client
    taken from http://progit.org/
  • 104. Rebasing onto other branches
      git checkout master git merge client
    taken from http://progit.org/
  • 105. Rebasing onto other branches
      git rebase master server
    taken from http://progit.org/
  • 106. Rebasing or not rebasing?
      Be very careful when rebasing commits published in a public repository... …you could be killed by other developers
  • 107. Rebasing or not rebasing? taken from http://progit.org/
  • 108. Rebasing or not rebasing?
      Fetch changes in remote repo
    taken from http://progit.org/
  • 109. Rebasing or not rebasing?
      Someone rebased changes (C4 – C6)
    taken from http://progit.org/
  • 110. Rebasing or not rebasing?
      C4 and C4' introduce the same changes
    taken from http://progit.org/
  • 111. DISTRIBUTED WORKFLOWS
  • 112. Centralized workflow (small teams) taken from http://progit.org/
  • 113. Integration manager workflow (github) taken from http://progit.org/
  • 114. Dictator Lieutenant Workflow (linux kernel) taken from http://progit.org/
  • 115. Tricks & Tips
  • 116. Stashing
      If you're working on some feature and suddenly you are forced to work on a hotfix, what do you do with changes in code you don't want to commit? The answer is Stash
  • 117. Stashing (i)
      git stash [save 'message'] saves changes
        Note: if you have untracked files, these won't be stashed
      git stash list
  • 118. Stashing (ii)
      git stash apply [stash_id] applies stash git stash drop [stash_id] deletes stash git stash pop [stash_id] applies + deletes git stash show [stash_id] -p|git apply -R unapplies (careful with new files) git stash [stash_id] branch branchname applies into new branch
  • 119. Rewriting history
      Changing the last commit
        git commit --ammend
      Changing history git rebase -i <parent_of_the_last_commit_you_want_to_edit>
        e.g git rebase -i HEAD~3 e.g git rebase my-tag~1
  • 120. Rewriting history: actions
      pick: use commit normally reword: use commit but edit commit message edit: use commit but stop for amending squash: use commit but meld into previous one fixup: like squash, but discard this commit's log message
  • 121. Cherry picking
      If you want to get one commit out of a branch git cherry-pick <sha-1_commit> (from the branch which you want the commit into) Be careful because it ends with two different commits which introuduces the same set of changes
  • 122. Getting file's content of a specific revision
      git show <treeish>:<filename> with this you get the content of that file
  • 123. Debugging with git: file anotation
      git blame [-L line1, line2] <file> you can see when each line of the method was edited and by whom
  • 124. Debugging with git: binary search
      git bisect start git bisect bad [commit_id] git bisect good [commit_id] git bisect reset
  • 125. References
      http://progit.org http://gitready.com git man pages
  • 126. !gracias!