Version Control                                   with GitLuigi De RussisDipartimento di Automatica e InformaticaPolitecni...
How do you share and save data?   “I’m working solo… and I only have one    computer”                     What I need:   ...
How do you share and save data?   “I’m working solo… and I only have one    computer”                  What if…          ...
How do you share and save data?   “I’m working solo… and I have more than    one computer”                     What I nee...
How do you share and save data?   “I’m working solo… and I have more than    one computer”                   What if…    ...
How do you share and save data?   “I’m working in team”                      What I need:                      - backup; ...
How do you share and save data?   “I’m working in team”                     What if…                     - … a team membe...
Version Control Systems  Record changes to a file or a set of files over time so that you can  recall specific versions la...
Basic ConceptsRepository ◦ place where you store all your   work ◦ contains every version of your work that has   ever exi...
Basic ConceptsWorking copy ◦ a snapshot of the repository used   for… working ◦ the place where changes happens ◦ private,...
Basic ConceptsCommit ◦ the operation that   modifies the repository ◦ atomically performed by modern version   control too...
Basic ConceptsUpdate ◦ update the working copy   with respect to the   repository   apply changes from the repository   ...
Centralized Version Control one central repository client-server relationship                          Linguaggi e Ambie...
Distributed Version Control   clients and server have the full copy of the repository    ◦ local repositories clone a rem...
More Basic ConceptsPush ◦ copy changesets from a   local repository instance   to a remote one   synchronization between ...
More Basic ConceptsPull  ◦ copy changesets from a    remote repository    instance to a local one    synchronization betw...
Git   Distributed Version Control System   Born    ◦ on 2005 for the Linux kernel project    ◦ to be used via command li...
Projects using GitPerl                            18
Getting started with Git   Standard installations    ◦ http://git-scm.com/download   On Windows, you can also use Git   ...
Git by Example                       SOMEWHERE IN THE USA     MARCO, ITALY                             DAVE, ENGLANDMarco ...
Git by Example                            SOMEWHERE IN THE USA       MARCO, ITALY                                    DAVE,...
Git by Example                         SOMEWHERE IN THE USA     MARCO, ITALY                                  DAVE, ENGLAN...
Git by Example          git clone http://centralserver.com/myproject.git  creates a directory named myproject  initializ...
Git by Example                         SOMEWHERE IN THE USA       MARCO, ITALY                             DAVE, ENGLANDDa...
The Staging area                    STAGING AREA A sort of loading dock It can contain things that are neither in the  w...
The Staging area: an example                       STAGING AREA   Imagine to modify an existing file in the    working co...
The Staging area: an example                     ADD                            STAGING AREA   Before committing, the mod...
The Staging area: an example                          STAGING AREA   Then, changes can be “committed”    ◦ i.e., take the...
Git by Example                            SOMEWHERE IN THE USA      MARCO, ITALY                                    DAVE, ...
Git by Example              git commit -a -m “initial implementation”   store the current snapshot in the local repositor...
Git by Example                         SOMEWHERE IN THE USA     MARCO, ITALY                               DAVE, ENGLANDNo...
Git by Example                       git push origin master   Git pushes only to matching branches    ◦ for every branch ...
Git by Example                       SOMEWHERE IN THE USA     MARCO, ITALY                             DAVE, ENGLANDAfter ...
Pull and Fetch in GitFetch  ◦ copy changesets from a    remote repository                                      FETCH    in...
Git by Example                          SOMEWHERE IN THE USA      MARCO, ITALY                               DAVE, ENGLAND...
Git by Example                          SOMEWHERE IN THE USA      MARCO, ITALY                               DAVE, ENGLAND...
Git by Example At this point, Marco edits the source  code and saves To see the pending changes, he can use:    ◦ git st...
Git by Example                           SOMEWHERE IN THE USA     MARCO, ITALY                                    DAVE, EN...
Git by Example                             SOMEWHERE IN THE USA         MARCO, ITALY                                  DAVE...
Git by Example   What happens?    ◦ Git is not allowing Dave to push his change      because Marco has already pushed som...
Git by Example   Merge with conflicts     From http://centralserver.com/myproject       b19f36c..b77378f master -> origin...
Git by Example                       SOMEWHERE IN THE USA     MARCO, ITALY                             DAVE, ENGLANDAfter ...
Other useful commands   Operations on files    ◦   Remove: git rm [filename]    ◦   Move/rename: git mv [file-from] [file...
Tags and Branches in a nutshell Local and remote Do not push automatically             [Image from http://nvie.com/posts...
Tags and Branches in a nutshell   Tags    ◦ useful to mark release points    ◦ two types:      lightweight      annotat...
Tags and Branches in a nutshell   Branches    ◦ used to develop features isolated from each other    ◦ the master branch ...
Hosted Git To have (at least) one remote repository Alternative: to set up your Git server Most popular:    ◦ Github ht...
Github   Slightly different than other code-hosting    sites    ◦ instead of being primarily based on the      project, i...
Bitbucket Similar to Github Less famous than Github, right now Mercurial support A commercial company    ◦ free privat...
References   Git Reference    ◦ http://gitref.org/   Git - the simple guide    ◦ http://rogerdudler.github.com/git-guide...
References   Learn Git one commit at time    ◦ http://gitready.com/   The Git Parable    ◦ http://tom.preston-werner.com...
License This work is licensed under the Creative Commons  “Attribution-NonCommercial-ShareAlike Unported (CC BY-  NC-SA 3...
Upcoming SlideShare
Loading in …5
×

Version Control with Git

1,524 views

Published on

Introduction to version control with Git. Slides made for the Linguaggi e Ambienti Multimediali course at Politecnico di Torino, academic year 2011/2012.

Published in: Education, Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,524
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
38
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Version Control with Git

  1. 1. Version Control with GitLuigi De RussisDipartimento di Automatica e InformaticaPolitecnico di Torinoluigi.derussis@polito.it
  2. 2. How do you share and save data? “I’m working solo… and I only have one computer” What I need: - backup; - different saved versions; - early and frequently saving. What I can use: - external hard drives; - dedicated folder; - Dropbox folder; - … 2
  3. 3. How do you share and save data? “I’m working solo… and I only have one computer” What if… - … I forget to save a specific version and then I need it? - … I delete/loose a previous version? 3
  4. 4. How do you share and save data? “I’m working solo… and I have more than one computer” What I need: - backup; - different saved versions; - early and frequently saving; - conventions on file names. What I can use: - USB memory sticks; - external hard drives; - Dropbox folder; - shared folder; - … 4
  5. 5. How do you share and save data? “I’m working solo… and I have more than one computer” What if… - … I forget to save a specific version and then I need it? - … I delete/loose a previous version? - … I have different projects in the “shared” workspace? - … I forget to copy one version between computers? 5
  6. 6. How do you share and save data? “I’m working in team” What I need: - backup; - different saved versions; - early and frequently saving; - shared conventions on file names. What I can use: - USB memory sticks; - external hard drives; - Dropbox folder; - e-mails; - … 6
  7. 7. How do you share and save data? “I’m working in team” What if… - … a team member forgets to save a specific version and then someone else needs it? - … someone deletes/looses a version? - … someone forgets to share a specific version of the projects? Other issues: - who has the latest version? - who has the right to edit? - how to ensure that everyone sees up-to-date versions of everything? - how to handle conflicts? 7
  8. 8. Version Control Systems Record changes to a file or a set of files over time so that you can recall specific versions laterThree generations: 1. Local (RCS, SCCS) 2. Centralized (CVS, Subversion, Team Foundation Server) NOW 3. Distributed (Git, Mercurial) 8
  9. 9. Basic ConceptsRepository ◦ place where you store all your work ◦ contains every version of your work that has ever existed  files  directories layout  history ◦ can be shared by the whole team 9
  10. 10. Basic ConceptsWorking copy ◦ a snapshot of the repository used for… working ◦ the place where changes happens ◦ private, not shared by the team ◦ it also contains some metadata so that it can keep track of the state of things  has a file been modified?  is this file new?  has a file been deleted? 10
  11. 11. Basic ConceptsCommit ◦ the operation that modifies the repository ◦ atomically performed by modern version control tools  the integrity of the repository is assured ◦ it is typical to provide a log message (or comment) when you commit  to explain the changes you have made  the message becomes part of the history of the repository 11
  12. 12. Basic ConceptsUpdate ◦ update the working copy with respect to the repository  apply changes from the repository  merge such changes with the ones you have made to your working copy, if necessary 12
  13. 13. Centralized Version Control one central repository client-server relationship Linguaggi e Ambienti Multimediali A 13
  14. 14. Distributed Version Control clients and server have the full copy of the repository ◦ local repositories clone a remote repository possible to have more than one server Linguaggi e Ambienti Multimediali A 14
  15. 15. More Basic ConceptsPush ◦ copy changesets from a local repository instance to a remote one  synchronization between two repository instances 15
  16. 16. More Basic ConceptsPull ◦ copy changesets from a remote repository instance to a local one  synchronization between two repository instances 16
  17. 17. Git Distributed Version Control System Born ◦ on 2005 for the Linux kernel project ◦ to be used via command line Website: http://git-scm.com Highlights: ◦ free and open source ◦ strong support for non-linear development ◦ fully distributed ◦ efficient handling of large projects ◦ cryptographic authentication of history 17
  18. 18. Projects using GitPerl 18
  19. 19. Getting started with Git Standard installations ◦ http://git-scm.com/download On Windows, you can also use Git Extensions ◦ http://code.google.com/p/gitextensions/ For this course, Git is ◦ included in RailsInstaller ◦ integrated in Aptana Studio 3 19
  20. 20. Git by Example SOMEWHERE IN THE USA MARCO, ITALY DAVE, ENGLANDMarco and Dave work for the samecompany, but in two different countries.They have to realize a new softwareproject, so they decided to make it in Rubyand to use Git for version control. 20
  21. 21. Git by Example SOMEWHERE IN THE USA MARCO, ITALY DAVE, ENGLANDMarco starts the project by creating a new Gitrepository on the central server.He goes into the project directory and types: git init --bare myproject.gitto initialize an empty git repository for the project. 21
  22. 22. Git by Example SOMEWHERE IN THE USA MARCO, ITALY DAVE, ENGLANDWhen the central repository is ready, Daveclones it on his computer: git clone http://centralserver.com/myproject.git 22
  23. 23. Git by Example git clone http://centralserver.com/myproject.git creates a directory named myproject initializes a .git directory inside it pulls down all the data for that repository checks out a working copy of the latest versionIf you want to clone the repository into adirectory with another name, you can specifythat as: git clone http://centralserver.com/myproject.git projectOne 23
  24. 24. Git by Example SOMEWHERE IN THE USA MARCO, ITALY DAVE, ENGLANDDave writes some code in the myproject folder.Before committing, Dave needs to really put thecreated file under version control, by adding the fileto the Staging area: git add main.rb 24
  25. 25. The Staging area STAGING AREA A sort of loading dock It can contain things that are neither in the working copy nor in the repository instance Also called “index” 25
  26. 26. The Staging area: an example STAGING AREA Imagine to modify an existing file in the working copy The file is marked as “modified” 26
  27. 27. The Staging area: an example ADD STAGING AREA Before committing, the modified file needs to be “staged” ◦ i.e., add a snapshot of it in the staging area Modified data has been marked in its current version to go into the next commit snapshot 27
  28. 28. The Staging area: an example STAGING AREA Then, changes can be “committed” ◦ i.e., take the file from the staging area and store permanently the snapshot in the local repository 28
  29. 29. Git by Example SOMEWHERE IN THE USA MARCO, ITALY DAVE, ENGLANDAfter adding main.rb to the Staging area, Davecan commit the file to the local repository: git commit -a -m “initial implementation” 29
  30. 30. Git by Example git commit -a -m “initial implementation” store the current snapshot in the local repository -a ◦ also perform an add for modified files ◦ useless at this point -m “put a message here” ◦ perform the commit with a log message ◦ useful to know what you have committedIf Dave wants permanently to exclude from versioncontrol some files in the project folder, he can addthem in the .gitignore file 30
  31. 31. Git by Example SOMEWHERE IN THE USA MARCO, ITALY DAVE, ENGLANDNow Dave can push the data to the remoterepository: git push origin masterwhere origin is the remote name and master isthe branch name 31
  32. 32. Git by Example git push origin master Git pushes only to matching branches ◦ for every branch that exists on the local side, the remote side is updated if a branch of the same name already exists there ◦ you have to push the branch explicitly the first time Alternative command: ◦ git push --all After the first time, you can simply use: ◦ git push 32
  33. 33. Git by Example SOMEWHERE IN THE USA MARCO, ITALY DAVE, ENGLANDAfter cloning the remote repository, Marcocan pull the data: git pullNow Marco has the code! 33
  34. 34. Pull and Fetch in GitFetch ◦ copy changesets from a remote repository FETCH instance to a local one ◦ previously, we called it “pull”Pull ◦ perform fetch ◦ update the working copy 34
  35. 35. Git by Example SOMEWHERE IN THE USA MARCO, ITALY DAVE, ENGLANDMarco wants to check the log to see the details: git logThe result will be something like: commit bcb39bee268a92a6d2930cc8a27ec3402ebecf0d Author: Dave <dave@email.co.uk> Date: Wed Mar 28 10:06:13 2012 initial implementation 35
  36. 36. Git by Example SOMEWHERE IN THE USA MARCO, ITALY DAVE, ENGLANDMarco wants to check the log to see the details: git logThe result will be something like: commit bcb39bee268a92a6d2930cc8a27ec3402ebecf0d Author: Dave <dave@email.co.uk> SHA-1 hash for data integrity Date: Wed Mar 28 10:06:13 2012 initial implementation 36
  37. 37. Git by Example At this point, Marco edits the source code and saves To see the pending changes, he can use: ◦ git status To see the difference between his version and the previous one, he can use: ◦ git diff (--cached, to include staged files) Marco decides to commit and to push his work git commit -a -m “added new functionalites” 37
  38. 38. Git by Example SOMEWHERE IN THE USA MARCO, ITALY DAVE, ENGLANDMeanwhile, Dave has been found some bugsin the code. After fixing them, he commits: git commit -a -m “bug fixing” 38
  39. 39. Git by Example SOMEWHERE IN THE USA MARCO, ITALY DAVE, ENGLANDDave tries to push his changes git pushbut something goes wrong: To http://centralserver.com/myproject ! [rejected] master -> master (non-fast-forward) error: failed to push some refs to ‘http://centralserver.com/myproject’ 39
  40. 40. Git by Example What happens? ◦ Git is not allowing Dave to push his change because Marco has already pushed something to the master branch Solution: ◦ Dave has to do a pull, to bring in changes before pushing its modifications Two possible scenarios: ◦ merging of files goes smoothly; ◦ merging of files generates conflicts. 40
  41. 41. Git by Example Merge with conflicts From http://centralserver.com/myproject b19f36c..b77378f master -> origin/master Auto-merging main.rb CONFLICT (content): Merge conflict in main.rb Automatic merge failed; fix conflicts and then commit the result. Git includes both Marco’s code and Dave’s code with conflict markers to delimit things <<<<<<< HEAD # Marco’s code here ======= # Dave’s code here >>>>>>> b77378f6eb0af44468be36a085c3fe06a80e0322 41
  42. 42. Git by Example SOMEWHERE IN THE USA MARCO, ITALY DAVE, ENGLANDAfter (manually) resolving these conflicts,Dave can push the changes: git push 42
  43. 43. Other useful commands Operations on files ◦ Remove: git rm [filename] ◦ Move/rename: git mv [file-from] [file-to] ◦ Unstage some staged files: git reset HEAD [filename-list] ◦ Unmodify a modified file: git checkout -- [filename] Operations on remotes ◦ List: git remote (-v, to show the URLs) ◦ Add: git remote add [shortname] [url] ◦ Inspect: git remote show [remote-name] ◦ Rename: git remote rename [old-name] [new-name] ◦ Remove: git remote rm [remote-name] Change the last commit ◦ git commit --amend 43
  44. 44. Tags and Branches in a nutshell Local and remote Do not push automatically [Image from http://nvie.com/posts/a-successful-git-branching-model/] 44
  45. 45. Tags and Branches in a nutshell Tags ◦ useful to mark release points ◦ two types:  lightweight  annotated (more complete) ◦ commands:  git tag, shows the available existing tags  git tag [tag-name], creates a lightweight tag  git tag -a [tag-name] -m [message]‚ creates an annotated tag  tag show [tag-name], shows the tag data 45
  46. 46. Tags and Branches in a nutshell Branches ◦ used to develop features isolated from each other ◦ the master branch is the “default” branch when you create a repository ◦ you should use other branches for development and merge them back to the master branch upon completion ◦ really lightweight in Git ◦ commands:  git branch [branch-name], create a new branch  git branch, lists all existing branches  git checkout [branch-name], switches to the selected branch  git branch -d [branch-name], removes the selected branch 46
  47. 47. Hosted Git To have (at least) one remote repository Alternative: to set up your Git server Most popular: ◦ Github https://github.com/ ◦ Bitbucket https://bitbucket.org/ ◦ Sourceforge http://sourceforge.net/ ◦ (Microsoft) Codeplex http://www.codeplex.com/ ◦ Google Code http://code.google.com/ 47
  48. 48. Github Slightly different than other code-hosting sites ◦ instead of being primarily based on the project, it is user-centric ◦ social coding A commercial company ◦ charges for accounts that maintain private repository ◦ free account to host as many open source project as you want 48
  49. 49. Bitbucket Similar to Github Less famous than Github, right now Mercurial support A commercial company ◦ free private and public repositories for small team (up to 5 private collaborators) ◦ charges for project involving bigger team ◦ free for academia (also for students)  unlimited public and private repositories  unlimited users for single projects 49
  50. 50. References Git Reference ◦ http://gitref.org/ Git - the simple guide ◦ http://rogerdudler.github.com/git-guide/ Git User’s Manual ◦ http://schacon.github.com/git/user-manual.html Pro Git (online book) ◦ http://progit.org/book/ Git Magic (online book) ◦ http://www-cs-students.stanford.edu/~blynn/gitmagic Git Screencast ◦ http://gitcasts.com/ Version Control by Example (online book) ◦ http://www.ericsink.com/vcbe/ 50
  51. 51. References Learn Git one commit at time ◦ http://gitready.com/ The Git Parable ◦ http://tom.preston-werner.com/2009/05/19/the-git- parable.html Interactive Git Cheatsheet ◦ http://ndpsoftware.com/git-cheatsheet.html A successful Git branching model ◦ http://nvie.com/posts/a-successful-git-branching-model/ Some Git (graphical) clients ◦ http://guides.beanstalkapp.com/version- control/clients.html#git-clients EGit, Eclipse plugin for Git ◦ http://www.eclipse.org/egit/ 51
  52. 52. License This work is licensed under the Creative Commons “Attribution-NonCommercial-ShareAlike Unported (CC BY- NC-SA 3,0)” License. You are free: ◦ to Share - to copy, distribute and transmit the work ◦ to Remix - to adapt the work Under the following conditions: ◦ Attribution - You must attribute the work in the manner specified by the author or licensor (but not in any way that suggests that they endorse you or your use of the work). ◦ Noncommercial - You may not use this work for commercial purposes. ◦ Share Alike - If you alter, transform, or build upon this work, you may distribute the resulting work only under the same or similar license to this one. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/3.0/ 52

×