Version Control

Version Control

Principles of Software Construction: Objects, Design, and Concurrency Version Control Jonathan Aldrich Charlie Garrod School of Based on slides by Christian Kästner Computer Science 15‐214 1 Administrivia • Extra office hours for HW6 and exam – See online schedule • Sample final exam –coming soon • Review session Wednesday 12/16 – 2‐4pm in DH 1112 • Final exam Thursday 12/17 – 8:30‐11:30 in MM 103 & MM A14 15‐214 2 Learning Goals • Understand the benefits and limitations of version control (history, parallel development, branching, etc) • Ability to cooperate on a code base using branching and merging; to resolve merge conflicts • Distinguish classes of version control systems (local, central, distributed) 15‐214 3 HISTORY 15‐214 4 History • Record relevant steps in the history of the project • Supports partial undo • Label cohesive development steps – Allows understanding changes – Explains rationale – Traceability to other development artifacts (bug trackers, CVEs, requirements, etc) • Record who performed changes • Implies a backup • Early local systems: SCCS and RCS • ‐> Version control systems useful even when used entirely locally 15‐214 5 Eclipse's Local History 15‐214 6 Revision History 15‐214 7 15‐214 8 Recording Rationale and Traceability 9 15‐214 9 Versioning entire projects 15‐214 10 Versioning and Tags • Version numbers for files individually vs. per project • Version numbers vs. hashes • Tags to name specific states 15‐214 11 While files to manage • All code and noncode files – Java code – Build scripts – Documentation • Exclude generated files (.class, …) • Most version control systems have a mechanism to exclude files (e.g., .gitignore) 15‐214 12 COLLABORATION 15‐214 13 Collaborating on Files • How to exchange files – Send changes by email – Manual synchronization at project meeting – All files on shared network directory • Permission models – Each file has an owner; only person allowed to change it – Everybody may change all files (collective ownership) 15‐214 14 Concurrent Modifications • Allowing concurrent modifications is challenging • Conflicts (accidental overwriting) may occur • Common strategies – Locking to change – Detecting conflicts (optimistic model) 15‐214 15 Change Conflicts 15‐214 source „Version Control with Subversion“ 16 Practical problems of Locking Files locking model? 15‐214 17 Locking Problems • How to lock? – Central system vs announcement on mailing list – Forgetting to unlock common • Unnecesary sequentializing – Cannot work on different concepts in same file • False sense of security – Changing dependant files can cause conflicts not prevented by locking 15‐214 18 Merging (1/2) 15‐214 19 Merging (2/2) 15‐214 20 Example 15‐214 21 Example 15‐214 22 Example Einführung in die 23 SoftwaretechnikSystem cannot decide order 15‐214 23 3‐way merge • File changed in two ways – Overlapping changes ‐> conflicts – Merge combines non‐conflicting changes from both • Merging not always automatic – diff tool to show changes – Manual resolution of conflicts during merge (potentially requires additional communication) • Automatic merge potentially dangerous ‐> syntactic notion of conflicts • Merging of binary files difficult • In practice: most merges are conflict free 15‐214 24 BRANCHING 15‐214 25 Branching • Parallel copies of the source tree • Can be changed independently, versioned separately, and merged later (or left separate) • Often used for exploratory changes or to isolate development activities • Many usage patterns, common: – Main branch for maintenance OR main development – New branches for experimental features; merge when successful – New branches for nontrivial maintenance work – Branches for maintenance of old versions 15‐214 26 Release management with branches 15‐214 27 Variants and Revisions • Revision replaces prior revision (temporal) • Variant coexists with other variants • Version describes both • Release: Published and named version V1.0V1.1 V2.0 V3.0 Base system (Windows) XXXX Linux variant XX Server variant XX Extension for customer A XXX Extension for customer B X 15‐214 28 Semantic Versioning for Releases • Given a version number MAJOR.MINOR.PATCH, increment the: – MAJOR version when you make incompatible API changes, – MINOR version when you add functionality in a backwards‐compatible manner, and – PATCH version when you make backwards‐compatible bug fixes. • Additional labels for pre‐release and build metadata are available as extensions to the MAJOR.MINOR.PATCH format. http://semver.org/ 15‐214 29 Variants and Revisions [Staples&Hill, APSEC’04] 15‐214 30 Managing variants • Branching for variants does not scale well • Requires special planning or tooling • Many solutions – Configuration files – Preprocessors – Build systems – DSLs – Software product lines – … 15‐214 31 CENTRALIZED VERSION CONTROL (E.G., SVN) 15‐214 32 Classes of version control systems • Systems supporting merging and/or locking • Local version control – Local history of files: SCCS (1970s), RCS (1982) • Central version control – Versions stored on central master server – Clients synchronize with server (update, commit) – CVS (1990), SVN (2004), Perforce, Visual SourceSafe • Distributed version control – Many repositories; synchronization among repositories (push, pull) – Git (2005), Mercurial, Bitkeeper, ClearCase 15‐214 33 Centralized Version Control Client (version 5, branch M) checkout/ Server update/ (all versions) commit Client access control (version 5, branch M) Client (revision 4, branch B) 15‐214 34 Typical work cycle • Once: Create local workspace – svn checkout • Update workspace: • Revert changes in workspace: – svn update – svn revert • Perform changes in workspace: • Update and merge conflicts: – svn add – svn update – svn delete – svn resolved – svn copy • Push workspace changes to – svn move server: • Show workspace changes: – svn commit – svn status – svn diff Taentzer 15‐214 35 CVS vs. SVN CVS SVN • Improvement over RCS in • Revision numbers for tracking entire directories project • Revision number per file • Atomic commits (commiting • Text files (binary files multiple files at once) possible) • Tracking files and directories • Support renaming • Tracking of Metadata 15‐214 36 DISTRIBUTED VERSION CONTROL (E.G., GIT) 15‐214 37 Git • Distributed version control • No central server necessary (but possible) • Local copies of repositories (containing all history) – Locally SVN like functionality: checkout, update, commit, branch, diff • Nonlinear development: each local copy can evolve independently • Synchronization among repositories (push/fetch/pull) • Fast local operations (branch, commit, diff, ...) 15‐214 38 Overview GH M3 clone, push, pull checkout / update M2 M1 commit 15‐214 39 Distributed Versions • Versions not globally coordinated/sorted • Unique IDs through hashes, relationships tracked in successor graph – e.g., 52a0ff44aba8599f43a5d821c421af316cb7305 – Possible to merge select changes (cherry picking) – Possible to rewrite the history as long as not shared remotely (git rebase etc) • Cloning creates copy of repository (including all versions) – Tracks latest state when cloned, relevant for updating and merging – Normal checkout and commit operations locally – Commits don't change original repository • Fetch and pull get missing versions from remote repository (one or more) • Push operations sends local changes to remote repository (one or more), given access rights 15‐214 40 Example workflow Kernel developer checkout / update clone / pull Linux commit edit push Linux pull & merge clone checkout Linux commit edit New developer 15‐214 41 Pull Requests Kernel developer checkout / update clone / pull Linux commit edit push Linux pull & merge clone checkout Linux commit edit New developer Pull request: Github feature to ask developer to pull a specific change (alternative to sending email); integration with Travis CI42 15‐214 42 Forks Kernel developer checkout / update clone / pull Linux push Linux (GH) (local) commit edit fork pull & merge Linux pull & merge fork clone checkout (GH) push Linux (local) commit edit New developer Fork: Github feature to clone repository on Github (own copy with full rights) 43 15‐214 43 Forks Kernel developer checkout / update clone / pull Linux push Caution:Linux (GH) Please to not fork(local) 214 repositories. commit edit fork pull & merge 214 Collaboration Policy: "Here are some examples of behavior that are inappropriate:Linux Making yourpull work & publiclymerge available in a way that other studentsfork (current orclone future) can access yourcheckout solutions, even if others’ access(GH) is accidental or incidental to your goals." push Linux (local) commit edit New developer Fork: Github feature to clone repository on Github (own copy with full rights) 44 15‐214 44 Repositories in mustache.js 15‐214 45 Git History 15‐214 46 Git and Central Repositories © Scott Chacon “Pro Git” 47 15‐214 47 Social Coding Awareness/ News Feeds 15‐214 48 Git Internals © Scott Chacon “Pro Git” 15‐214 49 Git Internals © Scott Chacon “Pro Git” 15‐214 50 Git Internals © Scott Chacon “Pro Git” 15‐214 51 Git Internals © Scott Chacon “Pro Git” 15‐214 52 Summary • Version control has many advantages – History, traceability, versioning – Collaborative and parallel development • Locking vs. merging and merge conflicts • Collaboration with branches • From local to central to distributed version control 15‐214 53.

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    53 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us