16
1 A EFICÁCIA DO CONTROLE DE VERSÃO DE SOFTWARE: O SISTEMA DISTRIBUÍDO Jéssica Neves Machado 1 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.

SISTEMA DE CONTROLE DE VERSÃ ES DISTRIBUIDO - GIT (1)

  • Upload
    others

  • View
    6

  • Download
    0

Embed Size (px)

Citation preview

Page 1: SISTEMA DE CONTROLE DE VERSÃ ES DISTRIBUIDO - GIT (1)

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.

Page 2: SISTEMA DE CONTROLE DE VERSÃ ES DISTRIBUIDO - GIT (1)

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.

Page 3: SISTEMA DE CONTROLE DE VERSÃ ES DISTRIBUIDO - GIT (1)

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

Page 4: SISTEMA DE CONTROLE DE VERSÃ ES DISTRIBUIDO - GIT (1)

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.

Page 5: SISTEMA DE CONTROLE DE VERSÃ ES DISTRIBUIDO - GIT (1)

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.

Page 6: SISTEMA DE CONTROLE DE VERSÃ ES DISTRIBUIDO - GIT (1)

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

Page 7: SISTEMA DE CONTROLE DE VERSÃ ES DISTRIBUIDO - GIT (1)

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)

Page 8: SISTEMA DE CONTROLE DE VERSÃ ES DISTRIBUIDO - GIT (1)

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

Page 9: SISTEMA DE CONTROLE DE VERSÃ ES DISTRIBUIDO - GIT (1)

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

Page 10: SISTEMA DE CONTROLE DE VERSÃ ES DISTRIBUIDO - GIT (1)

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

Page 11: SISTEMA DE CONTROLE DE VERSÃ ES DISTRIBUIDO - GIT (1)

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

Page 12: SISTEMA DE CONTROLE DE VERSÃ ES DISTRIBUIDO - GIT (1)

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.

Page 13: SISTEMA DE CONTROLE DE VERSÃ ES DISTRIBUIDO - GIT (1)

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”,

Page 14: SISTEMA DE CONTROLE DE VERSÃ ES DISTRIBUIDO - GIT (1)

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

Page 15: SISTEMA DE CONTROLE DE VERSÃ ES DISTRIBUIDO - GIT (1)

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.

Page 16: SISTEMA DE CONTROLE DE VERSÃ ES DISTRIBUIDO - GIT (1)

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.