34
CHARLES UNIVERSITY IN PRAGUE http://d3s.mff.cuni.cz faculty of mathematics and physics Version Control (Správa verzí) Pavel Parízek [email protected]

Version Control - pdfs.semanticscholar.org...Nástroje pro vývoj software Version Control 17 Create new branch in your repository Checkout the branch into a new working copy Make

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Version Control - pdfs.semanticscholar.org...Nástroje pro vývoj software Version Control 17 Create new branch in your repository Checkout the branch into a new working copy Make

CHARLES UNIVERSITY IN PRAGUE

http://d3s.mff.cuni.cz

faculty of mathematics and physics

Version Control (Správa verzí)

Pavel Parízek [email protected]

Page 2: Version Control - pdfs.semanticscholar.org...Nástroje pro vývoj software Version Control 17 Create new branch in your repository Checkout the branch into a new working copy Make

What is it good for ?

Nástroje pro vývoj software Version Control 2

Keeping history of system evolution

Tracking progress

Allowing concurrent work on the system

Teams of developers

Possible conflicts

Easy reverting to a previous version

Safer experimentation

Page 3: Version Control - pdfs.semanticscholar.org...Nástroje pro vývoj software Version Control 17 Create new branch in your repository Checkout the branch into a new working copy Make

Typical architecture

Nástroje pro vývoj software Version Control 3

Source code repository (versioned sources)

Working copy

synchronization

Working copy

Page 4: Version Control - pdfs.semanticscholar.org...Nástroje pro vývoj software Version Control 17 Create new branch in your repository Checkout the branch into a new working copy Make

Basic usage scenario

Nástroje pro vývoj software Version Control 4

Source code repository

Working copy

check-out or update 1.

2. modify & test

3. add & check-in

Page 5: Version Control - pdfs.semanticscholar.org...Nástroje pro vývoj software Version Control 17 Create new branch in your repository Checkout the branch into a new working copy Make

Centralized versioning systems

Nástroje pro vývoj software Version Control 5

CVS: Concurrent Versioning System

The “classic” system

SVN: Subversion

Currently used by many open-source projects

Page 6: Version Control - pdfs.semanticscholar.org...Nástroje pro vývoj software Version Control 17 Create new branch in your repository Checkout the branch into a new working copy Make

Subversion

Nástroje pro vývoj software Version Control 6

Page 7: Version Control - pdfs.semanticscholar.org...Nástroje pro vývoj software Version Control 17 Create new branch in your repository Checkout the branch into a new working copy Make

Important features

Nástroje pro vývoj software Version Control 7

Whole source tree versioned

Integer numbers (1,2,3,...)

Mixed versions in the working copy

Atomic commits

Versioning for files and directories

Operations: move, rename, delete

Support for binary files

Disconnected operations

Metadata in “.svn” directories

Page 8: Version Control - pdfs.semanticscholar.org...Nástroje pro vývoj software Version Control 17 Create new branch in your repository Checkout the branch into a new working copy Make

Locations

Nástroje pro vývoj software Version Control 8

Repository

Local directory (file://<absolute path>)

Remote server (svn+ssh://<network url>)

Working copy

Local directory on your computer

Always create separated local directories !!

Page 9: Version Control - pdfs.semanticscholar.org...Nástroje pro vývoj software Version Control 17 Create new branch in your repository Checkout the branch into a new working copy Make

Basic commands

Nástroje pro vývoj software Version Control 9

Help: svn help <command>

Create new repository: svnadmin create

Create new working copy: svn checkout

Update working copy: svn update

List modified and new files: svn status -v

Show differences between repository and working copy (two versions): svn diff –r<version>

Add new files into repository: svn add

Commit changes: svn commit –m “...”

Display information about file: svn info

Page 10: Version Control - pdfs.semanticscholar.org...Nástroje pro vývoj software Version Control 17 Create new branch in your repository Checkout the branch into a new working copy Make

Task 1

Nástroje pro vývoj software Version Control 10

Create repository in a local directory For example, in $HOME/svnrepo

In the working copy, Create directory (e.g., “main”) where you will put everything Create one file (10-20 lines) in that directory

Add the directory and file into the repository and commit Create another file and commit into the repository

Do not forget to write commit messages !!

Commands svn checkout, update, status [-v], diff, add, commit [-m], info

svnadmin create

Page 11: Version Control - pdfs.semanticscholar.org...Nástroje pro vývoj software Version Control 17 Create new branch in your repository Checkout the branch into a new working copy Make

Few more useful commands

Nástroje pro vývoj software Version Control 11

Undo changes in working copy: svn revert

See full history of a given file: svn log

Importing whole unversioned tree into repository: svn import <dir> <repo>

Exporting content of the repository without metadata: svn export

Page 12: Version Control - pdfs.semanticscholar.org...Nástroje pro vývoj software Version Control 17 Create new branch in your repository Checkout the branch into a new working copy Make

Task 2

Nástroje pro vývoj software Version Control 12

Make some changes in versioned files

Cancel them with svn revert

Use svn log to see full history of some file

Use svn diff -r<v1>:<v2> to see differences between two specific versions

Page 13: Version Control - pdfs.semanticscholar.org...Nástroje pro vývoj software Version Control 17 Create new branch in your repository Checkout the branch into a new working copy Make

Managing files and directories

Nástroje pro vývoj software Version Control 13

Commands svn add <path>

svn delete <path>

svn copy <path1> <path2>

svn move <path1> <path2>

svn mkdir <path>

Path In your local working copy

Repository (auto-commit)

Page 14: Version Control - pdfs.semanticscholar.org...Nástroje pro vývoj software Version Control 17 Create new branch in your repository Checkout the branch into a new working copy Make

Task 3

Nástroje pro vývoj software Version Control 14

Try some changes in your local working copy

add new directory, rename file, ...

Commit everything

Delete the new directory in the repository

Update your working copy

Page 15: Version Control - pdfs.semanticscholar.org...Nástroje pro vývoj software Version Control 17 Create new branch in your repository Checkout the branch into a new working copy Make

Branches and merging

Nástroje pro vývoj software Version Control 15

main development

concurrent development (experimenting)

branching merging

time & software versions

bug fix in released version

branching

NOW

Page 16: Version Control - pdfs.semanticscholar.org...Nástroje pro vývoj software Version Control 17 Create new branch in your repository Checkout the branch into a new working copy Make

Branching and merging – commands

Nástroje pro vývoj software Version Control 16

Create new branch svn copy <main line repo path> <branch repo path>

Print differences svn diff <main line repo path> <branch repo path>

Make your branch up-to-date (sync merge) svn merge <main line repo path>

svn merge ^/<main line repo dir>

Merge branch into the main line (trunk) svn merge --reintegrate ^/<branch repo dir>

Preview svn merge <repo path> --dry-run

Page 17: Version Control - pdfs.semanticscholar.org...Nástroje pro vývoj software Version Control 17 Create new branch in your repository Checkout the branch into a new working copy Make

Task 4

Nástroje pro vývoj software Version Control 17

Create new branch in your repository Checkout the branch into a new working copy Make some changes in the working copy for the branch, and commit immediately Make some changes to different files in the working copy for the main line, and commit immediately Print differences between the main line and branch Merge branch safely into the main line Commands

svn copy, svn merge <repo path>

svn merge --reintegrate

Page 18: Version Control - pdfs.semanticscholar.org...Nástroje pro vývoj software Version Control 17 Create new branch in your repository Checkout the branch into a new working copy Make

Undoing committed modifications

Nástroje pro vývoj software Version Control 18

Merge negative version range into local working copy svn merge <repo path> -r <v1>:<v2>

Note: v1 > v2

Commit everything

Page 19: Version Control - pdfs.semanticscholar.org...Nástroje pro vývoj software Version Control 17 Create new branch in your repository Checkout the branch into a new working copy Make

Cherrypicking

Nástroje pro vývoj software Version Control 19

Merge specific change into your branch svn merge -c <version> <repo path>

Commit your branch

Page 20: Version Control - pdfs.semanticscholar.org...Nástroje pro vývoj software Version Control 17 Create new branch in your repository Checkout the branch into a new working copy Make

Conflicts

Nástroje pro vývoj software Version Control 20

Options

Postpone resolving

Choose version

External merge tool

and many others

Conflict markers

<<<<<<< and >>>>>>> in source file

Three variants of the source file created

Page 21: Version Control - pdfs.semanticscholar.org...Nástroje pro vývoj software Version Control 17 Create new branch in your repository Checkout the branch into a new working copy Make

Task 5

Nástroje pro vývoj software Version Control 21

Checkout new working copy of the main line

Make conflicting changes to the same file in both working copies of the main line

Commit changes in the new working copy

Try updating the original working copy

It still contains uncommitted local changes

Explore different options to resolve conflicts

Page 22: Version Control - pdfs.semanticscholar.org...Nástroje pro vývoj software Version Control 17 Create new branch in your repository Checkout the branch into a new working copy Make

Tree conflicts

Nástroje pro vývoj software Version Control 22

Subversion 1.6+

Typical cause

Renamed files and directories

Deleted files

Solution

Make proper changes in the working copy

Use patches created with svn diff

Resolve and commit svn resolve --accept=working <path>

Page 23: Version Control - pdfs.semanticscholar.org...Nástroje pro vývoj software Version Control 17 Create new branch in your repository Checkout the branch into a new working copy Make

Task 6

Nástroje pro vývoj software Version Control 23

Rename some file in one working copy (WC1) of the main line, and commit

Change this file in the other working copy (WC2)

Update the working copy WC2

Tree conflict should occur now

Solve the tree conflict properly

Propagate changes to the file with a new name

Remove the old file in the working copy WC2

Command: svn resolve

Page 24: Version Control - pdfs.semanticscholar.org...Nástroje pro vývoj software Version Control 17 Create new branch in your repository Checkout the branch into a new working copy Make

Tags

Nástroje pro vývoj software Version Control 24

Snapshot with a human-friendly name

Logical copy of the whole source tree svn copy <repo path 1> <repo path 2>

Listing all tags (directory entries) svn list <repo path>

Page 25: Version Control - pdfs.semanticscholar.org...Nástroje pro vývoj software Version Control 17 Create new branch in your repository Checkout the branch into a new working copy Make

Standard repository layout

Nástroje pro vývoj software Version Control 25

/trunk /branches /tags

/project1/trunk /project1/branches/feature1 /project1/tags /project2/trunk /project2/branches /project2/tags/R_1_0 /project2/tags/R_1_2_1

Page 26: Version Control - pdfs.semanticscholar.org...Nástroje pro vývoj software Version Control 17 Create new branch in your repository Checkout the branch into a new working copy Make

Revision keywords

Nástroje pro vývoj software Version Control 26

HEAD Latest version in the repository

BASE Revision number in the working copy (before modifications)

COMMITTED The latest revision in which the item changed and was committed (not larger than BASE)

PREV Equal to COMMITTED-1

Page 27: Version Control - pdfs.semanticscholar.org...Nástroje pro vývoj software Version Control 17 Create new branch in your repository Checkout the branch into a new working copy Make

Best practices: synchronizing developers

Nástroje pro vývoj software Version Control 27

Software developed in large teams People may not be always able to coordinate efficiently

Solution: Copy-Modify-Merge Concurrent modification of source files Resolving conflicts when they happen

Alternative: Lock-Modify-Unlock The old classic approach (“before internet”) Does not scale well (exclusive access) Not very robust (people forget to unlock)

Page 28: Version Control - pdfs.semanticscholar.org...Nástroje pro vývoj software Version Control 17 Create new branch in your repository Checkout the branch into a new working copy Make

Best practices: branches and merging

Nástroje pro vývoj software Version Control 28

Use branches for experimental features

Create special branch for each feature

Separate release and development branches

Propagating bugfixes from development to stable

Merge often and synchronize with trunk

Lower chance of ugly conflicts occurring

Smaller conflicts are easier to resolve

Commit often others will have to merge

Page 29: Version Control - pdfs.semanticscholar.org...Nástroje pro vývoj software Version Control 17 Create new branch in your repository Checkout the branch into a new working copy Make

Properties

Nástroje pro vývoj software Version Control 29

Standard name-value pairs Many internal system properties

svn:ignore, svn:eol-style, ...

Setting property value

svn propset <name> <value> <path>

svn propset <name> -F <file> <path>

Other commands svn proplist

svn propget

svn propedit

Page 30: Version Control - pdfs.semanticscholar.org...Nástroje pro vývoj software Version Control 17 Create new branch in your repository Checkout the branch into a new working copy Make

Locks

Nástroje pro vývoj software Version Control 30

Still needed to work with binary files Merge not supported for concurrent modifications

Locking svn lock

Unlocking svn commit

svn unlock

Inspecting svn info

Page 31: Version Control - pdfs.semanticscholar.org...Nástroje pro vývoj software Version Control 17 Create new branch in your repository Checkout the branch into a new working copy Make

Repository access

Nástroje pro vývoj software Version Control 31

Local filesystem

UNIX permissions

Remote

SSH, HTTP

Page 32: Version Control - pdfs.semanticscholar.org...Nástroje pro vývoj software Version Control 17 Create new branch in your repository Checkout the branch into a new working copy Make

GUI clients for SVN

Nástroje pro vývoj software Version Control 32

Tortoise SVN (Windows)

http://www.tortoisesvn.net

Eclipse IDE

Other

kdesvn (Linux)

svnx (Mac OS)

Page 33: Version Control - pdfs.semanticscholar.org...Nástroje pro vývoj software Version Control 17 Create new branch in your repository Checkout the branch into a new working copy Make

Links

Nástroje pro vývoj software Version Control 33

http://subversion.apache.org

SVN Book

http://svnbook.red-bean.com

Page 34: Version Control - pdfs.semanticscholar.org...Nástroje pro vývoj software Version Control 17 Create new branch in your repository Checkout the branch into a new working copy Make

Homework

Nástroje pro vývoj software Version Control 34

Assignment

http://d3s.mff.cuni.cz/~parizek/teaching/sdt/

Deadline

18.10.2016 / 20.10.2016 / 21.10.2016