Visualização de versionamento com Gource

14/04/2012 por

Acredito que nenhum projeto sobrevive sem um bom controle de versão, e diria até que é impossível manter o mínimo de sanidade mental dos colaboradores de um projeto quando há modificações em um mesmo arquivo por mais de uma pessoa sem uma ferramenta destas.

Existem vários sistemas muito bons e gratuitos (Subversion, Git e Mercurial) que estão disposição de qualquer programador para que este registre as alterações no código fonte e inclusive mantenha versões paralelas (branches). Não é necessário nem passar trabalho para instalar um servidor público se quiser versionar um projeto seu e de seus amigos, há alguns servidores gratuitos para projetos de código aberto que são muito fáceis de utilizar (Assembla e Github).

Basicamente um sistema de controle de versão guarda datas de modificação, arquivos modificados, o usuário de versionamento e uma mensagem deste que submeteu a mudança. Isso já parece ótimo para a maioria dos programadores, e convenhamos, já é o suficiente para quem gosta de saber o que se passa sem ter que perguntar a ninguém.

O Gource

O Gource http://code.google.com/p/gource/) é um aplicativo para visualização gráfica de todo o histórico de versionamento de um projeto, e ele pode ler informações de um repositório Subversion, Bazaar, Mercurial ou Git para criar belas imagens da interação dos usuários com os arquivos/pastas.

Fiz alguns testes com alguns repositórios que já existem a mais de 4 anos na empresa que trabalho e os resultados são muito interessantes, é possível ver onde as funcionalidades que os desenvolvedores mais trabalham e observar o impacto nos arquivos em cada modificação enviada pelos usuários, a criação de branches é outro espetáculo.

Sample de um dos efeitos

Histórico de dez anos do desenvolvimento uma biblioteca

O terceiro video é o histórico de desenvolvimento do Python de 1990 até meados de 2010

A ferramenta também lê arquivos de log em um formato específico, assim você pode criar uma ferramenta que converta outro log em informação que pode ser representada nos mesmos moldes.