[ 0] tags branches
[ 1]
[ 2]
[ 3]---)[release, 4]-->[release, 5]
| [6]
| --------------[7]
[ 8] /
[ 9](-----
[10]--->[release2, 11]--> ...
[head]
|
[ 0]
[ 1]
[ 2]
[ 3]----)[longwork1, 4]
| [ 5]
[ 6] |
| [ 7]
[ 8](------/
[ 9]
[10]-----[longwork2, 11]
| [12]
| [13]
[14] /
[15](------
[head]
|
[ 0]
[ 1]---->[3rdcode, 2]
[ 5](-----[ 3]--->[3rdcode_update1, 4]
[ 6] |
[ 7] |
[10](-----[ 8]--->[3rdcode_update2, 9]
[11] |
[14](-----[12]--->[3rdcode_update3, 10]
[15]
[head]
|
Permanent development takes place on the main branch. At the time of version release the main branch is tagged, and a branch is created on the base of this tag. When bug fixing in release version takes place, it is performed on the "release" branch. Before issuing of a new release, fixes from the release branch are merged with the basic codes (to prevent repeating of the same errors). Then everything is repeated.
| Permanent development takes place on the main branch. When it is necessary to perform long work, a part of developers goes to the "longwork1" branch. There they make modifications, which are merged with the main branch afterwards. The essence of this work is that it is sometimes necessary to modify, for instance, the system kernel. Moreover, the modifications have no effect on functions etc. Modifications are just special internal changes increasing efficiency and so on. The modification can be extensive enough to require work of several developers, or for one developer it may be better to checkin his work step-by-step to the server in order to secure the source codes.
| This situation arises when you use ready source codes of other developers. The very first version of theirs is tagged '3rdcode'. Commonly it is necessary to adapt these codes some way: change titles, maybe add new functions etc. This work is performed on the main branch. Meanwhile the imported source codes can also be modified by their "owners". These modifications are added to the branch '3rdcode', and then are merged with the modifications on the main branch.
|