Monday, 17 July 2017

Apache Subversion - Principal concepts and her Architecture

Apache Subversion is an open source version control system. Founded in 2000 and Its development is still ongoing in fact the latest releases (1.8.18 and 1.9.6) were delivered in July (current year).

Principal concepts of Subversion

A best practice of Subversion expects to manage the source code using three main directories: trunk, branches and tags.
  • The "trunk" would be the main body of development, originating from the start of the project until the present.
  • The "branches" directory contains all branches. A branch will be a copy of code derived from a certain point in the trunk that is used for applying major changes to the code while preserving the integrity of the code in the trunk. If the major changes work according to plan, they are usually merged back into the trunk.
  • The "tags" directory, as branches, contains all tags. A tag will be a point in time on the trunk or a branch that you wish to preserve. The two main reasons for preservation would be that either this is a major release of the software, whether alpha, beta, RC or RTM, or this is the most stable point of the software before major revisions on the trunk were applied.

Branch and tag management

A branch or a tag can be created with svn copy command.  A tag is just a snapshot of a project in time. Create a new tag when a software is deliverd represent a best practice. Instead a branch can have one of the following purposes:
  • feature branch: This type of branch is usually created from the trunk or an other branch. The goal of the usage a feature branch is that to develop a new feature but at the risk of instability during the development, then the use of this branch is useful to maintain a stable trunk or branch where the feature branch was created.
  • maintenance branch: this type of branch is usally created from a tag so because the development of this branch starts from a stable point (best practice). The scope is the bug fixing or the development of a precise subset of features. 
A merge operation is to bring changes from a branch to another branch (or trunk). A feature branch is always merged in starting code line (branch or trunk). Instead about the maintenance branch, almost always it is merged on the trunk, the vice versa depends on the cases.
The following picture shows an example of what is described now:
Branch and Tag management

Subversion Architecture

The Subversion Architecture is modular in fact it is composed of more software modules. The pricipal modules are:
  • The CLI (command line client app) and UI Clients (as tortoisesvn) are the clients where an user (as a developer, devOps, etc...) interacts with Subversion system.
  • Client Library provides the interfaces used by clients.
  • Working Copy Management Library collects and manages all features about the interactions between local copies and central repository.
  • Repository Acces (RA): between Client Library and repository  are multiple routes through a RA layer, some of which go across computer networks and through network servers which then access the repository, others of which bypass the network altogether and access the repository directly.
  • Apache HTTP Server: It contains a plug-in module, used to make your repository available to others over a network.
  • svnserveA custom standalone server program, runnable as a daemon process or invokable by SSH; another way to make your repository available to others over a networ.
  • Subversion RepositoryBerkeley DB and FSFS are used to storage systems. 
The following diagram illustrates an overview of Subversion architecture.
Subversion's Architecture

External Links

  1. Apache Subversion - Official Page

No comments:

Post a Comment

Welcome

Hello everybody, Welcome in my blog called "Information technology archive". Obviously the topics will be related to Informatio...