Upload
others
View
5
Download
0
Embed Size (px)
Citation preview
1
A EFICÁCIA DO CONTROLE DE VERSÃO DE SOFTWARE: O SISTEMA
DISTRIBUÍDO
Jéssica Neves Machado1
Resumo: Existem sistemas de controle de versões que ajudam a garantir a qualidade e segurança do código fonte sistêmico. A maioria das empresas de software utilizam um sistema de controle de versão para controlar seus softwares, isso porque com a utilização deste é possível rastrear qualquer alteração realizada. O objetivo deste estudo foi discorrer sobre o funcionamento do controle distribuído GIT, para isso, delineou-se inicialmente e de maneira sintética, acerca do controle de versão, para então descrever, mais especificamente, sobre o GIT. O que se pode verificar é que o controle de versões é um mecanismo bastante importante, principalmente em ambientes colaborativos, uma vez que estes ambientes contam com diversas pessoas responsáveis pela construção ou manutenção de um projeto ou tarefa. Nessa direção, encontra-se dentre os sistemas de versões, o sistema distribuído tal como o GIT que foi desenvolvido justamente para facilitar trabalho e rapidez de um projeto ou desenvolvimento de software editado por várias pessoas ou programadores. O GIT conserva o registro de todos os commits que são realizados durante um projeto podendo ser restaurando um ponto com bastante agilidade. Nota-se, com isso, a importância do versionamento especialmente na elaboração de projetos. Palavras-chave: software, sistema de controle de versões, GIT.
Abstract: There are version control systems that help ensure the quality and security of the systemic source code. Most software companies use a version control system to control their software, because it is possible to track any changes made. The purpose of this study was to discuss the operation of the GIT distributed control, for this, it was outlined initially and in a synthetic way about the version control, to then describe, more specifically, about the GIT. What can be verified is that version control is a very important mechanism, especially in collaborative environments, since these environments have several people responsible for the construction or maintenance of a project or task. In this direction, we find among the systems of versions, the distributed system such as the GIT that was developed precisely to facilitate work and speed of a project or development of software edited by several people or programmers. The GIT keeps track of all the commits that are performed during a project and can be restoring a point with enough agility. Note, therefore, the importance of versioning especially in the design of projects. Key-words: software, version control systems, GIT.
1 Tecnóloga em sistemas para internet.
2
INTRODUÇÃO
A evolução da tecnologia tem proporcionado aos desenvolvedores de software
a modificação e criação de diversas ferramentas sistêmicas para auxiliar a
humanidade em suas tarefas diárias, seja na iniciativa privada ou pública, trazendo
comodidade, agilidade e entretenimento para as pessoas. De fato, os aplicativos de
grande utilização no mercado, como por exemplo o Ifood, Mc Donalds, Uber, entre
outros trazem esta acessibilidade, o que consequentemente, torna a população
dependente dos mesmos. Uma coisa em comum entre esses aplicativos é que todos
possuem um código fonte independente da linguagem de programação utilizada seja
c#, java, Php, Android ou outros.
A importância dos meios de comunicação se expressa também tendo em vista
a realização de atividades econômicas, para as quais é indispensável que esta seja
feita de forma eficaz. Temos como exemplo as cotações de ações de empresas, que
hoje podem ser monitoradas com muito mais facilidade e de forma instantânea através
de sites especializados, bem como transações bancárias, que hoje podem ser
realizadas até em casa.
Com o advento da tecnologia e a necessidade de propagar a comunicação,
bem como a transmissão de informação simultânea, exigiu o desenvolvimento de um
sistema de transmissão rápido e eficiente. Nesse sentido, a evolução dos sistemas
softwares mostra que as novas tecnologias implicaram no desenvolvimento de
sistemas com maior capacidade de transmissão de informação. A internet, por sua
vez, é uma rede global intrincada de computadores que se expande a cada momento
e faz uso das mais diversas tecnologias de rede desde suas origens: Redes
eletrônicas, sem fio e ópticas.
A ampliação do uso das redes de computadores e a disseminação da internet
têm impulsionado, portanto, no desenvolvimento de sistemas de versão, que
consistem em uma coleção de computadores autônomos conectados por uma rede.
Neste sentido, existem sistemas de controle de versões que ajudam a garantir
a qualidade e segurança do código fonte sistêmico. A maioria das empresas de
software utilizam um sistema de controle de versão para controlar seus softwares, isso
porque com a utilização deste é possível rastrear qualquer alteração feita, quando e
quem realizou, além do mais, é possível utiliza-lo facilmente em uma equipe, onde
mais de uma pessoa poderá realizar a alteração do mesmo software.
3
Os sistemas de controle de versões podem ser classificados em dois modelos
de gerenciamento de repositórios: centralizado e distribuído. O presente trabalho tem
como objetivo principal discorrer, mais especificamente, acerca do sistema de controle
de versão distribuído GIT, a fim de descrever seu funcionamento e demonstrar sua
importância nas operações de software.
SISTEMA DE CONTROLE DE VERSÕES
Segundo Pressman (2010), o software pode ser definido, em termos gerais,
como um produto gerenciado por uma engenharia de software. Ao longo dos anos, os
softwares tiveram evoluções, seu surgimento ocorreu em meados dos anos 60 nas
aplicações científicas e de engenharia.
O software não é apenas um programa, mas também todos os dados de
documentação e configuração associados, necessários para que o programa opere
corretamente. Um sistema de software consiste, geralmente, de um conjunto de
programas separados; arquivos de configuração, que são utilizados para configurar
esses programas; documentação do sistema, que descreve a estrutura do sistema; a
documentação do usuário, que explica como usar o sistema; e sitesWeb por meio dos
quais os usuários obtém informações recentes sobre o produto (SOMMERVILLE,
2003).
Portanto, pode-se classificar os softwares em eras, quais sejam: a primeira era,
em que o termo inglês “software” foi usado pela primeira vez em 1958, em um artigo
escrito pelo cientista americano John Wilder Tukey; a segunda era (1960-80) nas
aplicações comerciais em grande-porte (sistemas de informação BD); a terceira era
(meados de 70 e década de 80) nos aplicativos pessoais em microcomputadores;
quarta era (meados de 80 a meados de 90) em aplicativos com Interfaces Gráficas e
Redes e Arquitetura ClienteServidor; a quinta era (de meados de 90 até o momento)
com Software Distribuídos, Internet, Groupwares e Intranets, etc.
Nos anos 70, com a denominada “Crise do software” (termo que expressava as
dificuldades do desenvolvimento de software frente ao rápido crescimento da
demanda), a importância de se estabelecer técnicas para o desenvolvimento de
sistemas com qualidade começaram a aparecer. Um dos principais problemas era a
disponibilidade de dados em projetos de software para análise (BIRD; MENZIES;
ZIMMERMAN, 2015). A “Crise do Software” não se refere simplesmente ao
4
funcionamento de programas, mas coloca em questão o modo que os sistemas
computacionais são construídos e implantados, remetendo, portanto, na substituição
de sistemas antigos; também problematiza como é provida a manutenção da
quantidade crescente de software construído, associado a sistemas computacionais
cada vez mais complexos; e ainda, o que fazer frente à crescente demanda para
construção de software, entre outras questões.
Apesar da variedade de problemas que caracterizam a crise do software,
engenheiros de software e gerentes de projetos, buscaram se concentrar,
especialmente, no desenvolvimento de sistemas computacionais que melhorem o
processo de software, ao mesmo tempo, que forneça qualidade dos produtos. Nesse
contexto, surge a Gerência de Configuração de Software, que é uma disciplina
responsável pelo controle da evolução de sistemas de software e engloba técnicas de
versionamento amplamente utilizadas em projetos de grande porte de
desenvolvimento de software. Dentre as vantagens do gerenciamento de software
pode-se citar: facilidade para acomodar mudanças, maior controle sobre os produtos,
economia de tempo no desenvolvimento, facilidade na geração de versões diferentes
de um mesmo produto de software, manutenção do histórico do software, facilidade
de recuperar versões anteriores.
O gerenciamento de software é fundamental no processo de desenvolvimento
de um produto, sendo definido como uma primeira camada deste processo. Segundo
Humble e Farley (2014, p.90), “a gerência de configuração se refere ao processo pelo
qual todos os artefatos relevantes ao seu projeto e as relações entre eles são
armazenados, recuperados, modificados e identificados de maneira única”.
Desse modo, no ano de 1972, no laboratório Bell Labs nos Estados Unidos, foi
desenvolvido por Marc. J. Rochkind, o primeiro sistema de controle de versões. Este
primeiro sistema foi denominado como Source Code Control System (SCCS), embora
ultrapassado, foi o principal sistema de controle de versão até o surgimento do RCS
(Revision Control System) e uma de suas principais contribuições foi a técnica de
armazenamento chamada interleaved deltas, considerada por vários desenvolvedores
como precursora para o surgimento de técnicas de junção (HOFFMAN, 2002).
A funcionalidade de um sistema de controle de versão2, basicamente, consiste
na colaboração e o compartilhamento de dados no desenvolvimento de um projeto.
2 O controle de versões é também conhecido como controle de revisões.
5
Além disso, é possível prover um ambiente colaborativo de desenvolvimento para
instituições de pesquisa e ensino; uma versão também pode ser destinada a substituir
seu predecessor (versão serial), criando novas versões a partir de uma modificação
na versão anterior; as versões podem também ser mantidas para apoiar a
cooperação, nessa situação, múltiplos desenvolvedores trabalham em paralelo em
diferentes versões e cada desenvolvedor opera em um workspace que contém as
versões criadas e usadas (HOFFMAN, 2002). O Controle de Versão consiste em uma
prática da Engenharia de Software, cuja base está na organização de projetos através
do gerenciamento de distintas versões de um documento.
Como existe uma tendência de equipes dispersas geograficamente
trabalharem ao mesmo tempo, o controle de versões é visto como uma extensão
natural do processo de desenvolvimento colaborativo. Para controlar tal processo, o
Controle de Versão de Software dispõe de três métodos (CAETANO, 2004):
1) Bloqueio: torna a operação de entrega de um arquivo restrita ao usuário que
realizou o bloqueio (“admin –l”), impedindo que outros usuários submetam
modificações deste mesmo arquivo ao repositório, enquanto ele estiver em
alteração.
2) Bloqueio fraco: usado para observar ou vigiar um arquivo (“watch”). Assim,
o usuário que estiver vigiando o arquivo será avisado sempre que tal arquivo
sofrer alguma alteração. Quando algum outro usuário retirar o arquivo, ele
virá como somente para leitura, para que ele saiba que o arquivo não deve
ser alterado. Porém, ainda assim, caso ele deseje alterar o arquivo, poderá
fazê-lo (“edit”).
3) Sincronização: é o método mais utilizado por permitir que alterações
paralelas sejam feitas em um mesmo arquivo. É realizada por meio de uma
operação de atualização (“update”), que verifica se alguma outra
atualização foi submetida ao repositório.
Segundo Junqueira (2007), no contexto do desenvolvimento de software, o
controle de versões está relacionado as técnicas e ferramentas utilizadas para
controle da evolução de arquivos de computador, ou seja, de determinados conteúdos
criados ao longo do tempo, o que permite a recuperação de dados históricos,
diferenças entre versões, assim como detalhes sobre a evolução de determinado
conteúdo que tenha tido suas versões controladas.
6
Desse modo, o controle de versões nada mais é do que uma ferramenta de
gerenciamento de configuração de software que pode auxiliar as organizações a
dominar ou controlar os problemas dispersos nas equipes de desenvolvimento.
Em suma, o sistema de controle de versões envolve o seguinte processo: obter
uma cópia de um repositório remoto; realizar alterações nos arquivos do repositório;
realizar um commit, confirmar as alterações e inserir uma mensagem descri vendo-
as; enviar suas alterações de volta para o servidor remoto. Um modelo de versão
define os objetos a serem versionados, identificação da versão e organização, bem
como as operações para recuperação de versões existentes e construção de novas
versões.
De acordo com Farley e Humble (2014), um controle de versão tem
basicamente dois objetivos. Em primeiro lugar, ele deve guarda a cada versão de cada
arquivo armazenado nele e garantir acesso a ela. Tais sistemas também fornecem
uma forma de associar metadados- isto é, informação que descreve os dados
armazenados- a cada arquivo ou grupo de arquivo. Em segundo lugar, ele permite
que equipes distribuídas no tempo e no espaço colaborem.
Para melhor entender sobre o funcionamento do controle de versões, faz-se
necessário apreender os principais conceitos que o envolvem, para isso foram
compilados tais conceitos de maneira esquemática e sintetizada, conforme ilustrado
na tabela 1.
Tabela 1- Conceitos principais
Commit (ou checkin)
Criação de uma versão nova.
Checkout
Recuperação de uma determinada versão do arquivo.
Repositório de versões
Armazenamento de todas as versões dos arquivos sob controle de versões.
Repositório de versões centralizados
Cada área de trabalho local contém apenas uma versão específica da árvore de versões
do repositório central e todos os usuários realizam as operações de controle de
versões no repositório central.
Repositório de versões distribuídos
Cada área local possui um repositório
acoplado, de forma que o usuário tem um
7
repositório próprio para realizar o controle de versões. As operações realizadas sobre os arquivos são feitas no repositório local do
usuário, e operações específicas dos repositórios distribuídos são utilizadas para
sincronizar repositórios diferentes.
Árvore de revisões ou de versões
Estrutura lógica que mapeia todas as
versões armazenadas no repositório para determinado arquivo ou conjunto de
arquivos.
Fonte: Adaptado de Junqueira (2007)
Como já mencionado anteriormente, os sistemas de controle de versão podem
ser classificados em dois modelos de gerenciamento de repositório, que centralizado
e distribuído. No modelo centralizado existe apenas um repositório central e várias
cópias de trabalho, isto é, existe um servidor central que faz o versionamento,
portanto, é deste servidor que outros computadores terão acesso aos arquivos e suas
versões. Nesse contexto, as operações de commit e update são responsáveis por
consolidar as alterações e atualizar a cópia local que acontecem entre cliente e
servidor (FREITAS, 2010).
O Subversion é um sistema de controle de versão centralizado, entre suas
características destaca-se a portabilidade, tanto o cliente como o servidor trabalham
com os principais sistemas operacionais: Unix, Windows e Mac OS X, e sua
portabilidade se deve ao subversion abstrair todas as diferenças entre os Sistemas
operacionais para que sua utilização seja homogênea em todos eles.
Figura 1 – Modelo versão centralizado
Fonte: Adaptado de Dias (2009)
8
No modelo de versão distribuído, ou também chamado de descentralizado,
existem vários repositórios autônomos e independentes, um para cada colaborador, e
cada um desses repositórios possui uma área de trabalho conectada a ele. Neste
modelo as operações de commit e update acontecem localmente. O
sistema distribuído é mais avançado e é recomendado para equipes grandes, que
podem estar em localidades diferentes (ou sub-equipes) e os projetos geralmente são
de grande porte (ou web), esse tipo de sistema permite o trabalho paralelo que
também pode ser um requisito de utilização.
As vantagens de sistemas distribuídos sobre micros independentes:
compartilhamento de dados, compartilhamento de dispositivos, comunicação, mistura
de computadores pessoais e compartilhados pode permitir uma distribuição de tarefas
mais eficiente. No entanto, tem como desvantagens que a melhoria da rede pode
acarretar em custos altos, o compartilhamento de dados implica em esquemas
especiais para proteção de dados sigilosos.
Figura 2 – Sistema de controle distribuído
Fonte: Moraes (2013)
No modelo distribuído cada colaborador possui um repositório próprio acoplado
a sua área de trabalho. Neste modelo, são adotados para o desenvolvimento do
kernel do sistema operacional Linux, também projeto Mozilla, os sistemas GIT, o
9
Bazaar e o Mercurial também são exemplos de sistemas de controle de versão
distribuídos. Em relação ao GIT, este sistema de controle de versão distribuído tem
como principais características: a velocidade, design simples, suporte robusto a
desenvolvimento não linear e capacidade de lidar de modo eficiente com grandes
projetos como o kernel do Linux (velocidade e volume de dados) (MORAES, 2013).
O modelo seguido pelo GIT ao invés de precisar de um repositório central que
os desenvolvedores enviam suas alterações precisa-se apenas de um repositório
próprio em que se tem um histórico inteiro do projeto, assim, efetuar commits não
envolve uma conexão com um repositório remoto, pois a alteração é armazenada
localmente.
O SISTEMA DISTRIBUÍDO GIT
O GIT foi elaborado por Linus Torvalds para auxiliar no desenvolvimento do
Kernel Linux. Ele é um software livre open source desenvolvido usando a linguagem
C, Shell Script e Perl e é distribuído sob a licença GNU GPLv2. Consiste em
um sistema de controle de versão distribuído que tem como ênfase a velocidade, a
sua manutenção é atualmente supervisionada por Junio Hamano, que é um
engenheiro de software.
O GIT é um Sistema de Controle de Versão distribuído, entre suas principais
características estão, velocidade, design simples, suporte robusto a desenvolvimento
não linear (branches paralelos, ramificações do projeto) e capacidade de lidar
eficientemente com grandes projetos como o kernel do Linux (velocidade e volume de
dados). Ao contrário de sistemas de controle de versão centralizados, a natureza
distribuída do GIT lhe permite ser muito mais flexível na forma como os
desenvolvedores podem colaborar em projetos. Cada desenvolvedor pode contribuir
para outros repositórios e ao mesmo tempo pode manter um repositório público em
que outros possam basear seu trabalho e fazer contribuições, isso abre uma vasta
gama de possibilidades de fluxo de trabalho para equipes colaborativas.
Usado principalmente para desenvolvimento de software, o GIT pode ser
utilizado também para registrar o histórico de edições de qualquer tipo de arquivo, ou
seja, cada alteração que você realizar no arquivo ficará registrado de forma que se
necessário, será possível identificar quem alterou o arquivo, assim como, recuperar a
específica versão ou ajudar na manutenção da mesma mais facilmente. Diferente dos
10
sistemas de controle de versão centralizados, a natureza distribuída do GIT permite
maior flexibilidade no modo como os desenvolvedores podem colaborar em projetos.
Cada desenvolvedor pode contribuir para outros repositórios, ao mesmo tempo
manter um repositório público em que outras pessoas possam basear seu trabalho e
fazer suas contribuições (JUNQUEIRA, 2007).
Dessa forma, com o GIT a resolução de algum problema pode ser mais
facilitada, independentemente do número de pessoas envolvidas, isso por que ele é
um sistema inteligente e fica responsável em realizar o trabalho “chato”, ou seja,
notificar e unir as informações do arquivo. O protocolo GIT procura otimizar a largura
de banda utilizada e por isso torna operações de atualizações rápidas e eficientes.
Por ser um sistema de controle de versão de arquivos, com o GIT pode-se
controlar arquivos, fontes de projetos na qual várias pessoas podem contribuir
simultaneamente alterando ou criando arquivos, além de manter um histórico de todas
as suas alterações, é possível também recuperar determinada versão do arquivo sem
comprometer o atual. O controle dessas permissões pode ser realizado de diferentes
modos, como por exemplo, por meio do protocolo ssh, que permite a criação de
chaves para controlar a autenticação ou através do protocolo HTTP, que propicia
definir permissões de leitura e escrita para cada arquivo ou diretório (JUNQUEIRA,
2007).
De maneira similar ao Subversion, no GIT a operação de commit é atômica,
isto é, se uma operação é interrompida, ela é desconsiderada e o repositório não
permanece em um estado inconsistente. O GIT tem capacidade de manter a ordem
evitando problemas para os desenvolvedores. Para que isso ocorra, no GIT há a
possibilidade da criação de vários snapshots do projeto.
Cada vez que se salva o projeto (ação conhecida tecnicamente como
“commit”), é como se ele tirasse uma foto (snapshots) de todos os seus arquivos
naquele momento e armazenasse uma referência para essa captura. Se nenhum
arquivo foi alterado, a informação não é armazenada novamente (PALESTINO, 2015).
A Figura 3 ilustra como o GIT trata os dados por meio dos snapshots.
Figura 3 – Tratamento dos dados GIT
11
Fonte: GITLAB apud Palestino (2015)
Há três seções principais de um projeto do GIT: o diretório do GIT (Git Directory,
Repository), o diretório de trabalho (working directory), e a área de preparação
(staging area). Em suma, o workflow do GIT pode ser sintetizado do seguinte modo:
1. Modificação de arquivos em um diretório de trabalho.
2. Seleção dos arquivos, adicionando snapshots deles para uma área de
preparação.
3. Commit que leva os arquivos como eles estão na área de preparação e os
armazena permanentemente no diretório GIT (PALESTINO, 2015).
Figura 4 – Seções principais de um projeto GIT
Fonte: Palestino (2015)
Desse modo, pode-se verificar que os principais comandos do GIT estão
relacionados ao seu fluxo básico de trabalho que pode ser definido com as operações
12
comuns realizadas por um colaborador. Fazem parte do fluxo de trabalho do GIT as
seguintes operações:
1.Atualizar cópia de trabalho: através do comando git fetch, que faz o download
de alterações do repositório desejado, seguido do comando git merge, para mesclar
as alterações baixadas com o seu repositório, ou através do comando git pull, que
atualiza seu repositório e sua área de trabalho com as alterações de outro repositório.
2. Fazer alterações: através dos comandos git add, que adiciona arquivos ao
index; git rm, que exclui um item de uma cópia de trabalho ou do repositório e git mv,
que move ou renomeia um arquivo ou diretório.
3.Verificar alterações: através dos comandos git status, que exibe informações
sobre o estado de arquivos e diretórios na cópia de trabalho e git diff, que exibe as
diferenças entre duas revisões ou caminhos.
4.Desfazer alterações: com o comando git revert, que desfaz todas as edições
locais. 5.Resolver conflitos: com o comando git mergetool, que executa
ferramentas de resolução de conflitos.
6.Submeter alterações: através do comando git commit, que envia as
alterações de sua cópia de trabalho para o repositório.
7.Propagar alterações: através do comando git push, que envia as alterações
do repositório local (origem) para outro repositório (destino) (MORAES, 2013).
Ressalta-se também que existe um local de armazenamento em nuvem dos
arquivos enviados via GIT, chamado de GITHUB, cujo programa é um serviço web
que oferece diversas funcionalidades extras aplicadas ao GIT. Conforme aponta Neto
(2016), o GitHub é a maior plataforma de armazenamento de código existente e possui
um acervo variado, com vários tipos de projetos para análise.
O GitHub é uma plataforma de hospedagem de repositórios com 27 milhões de
usuários, 80 milhões de repositórios e 1,8 milhão de organizações, dados em maio de 2018.
O projeto foi lançado em 2008 pelos desenvolvedores da Logical Awesome e adquirida
recentemente pela Microsoft. O Github é um serviço de hospedagem distribuído
desenvolvido em Ruby on Rails para projetos que utilizam o controle de versão Git.
Durante a evolução da ferramenta foi visto que funcionalidades que permitissem a
interação entre usuários. Assim, é utilizado como repositório online de códigos fonte
para projetos de código aberto. Pode-se encontrar nele informações sobre todos os
commits (atualizações) dos projetos que o utilizam, ele possui aspecto de uma rede
social que possibilita que outras pessoas acompanhem o desenvolvimento do projeto.
13
O GitHub possui uma ferramenta de issue tracking bastante flexível, que
possibilita que o acompanhamento de issues seja adequado às necessidades de cada
projeto, utilizando marcação através de rótulos (labels) que podem ser definidos pelos
colaboradores do projeto e o fechamento de issues através de um commit. Além disso,
(iii) é uma plataforma que integrou funcionalidades sociais com sucesso às suas
funcionalidades de suporte ao desenvolvimento. Essas funcionalidades permitem que
os desenvolvedores “sigam” (funcionalidade follow) outro desenvolvedor ou
“assistam” (funcionalidade watch) outros repositórios, permitindo que as ações de
desenvolvedores seguidos ou em repositórios assistidos sejam informadas para os
usuários interessados (NETO, 2016).
Além disso, tem-se a ferramenta open source GitLab que possui interface web,
é distribuída livremente sob a licença MIT, seu desenvolvimento foi baseado na
linguagem de programação Ruby apoiado pelo framework Rails, ela gerencia
exclusivamente o sistema de controle de versão GIT. Dentre as suas principais
funcionalidades, cita-se: criar projetos, repositórios e gerenciar usuários e suas
permissões de acesso ao código fonte que é gerenciado através da ferramenta,
suporte à comunicação que é provido aos membros de uma equipe colaborativa, que
pode ser feito através de criação de tarefas, listas de discussões e suporte à criação
de páginas wiki por projeto (MORAES, 2013).
O GitLab possui uma comunidade ativa e colaborativa, releases de versões são
lançadas constantemente com atualizações e correções. Entre suas principais
características e funcionalidades pode-se destacar a gestão de repositórios com
acesso através de interface web, possui controle de usuários, grupos e suas
permissões por repositório, interface para revisão e mesclagem de código, suporte à
comunicação através de tarefas, comentários e páginas de wiki. E suporte para o
sistema de controle de versão GIT. Requisitos de instalação para o GitLab: Sistema
operacional Ubuntu/Debian, Ruby 1.9.3 ou superior, Rails, GIT 1.7.10 ou superior,
Redis 2.0 ou superior, MySQL ou PostgreSQL (MORAES, 2013). O GitLab surgiu em
meados de 2011, fundado por Dmitriy Zaporozhets e Valery Sizov.
Para instalar do GIT é necessário um dos sistemas operacionais
Debian/Ubuntu, Windows, OS X. Um dos principais destaques do GIT é que ele é
rápido, escalável, distribuído que permite operações de alto-nível e total acesso para
os usuários. A possibilidade de Hooks é limitada por alguns sendo possível executar
nos momentos “applypatch-msg”, “pre-applypatch”, “postapplypatch”, “pre-commit”,
14
“prepare-commit-msg”, “commit-msg”, “post-commit”, “prerebase”, “post-checkout”,
“post-merge”, “pre-receive”, “update”, “post-receive”, “postupdate”, “pre-auto-gc” e
“post-rewrite (MASON, 2006).
Como se pode observar com as descrições funções do GIT, este sistema
possui vantagem no ambiente operacional, uma vez que flexibiliza e compartilha as
tarefas e operações. A cunho de exemplo, imagina-se um cenário sem a utilização do
GIT, onde duas pessoas iram trabalhar em um mesmo arquivo virtualmente, pois cada
um irá realizar suas alterações, e posteriormente, enviá-las por e-mail, redes sociais,
etc., para que o outro possa acessar e juntar as alterações e novamente remetê-la
para complementação. Esse cenário é possível, porém trabalhoso, agora imagine um
cenário onde 10 pessoas ou 100 pessoas precisam trabalhar no mesmo arquivo. Fica-
se inviável, afinal, dispenderá grande esforço para concluir a união de todas as
alterações e fará com que a produtividade caia.
Por outro lado, um cenário utilizando GIT, onde duas pessoas estão
trabalhando em um mesmo arquivo e um deles finaliza suas alterações e informa para
o GIT que a concluiu. Após um tempo, o segundo usuário também conclui suas
alterações no arquivo e informa ao GIT que irá subir, neste momento, o GIT irá tentar
juntar as alterações dos dois usuários automaticamente para poder gerar uma nova
versão do arquivo.
CONCLUSÃO
O objetivo deste estudo foi discorrer sobre o funcionamento do controle
distribuído GIT, para isso, delineou-se inicialmente e de maneira sintética, acerca do
controle de versão, para então descrever, mais especificamente, sobre o GIT.
O que se pode verificar é que o controle de versões é um mecanismo bastante
importante, principalmente em ambientes colaborativos, uma vez que estes ambientes
contam com diversas pessoas responsáveis pela construção ou manutenção de um
projeto ou tarefa. No controle de versão distribuído há vários servidores autônomos e
independentes desenvolvedor e as operações de check-in e check-out são feitas na
própria máquina, este tipo de sistema é mais rápido, no entanto, exige maior
conhecimento da ferramenta.
Na medida em que o controle de versões viabiliza o acompanhamento dos
arquivos do computador isso permite que sejam agilizados alguns processos, e
15
consequentemente, minimizados problemas que podem ocorrer, visto que pode se
obter mais detalhes – e de maneira mais rápida – sobre os produtos de softwares,
projetos ou tarefas que estão sendo desenvolvidos. Com a grande competitividade no
mercado de desenvolvimento de software, construir aplicações com uma maior
qualidade é fundamental para a permanência no mercado atrelado a qualidade e
eficiência do produto. Portanto, o controle de versão torna-se uma ferramenta
importante neste quesito.
A ferramenta GIT possui os principais comandos básicos de um sistema de
controle versão como check-out, commit, branch, tag, diff, merge, log e notes (ou
annotation). O GIT conserva o registro de todos os commits que são realizados
durante um projeto podendo ser restaurando um ponto com bastante agilidade. Nota-
se, com isso, a importância do versionamento especialmente na elaboração de
projetos, pois com a ausência de controle de versão a empresa pode perder o registro
da evolução do projeto e das alterações sobre cada arquivo.
Nessa direção, encontra-se dentre os sistemas de versões, o sistema
distribuído tal como o GIT que foi desenvolvido justamente para facilitar trabalho e
rapidez de um projeto ou desenvolvimento de software editado por várias pessoas ou
programadores. Dessa forma, para aumentar a capacidade de processamento do
servidor ou replicar os repositórios os sistemas distribuídos são mais adequados, pois
se baseiam em repositórios autônomos e individuais, as operações são processadas
mais rapidamente e comais autonomia. O GIT, portanto, tem como principais
vantagens maior velocidade, consistência e simplicidade.
REFERÊNCIAS
BIRD, C.; MENZIES, T.; ZIMMERMAN, T. The Art and Science Of Analyzing Software Data. 1 edition. ed. [S.l.]: Morgan Kaufmann, 2015. CAETANO, C. CVS: Controle de Versões e Desenvolvimento Colaborativo de Software. Editora Novatec, 2004. DIAS, A. F. Conceitos Básicos de Controle de Versão de Software - Centralizado e Distribuído. Artigo Pronus, 2009. Disponível em http://www.pronus.eng.br/artigos_tutoriais/ gerencia_configuracao/conceitos_basicos_controle_versao_centralizado_e_distribuido.php ?pagNum=0. Acesso em 20 de janeiro de 2018.
16
FREITAS, Daniel Tannure Menandro de. Análise comparativa entre sistemas de controle de versões. Trabalho de conclusão de curso em ciência da computação. Universidade Federal de Juiz de Fora. Juiz de Fora, 2010. GITLAB. Disponível em: < http://gitlab.org> HOFFMAN, Alessandra Botoletto Garbelotti. Um modelo para o controle de versões de sistemas para apoio ao desenvolvimento colaborativo através da Web. 123f. Dissertação em Ciência da Computação. Universidade Federal de Santa Catarina. Florianópolis, 2002. HUMBLE, J.; FARLEY, D. Entrega contínua: Como entregar software de forma rápida e confiável. Edição única. Bookman. Porto Alegre, 2014. JUNQUEIRA, Daniel. Um controle de versões refinado e flexível para artefatos de software. 106f. Dissertação de mestrado em Ciências Matemáticas. Universidade São Paulo. São Carlos, 2007. MASON, M. Pragmatic Version Control: Using Subversion (The Pragmatic Starter Kit Series). Pragmatic Bookshelf, 2006. MORAES, Rodolfo Campagnoli. CollabDev: Gerenciador de Repositórios para Ambientes Colaborativos de Desenvolvimento. 62f. Trabalho de Conclusão de Curso (Graduação em Sistemas de Informação) – Curso de Sistemas de Informação, Fundação de Ensino. UNIVEM, Marília, 2013. NETO, Casimiro Conde Marco. Um levantamento estruturado do uso da ferramenta de registro de problemas na plataforma GITHUB. Dissertação de mestrado em Informática. Universidade Federal do Rio de Janeiro. Rio de Janeiro, 2016. PALESTINO, Caroline Munhoz Correa. Estudo das tecnologias de controle de versões de softwares. Trabalho de conclusão de curso em Gestão da Informação. Universidade Federal do Paraná. Curitiba, 2015.
PRESSMAN, R. S. Engenharia de Software. 6. ed. São Paulo: McGraw-Hill, 2010.
SOMMERVILLE, I. Engenharia de Software. São Paulo: Ed. Pearson Education, 2003.