Palestra no II Encontro Livre

Pessoal,

Meu trabalho sobre o Git foi aceito no II Encontro Livre que acontecerá nos dias 10, 11 e 12 de Março, na Livraria Cultura Paço Alfândega.

Gostaria de convidar a todos para prestigiarem o evento, que é de suma importância para a disseminação de conhecimentos e da cultura livre em PE. E logico, se possível assistir minha palestra que ocorrerá no dia 11/03 as 15:10.

Resumo da palestra: O desenvolvimento de projetos de software está a cada dia que passa mais colaborativo e integrado. Nessa palestra veremos o contexto de um sistema de controle de versão VCS/SCM, abordando de forma mais ostensiva os sistemas de controle distribuído, mais detalhadamente o GIT, uma poderosa ferramenta criada por Linux Torvalds e bastante apropriada para o gerenciamento e controle dos códigos fontes.

Macrotema: Gerenciamento de dados

Tags: controle de versão; git; vcs; scm; dvcs; códigos; desenvolvimento; software livre.

Maiores detalhes em: Programação do Evento

2. Entendendo o Funcionamento do VCS/SCM

Para entendermos os itens três e quatro deste artigo, precisamos primeiro nos debruçar no que diz respeito ao funcionamento de um sistema de controle de versão, ou seja, devemos explanar os conceitos básicos relacionados ao modelo apresentado.


O controle de versionamento é basicamente dividido em dois segmentos: o repositório, que é responsável pelo armazenamento das informações e a área de trabalho (Desktop). O repositório como havia descrito acima, é responsável pelo armazenamento das informações relacionadas ao projeto, em modo persistente no sistema de arquivo escolhido, ou até mesmo em um banco de dados. Nele será guardado todo o histórico de desenvolvimento do projeto e registrado também qualquer tipo de modificação realizada nos arquivos nele alocados.


O responsável pelo desenvolvimento do documento nunca trabalha diretamente nos arquivos do repositório, ele deve antes obter em sua área de trabalho uma cópia local, também chamada de cópia de trabalho (Working Copy) que contém a copia da ultima versão de cada arquivo do projeto e esta deverá ser monitorada para identificar qualquer tipo de alteração realizada. Essa área geralmente fica isolada das demais. A comunicação e sincronização entre o repositório e a área de trabalho se dão por duas operações distintas: commit e update, como demonstrado na figura abaixo:


Figura 1: topologia básica de um sistema para controle de versão.

O commit é responsável por submeter um pacote contendo uma ou mais modificações realizadas durante o desenvolvimento na área de trabalho que é a origem, para seu destino que é o repositório. O update por sua vez faz o trabalho proporcionalmente inverso, isto é, ele envia uma cópia de trabalho da ultima versão estável contida no repositório para a área de trabalho do desenvolvedor. Cada operação de commit gera uma nova revisão no repositório, registrando sempre todas as modificações realizadas, data e autor. Criando uma alusão a operação, é como se uma revisão fosse uma “fotografia” de todos os arquivos e diretórios em um determinado tempo da evolução do projeto. Essas “fotografias” de tempos passados são armazenadas no repositório e podem ser analisadas ou restauradas sempre que for desejado e o conjunto dessas revisões é justamente o que chamamos de histórico do projeto.

Podemos subdividir o sistema de controle de versão basicamente em dois tipos, de acordo com a maneira que cada um deles garante o controle e o gerenciamento do seu repositório: centralizado e distribuído. Nos CVS centralizados as mudanças são feitas para um repositório central e único, ao contrário dos distribuídos, onde os desenvolvedores trabalham diretamente no próprio repositório.

Então agora podemos dizer que, tanto o controle de versionamento centralizado quanto o distribuído basicamente funcionam sob os repositórios e as áreas de trabalho. A distinção está justamente em como cada uma dessas revisões estão adornadas no processo como um todo.


Obs.: Caso prefiram, também podem baixar o artigo (completo) no formato PDF através do link:

Download:
GIT: Controle de Versões Distribuído para Projetos de Software

1. Introdução a VCS/SCM

Os sistemas de controle de versão, mais comumente chamados de VCS (acrônimo do termo em inglês Version Control System) ou ainda SCM (acrônimo do termo em inglês Source Code Management) funcionam como aplicativos computacionais responsáveis pelo controle e gerenciamento de diferentes versões na implementação de um determinado documento. Na sua grande maioria esses sistemas são implantados com a finalidade de controlar e gerenciar o desenvolvimento de projetos de software, proporcionando a manutenção das suas versões - de um histórico e desenvolvimento dos códigos fontes e conseqüentemente da documentação de todo o projeto.

Esse tipo de ferramenta se mostra bastante presente em organizações e empresas de âmbito tecnológico e de desenvolvimento de projetos de software, sendo também bastante utilizado para o desenvolvimento de ferramentas Open Source (Código Aberto). Sua utilidade pode ser denotada por diversos aspectos, seja ele para pequenos projetos, como também para projetos de maior escala comercial.

Existem vários sistemas que propõe estas funcionabilidades, entre os mais conhecidos e utilizados em diversos projetos, encontram-se: CVS, ou Concurrent Version System (Sistema de Versões Concorrentes) e o SVN, mais conhecido como Subversion, esses dois últimos no ambiente livre, na outra ponta podemos citar sistemas comerciais como: Clearcase da IBM ou o SourceSafe da Microsoft. A maioria dos projetos de desenvolvimento de software livre opta pelo Subversion que é a evolução do inveterado CVS, porem podemos citar uma exceção a essa “regra”, que é uma ferramenta chamada Bitkeeper, que apesar de ser comercial, foi por muito tempo utilizado para o gerenciamento e controle de versões do Kernel Linux, até o surgimento do GIT. Muitas organizações comerciais também utilizam o SVN, apesar de algumas dessas empresas preferirem realmente uma solução paga, daí partem por optar pelos produtos mencionados acima. A escolha por empregar uma solução comercial comumente se dá por questões de garantias, visto que as soluções livres não se responsabilizam por bugs, erros ou perdas de informações no software, em contra partida podemos elevar as melhores condições de empregabilidade, segurança e desempenho das ferramentas livres.

Todos os caminhos que nos levam ao emprego de um sistema de controle de versão são comprovados pela sua eficácia e por estes fazerem parte dos principais requisitos para a manutenção e aprimoramento dos processos que envolvem um projeto de software, tanto quando sua ligação com processos de certificações como o SPICE (acrônimo de Simulated Program whit Integrated Circuits Emphasis) e o CMMI (acrônimo de Capability Maturity Model Integration), que tendem a garantir um modelo unificado para os processos corporativo.

Os principais proveitos em se empregar um sistema de controle de versão para monitorar as alterações realizadas durante as implementações de um determinado software são: controle e gerenciamento de históricos de alterações; identificação e restauração de versões estabilizadas; ramificações que ajudam na divisão do projeto, facilitando assim o trabalho de desenvolvimento em paralelo e principalmente o sincronismo oferecido para a equipe de trabalho.

Obs.: Caso prefiram, também podem baixar o artigo (completo) no formato PDF através do link:

Download:
GIT: Controle de Versões Distribuído para Projetos de Software

Nota de esclarecimento

Pessoal,
Peço desculpas pelo sumiço repentino e um tanto quanto longo, mas está sendo por uma causa nobre. Nesses últimos dias, venho me dedicando no estudo e aprimoramento de um assunto que é dor de cabeça para muitos projetos de software e principalmente para muitos programadores, trata-se do processo de gerenciamento e controle de versões de código fonte.
E essa dedicação já tem seu 1º fruto. Um Artigo Científico quentinho saindo do forno!
Nos próximos dias estarei disponibilizando vários posts contendo "pedaços" desse artigo, espero que tirem bastante proveito dele.
Até lá!