Introduction to Bazaar

2,228 views

Published on

Published in: Technology

Introduction to Bazaar

  1. 1. Introduction to Bazaar adaptive version control    
  2. 2. Who am I?  Tim Penhey  http://how­bazaar.blogspot.com  https://launchpad.net/~thumper  Currently employed by Canonical  http://canonical.com  Work on Launchpad integrating Bazaar  https://launchpad.net/launchpad­bazaar    
  3. 3. Version Control is Good ”Those who cannot learn from history are doomed to repeat it” ­­ George Santayana    
  4. 4. Because this sucks $ cp myfile.txt myfile.txt.20090120 $ ls myfile* myfile.txt.bak myfile.txt myfile.txt.20090120 myfile.txt.20081218    
  5. 5. Older Version Control Systems  SCCS  RCS  CVS  Subversion  SourceSafe (the less said about this the better)  Perforce    
  6. 6. Distributed is Better  Sometimes you cannot reach the central server  e.g. A laptop on the move  Should still be able to record changes in a  meaningful manner  A local history is available    
  7. 7. Which trunk is true?  If everyone has a local copy of the project,  who's copy is the ”true trunk”?  Projects that use distributed version control use  social convention    
  8. 8. Bazaar Concepts  Branches  Revisions  Repositories  Working Trees  Formats    
  9. 9. What is a branch?  A line of development  Common to use feature branches  this is where each feature is developed in its own  branch  Lives in a directory on the filesystem  all branches are addressable with a URI  web or filesystem addressable    
  10. 10. What is a revision?  A revision is a collection of modifications  e.g. an applied patch  e.g. updated foo.c and foo.h  Has a committer  The person who called `bzr commit`  May have a different author  Allows work to be attributed to someone else  Has a unique identifier (revision id)    
  11. 11. What is a branch?  A pointer to a tip revision  a revision has one parent for a simple commit  a revision has multiple parents for merges  A directed acyclic graph of revisions  and you though graph theory had no practical  applications    
  12. 12. What is a repository?  a set of revisions    
  13. 13. What is a working tree?  The actual source files that you look at and  interact with    
  14. 14. What is a format?  Each 'object' in Bazaar has a disk format  Formats allow for a smooth upgrade path  Developers knew that they weren't perfect and  planned for future improvements  `bzr upgrade` used to move to newer shiney  formats    
  15. 15. Simple Example $ cd my­project $ bzr init $ bzr add added hello.txt $ bzr commit Committed revision 1.    
  16. 16. Sharing your work  The push command pushes your work to a  different location  bzr push ~/public_html/my­project  Bazaar remembers this location so next time all  you need to do is:  bzr push    
  17. 17. Collaborating  Get someone else's work  bzr branch http://example.com/fooix/feature­x  Merge it in with your work  bzr merge ../feature­x  (you don't actually need to get it first, you can just  merge in the remote branch)  Commit – bzr doesn't auto commit  Enjoy distributed goodness    
  18. 18. Launchpad    
  19. 19. Launchpad  Bazaar hosting  Code reviews  Managing projects and teams  Bug tracking  Translations  Personal Package Archives (PPAs)    
  20. 20. Sharing with Launchpad  Register  Add an SSH key  Push up a branch related to a project:  bzr push lp:~user­name/project­name/branch­name  Push up a branch of unrelated stuff:  bzr push lp:~user­name/+junk/branch­name    
  21. 21. Projects in Launchpad  Projects can specify a main branch  bzr branch lp:project­name  Projects can have multiple series  bzr branch lp:bzr/1.10  bzr branch lp:bzr/1.11    
  22. 22. Bazaar Goodness    
  23. 23. bzr shelve  Works on uncommitted work by default  Can refer to historical changes   Puts changes on a shelf  (a directory out of the way)  Can either put all changes '­a' flag, or  interactively choose changes  unshelve brings the changes back    
  24. 24. Plug­ins  Extensibility through plug­ins  Can add new commands or modify existing  ones  bzr­svn – Interact with Subversion  bzr­email – Send emails of changes  bzrtools – Extra useful commands  Can even add new formats  bzr­loom – Work with a stack of lightweight  branches    
  25. 25. Loggerhead    
  26. 26. Familiarity  Commands that relate clearly to other VCSs  blame (annotate)  commit  log  update  status    
  27. 27. Sensible ignored files  By default   *.a, *.o, *.py[co], *.so, *.sw[nop], *~, .#*, [#]*#  More can be added easily  bzr ignore *.dll  Project specific ignores are stored in .bzrignore  Just because something is ignored, doesn't  mean it can't be added    
  28. 28. Aliases $ bzr alias bzr alias commit=”commit ­­strict” bzr alias ll=”log ­­line ­r ­10..­1 bzr alias unalias=”alias ­­remove”    
  29. 29. Well tested  Development follows test driven development  practices – and has done from the start  All new code needs test coverage  Over 10,000 tests  All tests are run on every attempted merge into  trunk    
  30. 30. Other misc bits  Clear API  Useful when writing plug­ins  Tool integration through XML interface  It just works  Doesn't get in the way    
  31. 31. Bazaar's Curse  Too adaptive?  Local repository or remote repository  Bound or unbound branches  Lightweight / heavyweight checkouts  Repositories with or without working trees    

×