Buscar

N3 sistema de controle de versões

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 29 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 29 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 29 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

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.
 (
10
)
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.
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
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 processode 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.
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.
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
	
	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)
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, quepodem 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
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
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
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
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õesde 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.
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”,
“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
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_distribui do.php ?pagNum=0. Acesso em 20 de janeiro de 2018.
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. Juizde 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.

Continue navegando