Uploaded by yerezhepabdulla

FACULTY OF INFORMATION TECHNOLOGY (автовосстановление)

advertisement
FACULTY OF INFORMATION TECHNOLOGY:
Field of study: Information Technology
Specialty: Programming
Abdulla Yerezhep
Student Identification Number (SID) 59098
Analysis of affection of VCS to student’s educational and
professional life
Supervisor: dr. inż. Barbara Fryc
DIPLOMA THESIS AT FIRST-CYCLE STUDIES
Rzeszów 2021
I, the undersigned, hereby state that the thesis entitled “Utilization of video games in programming
learning for primary school children” submitted by me has been prepared without any help. I also state
that the thesis has not been subject to procedures connected with acquiring an academic (Bachelor’s)
degree at a higher education institution at any earlier time. I moreover declare that this version of the
thesis is identical with the submitted electronic version. ................................................................ date
author’s legible signature
2
Table of content:
INTRODUCTION
1. INTRODUCTION TO VERSION CONTROL SYSTEMS
1.1 VERSION CONTROL SYSTEM
1.2 CENTRALIZED VERSION CONTROL SYSTEMS
1.3 DISTRIBUTED VERSION CONTROL SYSTEMS
2. CENTRALIZED VS. DISTRIBUTED
2.1.1 THREE GENERATIONOF OF VCS
2.1.2 WHY ARE SOFTWARE PROJECTS MOVING FROM CVCS TO
DVCS?
3. SOURCE CODE MANAGEMENT SOFTWARES
3.1 SUBVERSION(SVN)
3.2 GIT
3.3 COMPARISON OF GIT AND SVN
3.4 GITHUB
3.4.1 GITHUB IN CLASSROOM ENVIRONMENT
3.4.2 IMPORTANCE OF GITHUB IN RECRUITING PROCESSES
4. PRACTICAL PART
4.1 METHODOLY
4.2 SURVEY
4.2.1 FINDINGS
4.2.2 INTERPRETATION
4.3 WEB – SITE DEVELOPMENT USING GIT AND GITHUB
4.3.1 STACK OF SOFTWARE USED
4.3.2 FUNCIONALITIES OF THE WEB-SITE
4.3.3 GITHUB INSIGHTS
5. CONCLUSION
6. REFERENCES
3
INTRODUCTION
I have decided to write the thesis work that I have titled "Version Control System Software" because, in
the past several decades, version control systems have played an important role in software developers'
work process during project creation and also in students an educational environment. In this research
paper, I will provide information on the fundamentals of version control systems, as well as the history
and features that have evolved over time. Currently, the process of developing large software products
is quite complex and time-consuming. The developers often face the problem of controlling the changes
made in the program code, since the development process is iterative. According to that, it becomes
necessary to store previous and stable versions of the project, available to programmers, and to perform
current work on the working version by using version control systems. As a consequence, the issue I
want to reflect on in my paper is extremely subjective and motivated by my own experience, although
have relevance to other students who are also studying in the specialty of IT technologies at the Faculty
of Programming, which translates the idea of significant need for additional background and context on
the source control software subject. My survey investigates this problem and collects valuable information from first, second, and third-cycle students studying in an information technology discipline, and
the majority of them report that they lack the proper knowledge regarding VCS and particularly Git and
GitHub, which itself is essential for learners in computer science to have and to be experienced in this
for the productive future development and further employment. Indeed by creating projects to your
GitHub and committing actively raises your chances to get a software developer job.
This tends to be a common problem for someone who is just starting to explore the amazing world of
computer sciences by learning and improving his/her software engineering skills; however, a number of
studies have shown that this problem can be solved by introducing and implementing VCSs into the
classroom from the very beginning of students' journey to become competent and effective software
developers.
Therefore, my thesis work will provide information on three generations of VCSs and important aspects
to pay attention when categorizing VCSs to centralized and distributed by describing both of them
closely. Next, I mention Subversion in my thesis being the most popular centralized VCS among open
source project community, although yet will cover only some basics of it. Although more detailed description will be on distributed version control systems and on its fundamentals following by Git that
occur favorite among other source code management tools, which I analyze by objective comparison of
four version control systems that are: Git; Subversion; Mercurial; CVS and evaluate main parameters of
version control software to have. Lastly, I would like to propose an important idea of implementing a
VCS to the classroom environment by the teacher and making it main tool for checking student’s homework and project assignments and code creation progress during lessons. By analyzing work of few other
researchers on that subject and outlining best practices.
To conclude VCS is an integral part of the daily professional practice of today's software development
team and even for individuals. Individual software developers who are regularly working in teams with
an effective version control system usually recognize the incredible benefits of version control, even
when working on small solo projects. Accustomed to the powerful advantages of version control systems, many developers have no idea how to work without them. It has become an essential, a whole
social media for programmers where one can collaborate with people through code and share as well as
publish services.
So, the main questions that’d been considered in this thesis work is what is version control system in
general? Why do you need such technology applied to your coding process? How to choose right software source control for your projects? How to raise student’s motivation to learn, experience in writing
code, and sense of belonging?
4
The main aim of the thesis
My bachelor's thesis' main goal is to provide insight and cover the fundamentals of version control systems (VCS). In my objective of the study I want to research chosen topic by examining and reviewing
scientific literature which are available on the internet for public use and are written by researchers on
related topics, in addition I have provided public survey among bachelor degree students from majoring
in information technology of University of Information Technology and Management(UITM) and furthermore I will attempt to evaluate and describe my own experience by creating a web-application using
approaches based on best practices of using VCS’s to introduce reader to one of the essential aspects of
software engineering that is version control system. As a case study I want to target Git the preferred
version control system of most developers all around the world and GitHub platform where developers
can store their projects and network with those who share their interests in more detail among other
version control systems like Subversion, Mercurial which also are described in following paper, but only
briefly. From my own experience of using Git and GitHub I realize how much easier it becomes to track
on code changes and prevent complications in the future which is why one of the main goals is to give
reader an understanding of how important is to have such tools in student classroom environment moreover in the future career life as a programmer.
First chapter is divided into three subchapters and were chosen to write to introduce VCS, it’s history,
why we need such systems, and show two main types of the system, that are Centralized and Distributed
version control system.
In second chapter I go in detail about differences of the system how it evolved throughout time, at the
end I have compared them with cons and pros of both systems. I also tried to answer for a question why
small and big projects most likely to choose DVCS rather than CVCS as time moves forward.
In third chapter we go further with comparison and choose two most popular software from both types
and describe them closely and compare these two software that we use to manage our source code, I
used different research papers to analyze credible data and build up my own opinion about which is at
the end of the day is more in demand. Additionally, I have done research about importance of GitHub
which is basically social media for programmers and also acts as a virtual vault where we can store our
source code and all kind of different projects, moreover I covered such an important topics as GitHub in
classroom environment and in recruiting processes.
And lastly my practical part consists of survey that was conducted by me and my findings, as well as
my own project that I have developed in order to track all the progress to observe my data that was
created by GitHub automatically, by analysis this information it efficiently helped me to see my issues
which will help me in my future projects.
5
CHAPTER 1. INTRODUCTION TO VERSION CONTROL SYSTEMS
1.1 VERSION CONTROL SYSTEM
“The Version Control System (VCS) is a tool for tracking the progress of a changing object. In other
words, a Version Control System (VCS) is a software system that tracks the evolution of an entity. To
put it another way, it's a system that keeps track of any improvements created by software developers”
[Zolkipli, Ngah and Deraman, 2018].1
Version control systems help development teams handle improvements to source code over time. It records any improvements made to the code in a special database. Developers will go back if a bug is
discovered and compare it with previous versions of the code to correct bugs and understand how to
effectively minimize the damage for everyone on the team.
By Eric Raymond’s opinion stated in his book “Understanding Version-Control Systems” says that:
“The most basic capability you get from a VCS is reversibility, the ability to back up to a saved, knowngood state when you discover that some modification you did was a mistake or a bad idea.”. Other two
important capabilities by his opinion are concurrency, and annotation.[Raymond, 2007]2
Source code is a treasure in nearly all software projects: it is a valuable resource that must be protected.
Source code is a repository of invaluable knowledge and understanding of the problem field for most
software development teams, which they have scrupulously collected and refined.
“If you don’t have source control, you’re going to stress out trying to get programmers to work together.
Programmers have no way to know what other people did. Mistakes can’t be rolled back easily. The
other neat thing about source control systems is that the source code itself is checked out on every programmer’s hard drive — I’ve never heard of a project using source control that lost a lot of code.”
[Spolsky, 2016]3
Version control protects against small and massive failures, made under accidental human element, and
unintended consequences. In the case of simultaneous work of several people on the same project, source
control systems keep track of conflicts that occur between users related to changing the same file. Most
systems can automatically merge changes made by different developers. However, such merging is possible only for text files and provided that different (non-overlapping) parts of this file have changed.
The above limitation is due to the fact that most version control systems are focused on supporting the
software development process, and the source codes of programs are stored in text files. If the automatic
merge fails, the system may prompt you to fix the problem manually.
Due to an unknown or too complex file format, there are times when merging is not possible in either
mode. Some version control systems provide the ability to lock a file in the vault. Locking it prevents
other users from obtaining a working copy or prevents modification of the working copy of the file.
To sum up let’s overview features that VCS provides according to Mike G. Miller.[Miller, 2015]4
Version control systems provide the following capabilities:
 The ability to take "snapshots" of your job on a daily basis at different points in time. It's best
if it's done right after changes have been made and experiments have been completed.
 To go back to a previous version, restore missing data, or figure out when a bug first appeared.
 To share your progress with others and keep you up to date with your work.
 To deal with conflicts involving other people's jobs.
1
Zolkipli N. N, Ngah A. and Deraman A.: Version Control System: A Review, Procedia Computer Science 135:408-415
2
Raymond E.: Understanding Version-Control Systems ( DRAFT ) Why use version control ? Categorizing Version-Control
Systems
3
Sapolsky J. :The Joel Test: 12 Steps to Better Code
https://www.joelonsoftware.com/2000/08/09/the-joel-test-12-steps-to-better-code/ of 09.08.2000
4
Miller M.: Professional Software Development
https://mixmastamyk.bitbucket.io/pro_soft_dev/index.html#professional-software-development of 31.03.2021
6

To work from different locations, such as work, home, or a mobile device, while keeping
copies in sync.
 Asset protection—remote backup of sensitive data.
Increased protection, which allows for more experimentation.
Traditional version control systems use a centralized model. The point is the presence of a unified
storage of documents controlled by a special server. Thus, it handles most of the version control functions. Distributed version control is more advanced, runs better, is less prone to bugs, has more functionality, and is a little more difficult to comprehend. Let’s have a closer look on both of these systems.
According to “Version Control Systems” by Stefan Otte journal article VCSs allow for the acceleration
and simplification of the software development process, as well as the creation of new workflows. They
have a model for concurrent access and keep track of files and their past. VCSs can be approached from
two perspectives:
1) the centralized model with the centralized Version Control Systems (CVCSs).
2) the distributed model with the distributed Version Control Systems (DVCSs).
[Otte, 2005]5.
1.2 CENTRALIZED VERSION CONTROL SYSTEM
In this section, I'll explain what a centralized control system is along with listing some of its operations
and distinguishing characteristics.
Fig. 1 Centralized Version Control System Diagram
Source: Somasundaram R. (2013). Centralized version control 10.04.2018
Centralized version control systems are built on the idea that there is a single "central" version of your
project somewhere on a server, and developers "commit" their changes to this main copy. [Lionetti,
2012]6. The server keeps an updated record of things, whereas users only keep a local version of such
shared files. The repository can be reached from anywhere via LAN or WAN. In centralized version
control a team of software developers work on just one repository through checkout, all developers make
some changes to the repository, and only the most recent version of the data is extracted from the server
and that’s why everyone are aware when someone else from the team made a change as well as when
someone made some wrong commit to the branch. There is certain level of restrictions in committing to
5
Otte S.: Version Control Systems Computer Systems and Telematics Institute of Computer Science
Freie Universit¨at Berlin, Germany 2005 pp 108-109.
6
Lionetti. G: What is version control: centralized vs. DVCS https://www.atlassian.com/blog/software-teams/version-controlcentralized-dvcs of 14.02.2012.
7
the project’s repository, changes to the data can only be made by trusted contributors, since centralized
version control refers to a single repository containing the accurate project version. A centralized version
control system is commonly used in both large commercial and small open source projects. Although
developing a project using CVCSs might be sometimes challenging, for example users would not be
able to merge their progress or just save the published updates if the central repository is unavailable,
and it will be lost if the central repository is damaged.
A centralized version control system can perform 18 basic operations. Let’s get familiar with some of
the most usefull operations and understand what kind of function they perform.
1. Create - A new repository is created using the create function. This is one of the first operations
that can be used, and it will be used far less often after that.
2. Checkout - When you need to create a new working copy for an existing repository, you use the
checkout operation.
3. Commit - Adds the updates from the working copy to the repository as a new changeset.
4. Update - Updates the working copy in relation to the archive. Update is similar to a mirror image
of commit. Both operations transfer changes from the operating copy to the repository. Commit
is used to move data from the working copy to the repository. The update is in the opposite
direction.
5. Status - Lists the modifications that have been made to the working copy.
6. Diff - Show the details of the modifications that have been made to the working copy.
7. Branch - Create another line of development.
8. Merge - Apply changes from one branch to another.
9. Resolve -Handle conflicts resulting from a merge.
10. Lock - Prevent other people from modifying a file.
CVS, Subversion, ClearCase, and Perforce are four of the most popular centralized version control systems you might have heard of.
1.3 DISTRIBUTED VERSION CONTROL SYSTEM
Distributed version control systems still have the functionality to store everything just in one central
repository, but has got involved and gives the opportunity to its each contributor to have their own copy
of the repository and the history of changes as shown in Figure 2. In fact, the term "distributed" comes
from the idea that there is no single point of contact with the work's past, allowing everyone to interact
with each other team member. No one else would be able to see a developer's project branch if he makes
one. Other developers need to know where they can get a copy of the project that the developer is actually
working on in order to see what's going on, they'll be able to combine his branch with their own, so they'll
be able to see the results. Another huge advantage for using DVCSs is that developers are able to contribute to the project repository in an offline mode. You can presume how relevant this function is in a
progressively mobile world with a rising number of remote contributors. Some of the most common
DVCSs might be: Git; Mercurial; Bazaar.
8
Fig. 2 Distributed Version Control System Diagram
Source: Chacon S & Strauv B (2013). Distributed version control system of 10.04.2018.
9
CHAPTER 2. CENTRALIZED VS. DECENTRALIZED
2.1 THREE GENERATION OF VCS
Here is the representation of the evolution of version control tools that can be split into three generations
by Eric Sink, 2011 in his book “Version Control by Example”. [Sink, 2011]7
Table 1. Three Generations of Version Control
Generation
Networking
Operations
Concurrency
Examples
First
None
One file at a time
Locks
RCS, SCCS
Centralized
Multi-file
Merge
before commit
Distributed
Changesets
Commit before
merge
CVS, SourceSafe,
Subversion, Team
Foundation Server
Bazaar,
Git,
Mercurial
Second
Third
Source: Version Control by EXAMPLE written by Sink in 2012
As you can notice on the Table 1 above the evolution of version control tools over the last five decades
has shown a steady trend toward more concurrency.
 Concurrent development was done exclusively with locks in first-generation tools. At any given
time, only one person can be working on a file.
 With one notable exception, the second-generation software is a lot stricter when it comes to
simultaneous modifications. Before they can commit, users must merge the new modifications
into their work.
 Merge and commit can be separated with third-generation tools.
First generation of VCSs were designed to monitor single file changes, and only tested files could be
modified locally by one person at a time. They were designed with the expectation that all users would
use their own accounts to log into the same shared Unix host.
In the second-generation networking was implemented to VCS, which resulted in centralized repositories containing the 'official' versions of their projects. This was a significant step forward because it
allowed several users to check out and work on the code at the same time while still contributing to the
same central repository. To make commits, you also needed to have network access.
The distributed VCS is the third generation. There is no centralized copy of the repository in a distributed
VCS, so all versions are created equal. This clears the way for commits, branches, and merges to be
generated locally and pushed to other repositories as required without requiring network access.
As mentioned above the latest VCSs are decentralized. That means that the project may have many
repositories, and these projects retain a sort of super-merge of repositories that attempt to reconcile their
history of change. Every developer has its own repository at its own limit, and the fusion of repositories
replaces check and commit operations for code transfer between developers. One feature benefit is that
systems such as this support the disconnected operation; since you have an own repository you don't
have to commit to the internet archive. Changes are slower and less popular in a different repository to
push.
Due to the increased interest in DVCSs over its predecessor CVCS, as well as the advantages that decentralized VCSs offered, a large number of software projects with closed and open source codes chose
to move from CVCS to DVCS at the time.
7
Sink. E.: Version Control by Example, Pyrenean Gold Press, Illinois 2011.
10
2.2 TENDENCY OF SOFTWARE PROJECTS TO MOVE FROM CVCS TO
DVCS
In research work “Version Control System: A Review,” conducted by Nazatul Nurlisa Zolkifli, Amir
Ngah*, you can observe in Table 2 to see differences between CVCS and DVCS.
Table 2. Comparison between CVCS and DVCS.and Aziz Deraman made a comparison, and the outline of their comparison
is shown in Table 2.
Version Control System
CVCS
DVCS
Repository
There is only one central repository which is the server.
Every user has a complete repository which is
called local repository on their local computer.
Repository Access
Every user who needs to access
the repository must be connected via network.
DVCS allows every user to work completely
offline. But user need a network to share their
repositories with other users.
Example of VCS Tools
Subversion, Perforce Revision
Control System
Git, Mercurial, Bazaar, BitKeeper
Projects that allow only several
users to contribute to the software development.
Team located in a single site.
DVCS is suitable for a single or more developers because the project repository is distributed to all the developers and this ability offer
a great improvement for the projects.
It also can be applied for a small or big software projects because it makes less difficult
for normal users to contribute to the development.
Team located in multiple site or different
countries and different timezones.
Software Characteristics
that suitable
Source: Nazatul Nurlisa Zolkifli et al. / Procedia Computer Science 135 (2018) 408–415
[Zolkipli, Ngah, Deraman, 2016]
Returning to the earlier statement, Brian de Alwis and Jonathan Sillito investigated the trend of software
projects to use DVCSs rather than CVCSs in “Why Are Software Projects Moving From Centralized to
Decentralized Version Control Systems?” in 2009. They have described the differences between a
CVCS and a DVCS in this paper, as well as described some of the rationales and perceived benefits
provided by projects to justify the transition.
They reviewed publicly accessible documentation and mailing list discussions for four open-source projects Perl, OpenOffice, NetBSD, and Python that have moved or are considering moving to a DVCS in
order to identify the rationales and perceived benefits provided by projects to justify such a transition.
They have initiated a qualitative study to address two research questions as part of a broader research
project to investigate version management methods and tool support. First, what advantages do these
projects see in a DVCS? Since migrating a source code repository to a new VCS takes considerable
effort, they assumed there must be compelling reasons to migrate. Second, in making the move, what
changes have these projects made to their development processes?
As a result, they identified four major anticipated benefits from transition:
 To support atomic changes. The most pressing requirement of a new VCS for the projects was repository-wide atomic commits. The NetBSD and OpenOffice groups have experienced repository
corruption as a result of using CVS branches, which may have gone undetected.
11

Simple automatic merging. DVCSs keep enough information to allow automatic and repeated
merges, which are common with long-lived branches.
 Improved support for experimental changes:
The Perl and OpenOffice projects aimed to improve non-committers' ability to work on experimental
improvements before applying them for inclusion.
 Support disconnected operation:
The Python project, in particular, sought to enable disconnected operation, a function useful for developers traveling.
Along with, survey of 820 developers provided by Caius Brindescu, Mihai Codoban, Sergii Shmarkatiuk, Danny Dig shows that 65% use DVCS and 35% use CVCS. They also examined 409M lines of
code changes from 358300 commits made by 5890 developers in 132 repositories containing a total of
73M LOC to gain more insight into how DVCS affects code changes.
The most remarkable results of their research study are:
 DVCS commits were smaller in size than CVCS
 Developers divide commitments in DVCS more often (group changes by purpose)
 Issue tracking labels are more likely to be mentioned in DVCS commits.
We may conclude that DVCS contain higher quality components than CVCS due to their smaller size,
consistent adjustments, and inclusion of issue tracking labels.[Brindescu, 2014]8
CHAPTER 3. SOURCE CODE MANAGEMENT SOFTWARES
3.1 SUBVERSION(SVN)
CVS was the preferred version control system until the 1990s. However, due to CVS's unwillingness to
include certain features in order to keep up with evolving trends, new CVS clones began to emerge:
CVSNT, EVS, Open CVS, and Subversion. Subversion grew in popularity and became the most widely
used version control system in the 2000s. Most CVS users started to migrate to Subversion in the early
to mid-2000s. [Ruparelia, 2010]9
I decided to include a Subversion overview in my thesis paper to demonstrate that, despite the popularity
supremacy of DVCSs, there is still a need for CVCSs, which are to these days widely used.
“Subversion is a free/open source version control system (VCS). That is, Subversion manages files and
directories, and the changes made to them, over time. This allows you to recover older versions of your
data, or examine the history of how your data changed. In this regard, many people think of a version
control system as a sort of “time machine.” [Collins-Sussman et al., 2004]10
As a centralized operated open source version control system, Subversion is well known and embraced
and features its stability as a safe place for useful data, simplicity of model and use and its capacity of
meeting the needs of a broad variety of users and projects from individuals to large companies.
Subversion was developed as a "better CVS" by CollabNet. Its features are best discussed with regard
to CVS enhancements, because they have decided to build an unlimited version control system that was
more suitable for the evolving trend in software projects. There are few things that SVN has improved
the most significant ones are directory versioning, true version history and atomic commits.
Directory versioning - Subversion uses a “virtual” versioned filesystem that records modifications to
entire directory trees over time, from the other side CVS just keeps track of the history of individual
files.
Brindescu C., Codoban M., Shmarkatiuk S., and Dig D.: “How Do Centralized and Distributed Version Control Systems
Impact Software Changes?,” Proceedings - International Conference on Software Engineering, no. CONFCODENUMBER
(2014): 322–33, https://doi.org/10.1145/2568225.2568322.
9
Ruparelia, Nayan B.. “The history of version control.” ACM SIGSOFT Software Engineering Notes 35 (2010): 5 - 9.
10
Collins-Sussman B., Fitzpatrick B., and Pilato C.: Version Control with Subversion, California 94305, USA 2004.
8
12
True version history - Subversion allows you to add, remove, copy, and rename files as well as directories. And each additional new file starts with a new, clean history of its own. Since CVS is restricted to
file versioning, operations such as copies and renames—which can occur with files but are actually
modifications to the contents of a containing directory—are not allowed.
And lastly atomic commits where a list of modifications is either entirely or partially inserted into the
repository. This enables developers to build and commit changes in logical chunks, avoiding issues that
can arise when only a portion of a collection of changes is successfully submitted to the repository.
To summarize, while SVN has exceeded CVS in terms of new useful capabilities, there are still many
reasons to avoid it. It's not a suitable tool for automation or Software development. And that it no longer
has a supporting community behind it. Because of this, migrating to the distributed version control system Git would be a safer option. In response to the question, "Does anyone still use Subversion?" the
answer we can see on Chart 1 and it’s yes, and about 23% of open source projects use Subversion while
72 percent are on Git.
Chart 1. Compare Repositories
Chart 1. Openhub.net. (n.d.). Open Hub, the open source network. http://www.openhub.net/.
3.2 GIT
To introduce you with Git I will be relying on the content described in a book “Pro Git” which provides
a reader full capability of it and describes key points that makes it different from other VCSs. Git is a
distributed version control system, free and open source, built to manage anything with speed and
productivity from small to large projects. It was created in 2005 by the author of Linux OS -Linus Torvalds.
One of the most significant of concepts in Git is snapshots, the idea behind it would be better described
as a reference of a taking a picture or screenshot of the files at the exact moment of the progress of your
work, so a repository's snapshot is equivalent to a video's screenshot. Which is basically an opposite to
the other VCSs way of functioning such as Subversion, CVS, Bazaar etc. that consider the data they
retain as a set of files, with recent changes to every file throughout time. Git considers the data to be a
series of snapshots. If a file hasn't modified, Git does not really save it once more; instead, it stores a
relation to the previous version of the file it has already saved. Almost every element of version control
that most other systems borrowed from the previous generation had been reconsidered by Git. [Chacon
& Straub, 2014]11.
11
Chacon S, Straub B. Pro git: Everything you need to know about Git. Second. Apress; 2014. https://git-scm.com/book/en/v2
13
Fig 3. Differences in storing data between Git and other VCSs. Source: Pro Git.
As shown in Figure 3 in comparing to previous VCSs Git tries to be as light and fast as possible, so it
doesn't just blindly copy the entire directory every time, but shrinks (whenever possible) a commit into
a changeset or "delta" between the current version and the previous one.
Other advantages of Git are local history backup, that is characteristic of almost any distributed version
control systems. This feature significantly speeds up project’s creation process, because developers do
not need to request a server for any data, simply because they are able to access it from a local disk. Git
uses cryptographic function checksumming SHA-1(Secure Hash Algorithm 1) to store everything in
database by the value of hash, not by regular file names, which allows Git know about every file being
changed or got corrupted.
Here are some basics of using Git. Only required and useful (in my opinion) parameters are listed here,
because listing all of them would be inappropriate. To do this, use git command -help or --help, where
command is the name of the command you want to get help about.
 Creating a repository
git init - Creates git repositories and a .git directory in the current directory.
git clone - Clones repositories named origin (or whatever you specify -o “name”) from the branch that
HEAD points to (or the one you specify -b “branch”). You can also clone only the HEAD branch you
need (or the one you specify in -b “branch”) by specifying --single-branch. By default, all tags are cloned,
but by specifying --no-tags you do not need to clone them. After executing the command, a. git directory
is created in the current directory
 File status
git status - This command can show you which branch you are currently on and the state of all files.
There are no required options, the only useful ones are -s, which will show a brief idea of the state of
the files.
14
Fig. 4 Life cycle of the files. Source: Pro Git.
As shown in Figure 5 files can be Untracked and Tracked. Tracked files can be in 3 states: Unmodified,
Modified, Staged.
When you add (via git add) a "untracked" file, it enters the "Staged" state.
If you make changes to a file when it is in the "Unmodified" state, it will be moved to the "Modified"
state. When you save a modified file (one that is in the "Modified" state), it enters the "Staged" state.
When you commit a file (which is in the "Staged" state), it is moved to the "Unmodified" state.
If the versions of the file in HEAD and the working directory differ, the file will be in the "Modified"
state; otherwise, the file will be in the "Unmodified" state.
If the version of the file in HEAD differs from the version in the working directory but not from the
version in the index, the file is in the "Prepared" state.
This cycle is interpreted as follows: Unmodified > Modified > Staged > Unmodified
First you update the file, save it in the index, commit it, and then do it all over again.
One more part of Git that I want to cover is branching.
 Commits
git commit – This command commits changes. git commit --amend - can quickly overwrite the last
commit
 Viewing history
git log – helps you to view the commit history of your repository.
 Working with a remote repository
git remote [options] - For working with external repositories
git remote add [options] “repository name” “URL address”- If you have cloned the repositories via the
http URL, then you already have a link to the external one. Otherwise, you can add it with this command.
git push - Sends all staged commits to the server.
 Branching
git branch “name” – creates new branch.
git merge – to unify(merge) two branches of git repository.
Finally, I would like to mark one of the important facts that a lot of students and people that are new to
programming might often misunderstand is the idea that Git and GitHub is totally different pieces of
software. Git - is as we mentioned at the beginning is the application that we download and connect to
our project that will control development by versioning each change made to the repository. GitHub, on
the other hand, is a website that acts as a vault for all open source projects to store in and records the
history of versions of your projects. In fact, the most popular version control system is Git, and the most
popular online code repository is GitHub. Git and GitHub are typically designed to communicate with
one another and are thus often used as a single framework for collaborating on a project.
15
3.3 COMPARISON OF GIT VS SUBVERSION
In this section we will compare two open source control software Git and Subversion (SVN), comparison
will be interpreted as a set of tables with technical capabilities of each VCSs as a result we will define
which of them is better according to its productivity and speed. Git was developed slightly later than
SVN and was based on a very specific project - Linux kernel development, which is carried out by a
very broad circle of developers spread across the globe. Git's architecture and implementation proved
promising to other software projects, and today, SVN and Git are likely the most common version control systems. The basic concepts of SVN and Git are quite different, and the decision about using SVN
or Git should be based on considering these differences. I will compare these two VCSs by conducting
a literature review from open source resources and creating a table of comparison.
Rating scale: Very bad; Bad; Good; Very Good; Excellent
Characteristics:
Git
Subversion
Speed
Excellent
Bad
Remote contributions(Mobility)
Excellent
Very Bad
Bad
Very Good
User Interface
Type of System
Functional capabilities (copy and transfer of the file/folders, tracking changes line by line)
Documentations
Very Good
Bad
Good
Bad
Good
Very Good
Excellent
Excellent
Good
Very Good
Command set
Excellent
Good
Popularity
Excellent
Good
Cross-platform (Windows, Linux, MacOS)
Ease of use
 Speed
According to tests performance of version control systems, Git is the fastest of them. Then comes Mercurial, followed by SVN and CVS. As well as in terms of work performance distributed version control
systems like Git simply doesn’t require to go over the network for everything.
 Mobility (remote contributions)
Git is certain winner in this because it allows user to copy a repository with all history changes to local
device and make commits from any place over the globe.
 User Interface
Subversion and Git both have command-line interfaces. In addition, web and standard graphical user
interfaces are both in high quality, either as part of the basic installation or as a separate package.
 Type of System
A distributed system, in my view, has many benefits over a centralized one. First, it does not necessitate
a continuous network connection. Second, in terms of data storage, it is more consistent and reliable. If
the data integrity on the server is violated in a centralized system, data will be lost, while in a distributed
system, users will save a local copy of the repository. Third, the ease of collaborating with several repositories in a distributed project. As a result, I give systems with this kind a higher rating.
 Functional capabilities
In functionality capabilities, I value support opportunities copying files and folders; transfer of files and
folders; tracking changes in the file line by line. SVN line by line monitors changes, and also allows you
to transfer files and folders. But, Git allows to do all three of the functions.
 Cross-platform
Cross-platform is a characteristic feature of all systems, so both gets the maximum score.
16
 Ease of use
In GIT, it's easier to switch from branch to branch, merge between them. But, one central repository in
SVN allows managers to take a more better approach to management, protection, approvals, mirrors,
and backups. Furthermore, many people believe that SVN is easier than using Git. It is, for example,
quicker to add a new functionality. It takes an extra step to add a new function to Git. Others claim that
the way SVN is configured results in greater trunk reliability, and that getting it on a centralized server
feels more managed and stable to others. In my opinion it’s more of matter of habit and depends on
which system have been used for your projects. For someone who is very new to VCSs I would recommend to use Git.
 Command set
Despite the fact that they all have decent command sets, Git goes above and beyond by providing a
rather feature rich command set.
 Documentations
I assessed the documentation from the perspective of a beginner, from perspective of someone who has
never used this system before. The simpler the approach of accessing the documentation is, and the more
understandable the language used, the better ratings the system receives. Git proved to be the friendliest
to the user. Links to documents can be found on their official websites' main pages. The report is written
in a simple and concise manner. SVN documentation is oriented toward specialists. It is difficult for
someone who lacks knowledge to comprehend them.
To conclude provided information we can observe from comparison that as a consequence, Git receives
the highest number of high points. This version control system comes highly recommended by me. However, if you have a compelling reason to use a centralized approach best decision would be to use SVN
among other CVCSs. When selecting and testing version control systems for your project, keep in mind
that the advantages of a specific solution are often subjective. Personal interests of the programmer, for
example, or factors such as performance, IDE plugin capabilities, and so on.
3.4 GITHUB
For a preset to a practical part of my thesis work, I want to provide my findings and analysis on couple
of researches that were examining GitHub as a learning management system (LMS) a collaborative and
peer to peer development tool, including instructor as a initiator and host of such classes. First, I will
give brief introduction on basic concepts of GitHub. Second, I explain why it’s the most popular open
source project hosting web-service? Along with, why do employers often ask to provide a GitHub account during the enrolling process for software engineer positions?
GitHub is open source a social media platform and management tool for your projects as well as source
code repositories that is created and designed for software developers. It helps you to communicate with
people all over the world, organize projects, and keep track of your progress.
It's completely free, and it's one of the most advanced hosting services available. Apart from personal
preference and technical specifications, there is one major reason why everyone uses GitHub, it's because of its huge number of contributors making it an excellent networking site.
You are able to host an open source projects, although many developers use GitHub to host private
repositories due to the platform's ease of use.
Now let’s get familiar with key concepts of GitHub:
 GitHub Issues
GitHub Issues is one of the most popular bug trackers in the world it provides repository owners with
the ability to organize, tag, and link issues to specific stages of development.
 Rating mechanisms (“Star” system)
To express your interest in a repository, it must be marked with a star. This can be done using the "Star"
button. This will allow you to keep track of interesting projects and find similar ones. It is also one of
the most important rating mechanisms, as the more stars a repository has, the more popular it is.
 Fork
17
Fork is a copy of the repository. This is the same as branch in Git that.
 Pull requests
A Pull Request is a request from your branch to the master branch of the original repository. As a result,
people who fund the project look at your Pull Request and makes code review. During the review process, certain items may need to be corrected, changed, or completed.
3.4.1 USING GITHUB IN CLASSROOM ENVIRONMENT.
I truly believe that the main aim of studying courses related to rapidly evolving information technologies
is to teach students not only the applicable knowledge, but also the skills of working with such technical
resources that are actively used in professional activities.
Students should feel that software development has gone beyond just a collection of source code for a
program. While working on specific assignments (for example, laboratory work or team projects). Especially, various additional tools like bug trackers, project management systems, version control systems
(VCS), and so on are used almost in every open or commercial projects in every software development
team. GitHub is a great example of one of these essential tools for programmers to be good at.
This subsection will consist of review of related literature and encapsulation of journal article, that investigates on using GitHub as an educational tool in the classroom from perspective of the students and
benefits they achieve:
“Using GitHub in the Classroom Predicts Student Learning Outcomes and Classroom Experiences:
Findings from a Survey of Students and Teachers”[Hsing, 2019]12.
First research paper is based on the idea that although GitHub is containing valuable information on how
using GitHub in the classroom affects students learning experience. Researchers studied at how students
in GitHub classrooms compared from students in non-GitHub classrooms along key factors. To make
progress in this matter, 7530 students, 300 instructors GitHub and non-GitHub classrooms were surveyed. Research questions were: “Does using (versus not using) GitHub in the classroom predict students’ learning outcomes?”; “Does using (versus not using) GitHub in the classroom predict students’
feelings of preparation for the future? Research”; “How is the implementation of GitHub in the classroom associated with students’ classroom experiences? “How does the design of implementation predict
outcomes related to classroom learning?”. As an outcome they found that only 37.2% of the students
had experience using GitHub in the classroom, and 62.8% hadn’t. Here are some main findings that were
in line with researches expectations:
 Students who used GitHub in the classroom reported they learnt more about effective teamwork
and collaboration than students who did not.
 Students who used GitHub in the classroom reported they learnt more about popular industry
tool(s) than students who did not.
 Students who used GitHub in the classroom reported they learnt more about project management
than those who did not.
And two findings that I want to emphasize are:
Students who used GitHub in the classroom felt better prepared for a future internship or job and felt
a greater sense of belonging in the classroom than those who did not.
3.4.2 IMPORTANCE OF GITHUB IN RECRUITING PROCESSES
I couldn't overlook and not note the observation from my personal experience that often recruiters who
have considered me as a prospective employer in software developer positions asked for GitHub account
URL. I find out that is a very common tendency for almost everyone I know who tried to employ in such
job positions.
A software developer's GitHub account is the clearest reflection of his or her abilities. You can demonstrate your technology stack, how well-organized your code is, and your ability to collaborate with other
programmers. Recruiters will also look at how regularly you contribute to your projects. Outstanding
Hsing C., and Gennarelli V., “Using GitHub in the Classroom Predicts Student Learning Outcomes and Classroom
Experiences,” Proceedings of the 50th ACM Technical Symposium on Computer Science Education - SIGCSE ’19, 2019,
672–78, http://dl.acm.org/citation.cfm?doid=3287324.3287460.
12
18
professionally made GitHub account can make recruiters to approach you and propose a job position.
[Hall, 2020]13.
CHAPTER 4. PRACTICAL PART
4.1 METHODOLGY
In order to determine how experienced are students in such an important collaboration software tool
such as GitHub depending on their year of studies and how beneficial it can be to excel in understanding
of version control in career life of the future developers, I have created an online research survey. The
purpose of this research is to find answers to the following research questions, by using descriptive
research methods: How students familiar with GitHub, Does they have sufficient experience using it as
LMS in the classroom?, Do they use GitHub for solo and team projects?, Were they asked to provide
recruiter with GitHub account when applying to software development job position?, and lastly, Do they
have challenges if any using Git and GitHub. I provided students of 1st, 2nd, and 3rd cycle students from
University of Information Technology and Management. The candidates are currently studying Information Technology specialty with the survey during 2nd academic term in 2021. In addition to survey, I
have created a web-application using Git to track over changes throughout development and GitHub as
a source code vault, to make my own research on case study using best practices of using version control
systems to have an experience and opinion about such SCM systems in practice.
4.2 SURVEY
I have conducted survey where 36 students answered 11 questions about GitHub web-hosting platform
experience which is always used with Git. Questionnaire was sent to undergraduate students in 1st, 2nd
and 3rd cycle of studies in IT field. While structuring my survey I wanted to focus on two important
concerns first is how experience are students in using GitHub by attending in programming classes and
second How efficiently they use GitHub for software development outside of the classes.
FINDINGS
I have pasted the results of the survey by presenting them in charts. By separating them in three different parts:
 Demographics of the survey.
 Experience in using GitHub.
 Usage of the GitHub in future career.
1. Demographics of the survey.
First part of the survey is covering demographics of the participant in order to understand, if person
is a good fit for the survey and to differentiate data for better analysis.
13
Jonathan H.: "Using Github To Land A Job - Orange Quarter", Orange Quarter, 2021 <https://orange-quarter.com/usinggithub-to-land-a-job/>
19
Fig. 5 Survey statistics. Participation of particular gender groups of respondents in the survey. Source: Own study.
More than a half of participant(61.1%) are male.16.7% are female and 22.2% prefer did not to tell.
Fig. 6 Survey statistics. Participation of particular year of study groups of respondents in the survey. Source: Own study.
Surveyed participants are almost equally divided into three part 3rd year cycle(38.9%), 1st year cycle(36.1%), and 2nd cycle(25%).
Fig. 7 Survey statistics. Participation of particular faculty groups of respondents in the survey. Source: Own study.
20
Majority of them are studying in Programming faculty(80.6%). And very low percentage of people study
Graphical Design(11.1%). The rest is Networking(8.3%).
Fig. 8 Survey statistics. Participation of particular student groups that are experienced in different programming language
of respondents in the survey. Source: Own study
Very surprisingly all participants are similar with programming languages 30.6% claim that they are
competent in 3 programming languages, other 30.6% know at least 1, and 25% have knowledge in minimum 2. And very low percentage have experienced in 4 or 5 programming languages.
2. Experience in using GitHub.
Second part of the my survey is dedicated to detect how much of the participant actually know and
used GitHub in class environment and to understand whether person have GitHub accounts, last
questions answer how experienced is participants.
Fig. 9 Survey statistics. Participation of particular student groups that had or hadn’t experience using GitHub of respondents in the survey. Source: Own study.
Interestingly almost half of the surveyed ones did had experience in using GitHub as a Collaboration
and learning tool in the class environment, and almost another hadn’t.
21
Fig. 10 Survey statistics. Participation of particular groups of students that had or hadn’t a GitHub account respondents in
the survey. Source: Own study
As expected majority(72.2%) of participant already posses GitHub account signed up and the rest still
don’t have it yet.
Fig. 11 Survey statistics. Familiarity level of particular groups of students with GitHub respondents in the survey. Source:
Own study
16.7% claim that they are very familiar and experienced, 36.1% familiar, but not experienced, 25% are
somewhat familiar, butn never used before, and 22.2% are not familiar with GitHub at all.
3. Usage of the GitHub in IT career
22
Fig. 12 Survey statistics. The experience of particular groups of students applying to IT job position respondents in the survey. Source: Own study
38.9% have been asked for a GitHub link to an account when applying to IT related job, 30.6% haven’t
got asked or haven’t yet applied for a job, and 30.6% have never applied for an IT job position.
Fig. 13 Survey statistics. The approach of particular groups of students when using GitHub respondents in the survey.
Source: Own study
We can make a conclusion by viewing charts and outline several very important statements.
1. Majority of participants 81% were students studying in Programming course in 2 and 3 year
cycles and are experienced in several programming languages.
2. 72% of surveyed students report that they have GitHub accounts, although only 17% can be
confident in using it. 25% report of somewhat experience in using it and 22% have no experience
at all.
3. 50% percent of the students have been using GitHub as a collaboration and learning tool within
a classes. Despite of the effectiveness of such method 50% have never experienced such way of
being taught or replied with open answer: “yes and only by one teacher from the whole course”,
“Yes, but not deeply”.
4. Majority of applicants 39% have been asked to share their GitHub account and only 31% have
never applied to any IT related job.
5. Very low percentage of applicants have used GitHub in developing project within a team only
2%.
23
INTERPRETATION
The outcomes show us clearly that not only students are not experienced in using one of the most important and widely used tools for collaborative development of software, but also not enough attention
was put to teach students of such methods. Of course, survey was held anonymously and not all of the
students studying in IT department in 1st 2nd 3rd year cycle took part on taking it, but even with data that
we have, in my own opinion adding Git and GitHub in the class environments of the students, using it
as a collaborative tool for closing projects and finishing assignments in teams might be a big plus for
them in the future IT career escalation. In my own experience every job position that I was applying
having GitHub account was required and not only essence of it but also important was to have few or at
least couple of self-done pet-projects. And to store and develop such projects you would need to have
certain skills in using Git and GitHub.
4.3 WEB – SITE DEVELOPMENT USING GIT AND GITHUB
My next step in practical part of my diploma thesis is to demonstrate my own analysis of source code
development process and show that development with such tools is very easy and can give a lot of useful
data to analyze the process of software development in order to increase efficiency in future projects. I
have developed a web application using Git to track the changes over the time of the development and
GitHub to store all my files and access them from every device or place wherever I want, which made
the process extremely convenient.
You can observe source code in my GitHub repository that are publicly available: GitHub Repository
https://github.com/AbdullaYerezhep/Sociate
First let me give about the project:
The goal of the projects is to create a dating web application “Sociate”, that helps people to find prospective date partners with the ability to like and chat with people.
Functional objectives
1. Users are able to create an account by registering and login into the website.
2. Users are able to edit profiles by adding information about descriptions, interests, preferences,
country, and city of residence.
3. Users are able to upload and delete account photos and see photos of users on their profile accounts, and also assign particular photo as main to be shown as an avatar of a user.
4. Users can search using a sorting filter by age.
5. Users can like profiles that seemed interested to them and in the case of mutual sympathy system
shows matched profiles
6. The system tracks the information of users' online presence and shows it on the profile page.
7. The system has a simple navigation bar to guide users around.
8. Users can chat with each other privately by creating and deleting messages.
9. The system informs a user about the possible loss of data when refreshing or leaving web pages.
10. The system has admin, moderator, and member roles.
Non-Functional Objectives
1. Performance and scalability. The system should be able to support 100+ simultaneous users. The
mean time to view a web page over a 56Kbps modem connection shall not exceed 2 seconds. Downtime after a failure shall not exceed 1 hour.
2. Reliability, availability, maintainability. The system shall be completely operational at least 80% of
the time.
24
3. Security. The system shall provide password-protected access to web pages that are to be viewed
only by employees.
4. Usability The number of web pages navigated to access data information from the top page should
not exceed 2.
Stack of technologies
For building an API I chose an Asp.Net Core Framework and for the client side I used an Angular 10
and for the database, I have used an Entity Framework Core SQLite database provider to handle all
database operation because of its ease of use and ability to make migration and create tables with data
without manually typing it, although it is for a local database and also I have a cloud database storage to
store all photos of users there, for more efficient performance. As for programming languages, they are
C#, JavaScript, Typescript, and classic markup languages HTML5 and CSS3.
This is a login page of my application where you need to provide the system with the username and
password credential and it requests API and uses JSON Web Token (JWT).
Fig. 14 Web-site screenshots. The login page. Source: Own study
Register form has blanks to full like Username, KnownAs, DateOfBirth(18+), Country and
City, Password, and Password confirmation.
25
Fig. 15 Web-site screenshots. The registration page. Source: Own study
This is a List of matches where you can see is a person online at this moment.
Fig. 16 Web-site screenshots. The matches page. Source: Own study
The list of liked persons is separated on another page.
26
Fig. 17 Web-site screenshots. The liked members page. Source: Own study
On the profile page, you can edit and change user information, the system will notify the user if added
info is saved.
Fig. 18 Web-site screenshots. The account edit page. Source: Own study
User can upload photos to his profile.
27
Fig. 19 Web-site screenshots. The photo upload page. Source: Own study
Fig. 20 Web-site screenshots. The uploaded photo page. Source: Own study
There is also the possibility to message users.
28
Fig. 21 Web-site screenshots. The matches page. Source: Own study
which is held online,
Fig. 22 Web-site screenshots. The messaging page. Source: Own study
and the user you are messaging gets a notification about it.
29
Fig. 23 Web-site screenshots. The notification about receiving message. Source: Own study
Database structure
Here is a database relation diagram of the web application. It's is shown that all the relations are built
around Users entity in the diagram.
\
Fig. 24 Web-site screenshots. The database structure logic. Source: Own study
30
To build such system I have used GIT and GitHub as source code management tools, that made my
software development much organized less unsafe to loose the progress and make mistakes throughout
the development and of course much more mobile as I could access my source code from anywhere in
the world just by having an internet connection.
GitHub Insights is a native app that generates analytic reports based on data from your GitHub Enterprise
Server instance to assist you in better understanding and improving your software delivery process. It is
a machine-based tool that connects to GitHub Enterprise. GitHub Insights provides a great track of the
development process and creates useful graphs in order to show developer the amount of progress and
the time was spent in order to create a project, how many branches and pull requests were used that can
help analyze previous work and improve future planning of the project development. In my projects I
haven’t used pull request but they are very useful in team development pull requests enables contributors
to easily notify you of modifications they've made to a repository, with access restricted to the contributors you specify. Acceptable adjustments can be easily merged.
In bigger project that need continuous delivery and continuous integration there is also solution - GitHub
Actions. With world-class CI/CD, GitHub Actions makes it simple to automate all your development
activities. Right from GitHub, you can write, test, and release your code. Make code reviews, branch
management, and issue triaging go as smoothly as possible.
In these graphs we can see my total commits number and amount of commits each day. The progress
itself is stretched out in timeline, from the start to finish of creating process of the application in a graph.
We can see that majority of the progress was done in first part of the timeline, meaning in the beginning
of the work that can be explained by the enthusiasm at the very start and straight after that drop down in
progress as I have started to face a lot of hard tines building my project, because of my lack of experience
creating relatively medium projects. But by observing these statistics I have gained valuable knowledge
and in my future projects I will plan out and distribute the work across time more or less equally to
maintain balanced development process that will cause more stable development behavior. I am thinking
of trying new features of GitHub like GitHub Issues and Product Roadmap
GitHub
31
Fig. 25 Insight statistics. The total commits number and amount of commits each day statistics. Source: Own study
Fig. 26 Insight statistics. The total commits number and amount of commits each day statistics. Source: Own study
In Network graph we can see that I have used two main branches one for the development and another
one that us above is the main branch. I have followed best practices advices and split out my development
path into two branches one for consistent development and another to save already safe and checked
commits. But projects is always improving entity and it always has space to grow to, it could be some
small bug fixes or new big features update, however in the future it’s better be done by creating additional branches for each such additional work needed to be done, as it an opportunity for you and your
team members to work specifically on some certain development path and not interfere with other ones.
32
Fig. 27 Insight statistics. The total amount of branches used while development. Source: Own study
References
1.
Zolkifli, N. N., Ngah, A. & Deraman, A. Version Control System: A Review. Procedia Comput.
Sci. 135, 408–415 (2018).
2.
Zagalsky, A., Feliciano, J., Storey, M. A., Zhao, Y. & Wang, W. The emergence of GitHub as a
collaborative platform for education. CSCW 2015 - Proc. 2015 ACM Int. Conf. Comput. Coop.
Work Soc. Comput. 1906–1917 (2015) doi:10.1145/2675133.2675284.
3.
Vuorre, M. & Curley, J. P. Curating Research Assets : A Tutorial on the Git Version Control
System. Adv. Methods Pract. Psychol. Sci. 1, (2018).
4.
Spinellis, D. Version control systems. IEEE Softw. 22, 108–109 (2005).
5.
Spandel, D., Kjellgren, J. & Johansson, C. Choosing between Git and Subversion. (2014).
6.
Sink, E. Version Control by Example. (2012).
7.
Raymond, E. Understanding Version-Control Systems ( DRAFT ) Why use version control ?
Categorizing Version-Control Systems. 1–54 (2007).
8.
Nguyen, H. Le & Ignat, C. L. An Analysis of Merge Conflicts and Resolutions in Git-Based
Open Source Projects. Comput. Support. Coop. Work CSCW An Int. J. 27, (2018).
9.
Nathan, S. Tools of the trade. Engineer 1-NOVEMBER, 108–109 (2010).
10.
Mulu, K., Bird, C., Nagappan, N. & Czerwonka, J. Transition from centralized to decentralized
version control systems: A case study on reasons, barriers, and outcomes. Proc. - Int. Conf.
Softw. Eng. 334–344 (2014) doi:10.1145/2568225.2568284.
11.
Malmsten, C. F. Evolution of Version Control Systems. Comparing CENTRALIZED against
DISTRIBUTED Version Control models (2010).
12.
Koc, A. A Survey of Version Control Systems.
33
13.
Hsing, C. & Gennarelli, V. Using GitHub in the Classroom Predicts Student Learning Outcomes
and Classroom Experiences. Proc. 50th ACM Tech. Symp. Comput. Sci. Educ. - SIGCSE ’19
672–678 (2019).
14.
Gunnarsson, S. ;, Larsson, P. ;, Månsson, S. ;, Mårtensson, E. ; & Sönnerup, J. Enhancing Student Engagement Using GitHub as an Educational Tool. Genombrottet, Lunds tekniska högskola. (2017).
15.
Guerrero-Higueras, ángel M. et al. Academic success assessment through version control systems. Appl. Sci. 10, (2020).
16.
Gousios, G., Vasilescu, B., Serebrenik, A. & Zaidman, A. Lean ghtorrent: GitHub data on demand. 11th Work. Conf. Min. Softw. Repos. MSR 2014 - Proc. 384–387 (2014)
doi:10.1145/2597073.2597126.
17.
Glazunova, O. G., Parhomenko, O. V, Korolchuk, V. I. & Voloshyna, T. V. The effectiveness of
GitHub cloud services for implementing a programming training project: students’ point of
view. J. Phys. Conf. Ser. 1840, 012030 (2021).
18.
Feliciano, J., Storey, M. A. & Zagalsky, A. Student experiences using GitHub in software engineering courses: A case study. Proc. - Int. Conf. Softw. Eng. 422–431 (2016)
doi:10.1145/2889160.2889195.
19.
Deepa, N., Prabadevi, B., Krithika, L. B. & Deepa, B. An analysis on Version Control Systems.
Int. Conf. Emerg. Trends Inf. Technol. Eng. ic-ETITE 2020 (2020) doi:10.1109/icETITE47903.2020.39.
20.
De Alwis, B. & Sillito, J. Why are software projects moving from centralized to decentralized
version control systems? Proc. 2009 ICSE Work. Coop. Hum. Asp. Softw. Eng. CHASE 2009
36–39 (2009) doi:10.1109/CHASE.2009.5071408.
21.
Cochez, M., Isomöttönen, V., Tirronen, V. & Itkonen, J. The use of distributed version control
systems in advanced programming courses. CEUR Workshop Proc. 1000, 221–235 (2013).
22.
Chacon, S. & Straub, B. Pro Git. Pro Git (2014). doi:10.1007/978-1-4842-0076-6.
23.
Brindescu, C., Codoban, M., Shmarkatiuk, S. & Dig, D. How do centralized and distributed version control systems impact software changes? Proc. - Int. Conf. Softw. Eng. 322–333 (2014)
doi:10.1145/2568225.2568322.
24.
Ball, T., Kim, J.-M. & Siy, H. P. If your version control system could talk. ICSE Work. Process
Model. Empir. Stud. Softw. Eng. (1997).
25.
Alnor, N. & Khleel, A. Comparison of version control system tools. (University of Miskolc,
2020). doi:10.35925/j.multi.2020.3.7.
26.
Sapolsky J. :The Joel Test: 12 Steps to Better Code
ware.com/2000/08/09/the-joel-test-12-steps-to-better-code/ of 09.08.2000
https://www.joelonsoft-
27.
Miller
M.:
Professional
Software
Development
https://mixmastamyk.bitbucket.io/pro_soft_dev/index.html#professional-software-development of 31.03.2021
34
28.
Collins-Sussman B., Fitzpatrick B., and Pilato C.: Version Control with Subversion, California
94305, USA 2004.
29.
Lionetti. G: What is version control: centralized vs. DVCS https://www.atlassian.com/blog/software-teams/version-control-centralized-dvcs of 14.02.2012
30.
Chacon S, Straub B. Pro git: Everything you need to know about Git. Second. Apress; 2014.
https://git-scm.com/book/en/v2.
CHAPTER 5. CONCLUSION
The University of Information Technology and Management in Rzeszów
Faculty of Applied Information Technology
Diploma Thesis Summary
Thesis title in English
Author: Abdulla Yerezhep
Supervisor: dr. inż. Barbara Fryc
Keywords: Version Control Version(VCS), Distributed Version Control System(DVCS), Centralized Version Control
System(CVCS), Git, GitHub.
I have made huge work of researching the world of version control system (VCS) the main idea of this thesis paper was to
demonstrate one of the best creations in the development management, the system that can ease the hard work of developers
and team of developers from having issues with progress version track, source code hosting, team administration, and project
management.
To fully understand the topic, I am trying to study I have started out from the very beginning and research the roots of VCS
by diving into history of creation, and found out two main types of it that are CVCS and DVCS, then continued my journey
by outlining the different generations of VCS and how they evolved through time. After all, I noted that nowadays DVCS
are much more in demand by also proving my point referencing to couple of research papers that I found in open access in
the internet. Then continued my journey by outlining the different generations of VCS and how they evolved through time.
My third chapter was dedicated to show software that is used throughout the world, by choosing two most used VCS according to Openhub.net. (n.d.). Open Hub, the open source network. http://www.openhub.net/. That are Subversion and Git we
stopped and described both of them in details and showed all differentiating aspects for both as they have completely opposite
approaches to source code management which makes them uniquely good and bad for each individual situation. By the result
of my comparison of these two systems I found out that for most development teams and enterprises better is still Git with
it’s distributed system that has huge advantage over Subversion, as well as few other solutions like snapshots and pull request
which puts Git above it’s opponent and I haven’t found any examples from functional aspects that Subversion makes better
than Git, although many individuals will choose dispersed repositories because of the apparent advantages of performance
and multiple versions, there are times when a central repository is preferable. For example, if you have any sensitive code
that you don't really want others to see, you shouldn't place it all under Git.
35
Now the practical part which I have divided in to two pieces, first one is my own attempt to host a descriptive research by
providing student in the university that I am studying myself with the survey that I have constructed in order to identify the
level of the awareness in VCS’s like Git, although the results that I have received objectively are not very accurate because
of the audience that participated in survey were chosen from broad spectrum of participants and it wasn’t truly narrowed as
it could’ve been if I would choose specific faculty and year of the students, although survey was my very first try in this kind
of research method I made several few statements that I found are the most important and interesting ones that we can take
out from this survey: Majority of surveyed were not fully experienced or engaged in using Git; Although students having
major in programming faculty and are in 3rd year cycle have had classes related to using Git as source code management and
are the most experience group amongst others, not a lot of them really invest in building a GitHub portfolio that is very crucial
in job application processes. Hence in my opinion it’s to convey such idea that developing skills in source code management
and knowing the tools for its very profitable for future developers. In my next researches on this topic I would find very
interesting to provide a particular group of people like a class that take one course within educational system and take a
survey before a course and after to track the progress of the students in particular service tool. Also interview the instructor/lecturer with questions related to his methods and opinion as well as in before and after form.
My second part of the practical part is my own analysis of the project development which helped me to detect the mistakes I
have made in my planning of the development process and opened me new opportunities to extend my GitHub account value,
that can in perspective land me in job that would be interested in technologies and experience I gained from this project. I
will monitor changes in GitHub new solution in the future.
36
37
Download