OL4JSF Tomcat Archetype – Projeto GeoJava em 5 passos

23 de junho de 2011 1 comentário

Nas ultimas semanas estou trabalhando forte em um projeto para um framework bastante conhecido mas que ainda não posso falar. O trabalho consiste na habilitação deste framework a utilizar recursos para construção de aplicações webgis . Como a nova versão do framework trás a premissa do uso de novas tecnologias como por exemplo JEE6, não poderia deixar de lado a moderna biblioteca OL4JSF que visa manter as mesmas linhas de produtividade preconizada na nova versão do JEE.

GeoJEE6 Stack

Para testar as implementações que estou fazendo para o framework, tive que criar uma aplicação de exemplo e como de praxe enfrento mais uma vez a dificuldade de estabelecer a configuração inicial desta app de exemplo devido a complexidade de configurar a GeoJEE6 Stack(apresentado no minicurso geodojo do latinoware 2010) no container web tomcat.

Como por mais uma vez enfrentei a dificuldade resolvi criar um arquétipo maven para a stack e encaminhei para o amigo Robert Anderson mantenedor do OL4JSF hospedar no repositório do projeto para servir como ponto de partida para os desenvolvedores que queiram iniciar o seu projeto baseada na GeoJEE6 Stack.

Vou explicar em poucos passos como criar o seu projeto a partir do arquetipo e veremos na prática como facilitou a vida dos desenvolvedores. Vale ressaltar, que este primeiro arquetipo atende apenas os projetos tomcat.

Primeiramente você precisa ter instalado os seguintes componentes:

  • JDK 1.6
  • Eclipse WTP
  • Maven 2 ou superior
  • Tomcat 6 ou superior
Observem que não estou colocando o plugin do maven para eclipse justamente para descomplicar o processo de configuração do ambiente de desenvolvimento. Quem desejar utilizar o plugin fique a vontade, funciona da mesma forma.
PASSO1: Abrir o console na pasta onde se deseja criar o projeto e executar a linha de comando abaixo:

$ mvn archetype:generate -DarchetypeGroupId=org.ol4jsf.archetype -DarchetypeArtifactId=ol4jsf-tomcat7-archetype -DarchetypeVersion=1.0-SNAPSHOT -DarchetypeRepository=http://java.net/svn/ol4jsf~svn/repository/

PASSO2: Preencher o formulário do arquétipo com os dados básicos como no exemplo abaixo.

Define value for property 'groupId': : br.com.rafaelsoto.ol4jsf
Define value for property 'artifactId': : geodojo
Define value for property 'version':  1.0-SNAPSHOT: :
Define value for property 'package':  br.com.rafaelsoto.ol4jsf: :
Confirm properties configuration:
groupId: br.com.rafaelsoto.ol4jsf
artifactId: minhaAPP
version: 1.0-SNAPSHOT
package: br.com.rafaelsoto.ol4jsf
 Y: :

PASSO3: Após o passo 3 basta entrar na pasta que o maven criou e executar o comando para criação do projeto eclipse WTP

$ mvn -Dwtpversion=2.0 eclipse:eclipse

PASSO4: Abra o eclipse, botão direito >> import >> existing projects into workspace. Na sequência selecione o diretório que o maven criou e deverá aparecer o seu projeto na listagem. No meu exemplo geodojo. Basta finalizar e o projeto será carregado.

Import do projeto no eclipse

PASSO5: Para testar o seu projeto basta selecionar ele e executar no Tomcat. Click direito no projeto >> Run as >> Run on Server.

Se tudo der certo, deve aparecer uma janela do seu browser com uma primeira tela da aplicação usando o OL4JSF.

Agora é meter a mão na massa e construir seu projeto!


Categorias:gis

Adeus 41!

Desde que mudei para a TIM passei a sofrer de um mal que todos os usuários da TIM sofrem também… Não conseguimos ligar para outro telefone digitando apenas 0(DDD) + telefone.. Sempre precisamos colocar o 41 para conseguir completar a ligação.. Com isso a saída mais tradicional é começar a mudar todos os números da agenda colocando o 041 na frente. Mesmo assim ainda continuamos a enfrentar outro grande problema, quando recebemos ligações e precisamos retornar a mesma o número que fica memorizado no celular não vem com o 041 na frente o que nos obriga a abrir a agenda procurar o contato para ligar ou editar sempre o número colocando o famigerado 41 na frente…

Na semana passada pesquisando na vasta biblioteca do android market encontrei uma das melhores aplicações utilitarias para android.

O Operadora DDD é um programa para celulares Android que serve para facilitar a vida daqueles que fazem ligações de longa distância ou simplesmente para aqueles que gostam de manter os números de telefone dos contatos gravados num formato específico.

O programa lê os contatos em um dos vários formatos possíveis e ajusta o número automaticamente na hora da discagem inserindo o código da operadora de longa distância quando necessário.

Alguns dos formatos suportados pelo programa são:

  • 9999-7777
  • 011 9999-7777
  • 11 9999-7777
  • +55 11 9999-7777
  • 0 xx 11 9999-7777 (onde xx é o código da operadora)
  • 00 55 11 9999-7777

Os espaços e traços dos exemplos acima são só para legibilidade e não afetam a maneira como o programa funciona.

O bichinho realmente parece que faz mágica… O número pode estar escrito de qualquer jeito que ele consegue colocar no formato correto para a discagem.. O melhor de tudo é que ele retira toda a sujeira do número em caso de números locais que estejam armazenados com o DDD.

Tela OperadoraDDD

Tela OperadoraDDD

Créditos

Programa criado e implementado por Denis Souza

Quem quiser baixar é só apontar para o barcode abaixo ou procurar no seu android market.

Categorias:Sem categoria

Alguém poderia tirar uma foto para não perdermos estas anotações!

30 de novembro de 2010 Deixe um comentário

Fonte: corbisimages.com

Quem nunca finalizou uma reunião de trabalho com esta celebre frase?

Na sua grande maioria, uma pessoa puxa o telefone celular do bolso, bate uma foto e posteriormente envia para o grupo. E qual o problema nisso tudo? Bem… seria super interessante se a pessoa responsável por capturar a fotografia otimizasse ela para o consumo antes de enviar para os demais colegas. E onde fica a produtividade disso tudo? Ninguém faria isso!

E se tivéssemos um programinha no celular para fazer todo este trabalho chato e improdutivo? Continuando a série de posts sobre aplicações android apresento a vocês o CamScanner.

O CamScanner foi desenvolvido para possibilitar o registro de anotações e captura de documentos de forma otimizada. O processo é super simples: – bastar capturar uma fotografia( a partir do próprio programa) e ele se encarrega de processar e enviar para as pessoas desejadas o resultado. O CamScanner é capaz de detectar um quadro branco por exemplo e recortar apenas o seu conteúdo automaticamente. Ele também aplica algoritmos de processamento de imagem para tornar a anotação mais legível e limpa e também pode transformar o resultado de todas as suas capturas em um PDF.

No final basta apenas informar qual meio você quer enviar o documento(sms, email e etc) e pronto em alguns segundos você consegue realizar todas as atividades.

Para quem quiser experimentar segue o código de barras para baixar a aplicação no Android Market. Existe uma versão gratuita(lite version)  com todas as principais funcionalidades disponíveis.

Fonte: Android Market

Categorias:android

Alô alô gtalk!!

28 de novembro de 2010 Deixe um comentário

Inaugurando meus posts sobre Android vou propagar uma dica muito importante que com toda certeza muitos nem sabiam que era possível.

Estava pesquisando uma forma de conversar com meus contatos via chamada de voz direto do meu android phone.. Mas minhas exigências não paravam por ai. Eu teria que ter um programa onde fosse possível agregar meus contatos do MSN, GTALK, SKYPE, AIM , GTALK e meu SIP interno da empresa. Ah! Não poderia faltar o requisito: OPENSOURCE…

Se vocês ficaram interessados na funcionalidade quando eu mencionei no primeiro paragrafo deste post já devem ter ficado tristes porque com tantas exigências, ainda mais sendo Android, não teremos um programa para isso. No máximo devem estar pensando que eu baixei um programa para cada rede de contato e estou feito louco explodindo o multitask do meu celular.

Mas eu encontrei! E o nome dele é Fring. Além de realizar todos os meus desejos que mencionei acima ele ainda me deu de brinde chamadas por audio/vídeo para todas essas plataformas e sem a limitação do facetime da apple onde somente é possível realizar as chamadas por vídeo via conexão wifi.

Como o Fring trabalha ?

Realizei diversos testes com ele e funcionou perfeitamente, mesmo com a limitação de velocidade do meu pacote de dados (300 kbps) consegui obter ótimos resultados. E caso você tenha alguma infra de voip na empresa ou em casa ele também é um cliente SIP. Fica a dica para quem quiser tentar.

Latinoware 2010

27 de novembro de 2010 Deixe um comentário

Aconteceu nos dias 10, 11 e 12 de novembro de 2010 no PTI(Parque Tecnológico de Itaipu) a tradicional Conferência Latino Americana de Software Livre,  para os íntimos LATINOWARE(http://www.latinoware.org).

Entrada Latinoware 2010

A área de geoprocessamento e software livre(FOSS4GIS), este ano com uma trilha dedicada,  foi possível notar um destaque maior dentro do evento o que atraiu diversos entusiastas e especialistas da área. Foram tantas palestras e mini cursos sobre geo que restou muito pouco tempo livre para assistir aos outros temas.

Depois de assistir a diversas palestras pude observar que a palavra chave deste ano foi a PRODUTIVIDADE. Efetivamente esta preocupação tem sido tema central das discussões das comunidades de FOSS4GIS que após construir e tornar possível a adoção de software livre na área, amadurece para fornecer meios que tornem o processo de desenvolvimento mais ágil e produtivo. Neste post irei destacar as principais apresentações e seus respectivos links para os slides.

Iniciando os trabalhos do primeiro dia, tivemos o Robert Anderson de Aracaju que apresentou a palestra OL4JSF: Facilitando o desenvolvimento de aplicações geoespaciais em plataforma JEE. Desenvolvedores geojava sabem o quanto é áspero o desenvolvimento de interfaces geo utilizando OpenLayers e JSF.

Robert Anderson - OL4JSF

A proposta principal da bibliotecaOL4JSF(https://ol4jsf.dev.java.net/) é integrar o melhor das duas tecnologias através do modelo de componentes JSF. Apresentação de mapas na web em poucas linhas de código, palheta de componentes, assistente de código, editor visual, plugins para netbeans e eclipse convenceu a platéia do poder da biblioteca. Link para a palestra

Na sequência tivemos a palestra internacional do Gabriel Roldan da OpenGeo.org sobre a plataforma para as construção de infra-estruturas de dados espaciais(IDE) intitulada Geonode.org .

Gabriel Roldan - Geonode

Gabriel fez uma introdução muito precisa sobre o tema onde abordou diversos exemplos práticos de como deve ser uma IDE de verdade. Na sequência apresentou as principais features presentes na primeira versão da plataforma e finalizou mostrando a grande inovação da ferramenta ao utilizar a dinâmica das redes sociais e cooperativismo como meio de sustentabilidade da solução. Link para a palestra

No segundo dia tive a feliz experiência de ministrar um minicurso com a participação do Robert Anderson do OL4JSF. Entitulado de geodojo o minicurso teve o pretensioso objetivo de construir uma aplicação completa webgis utilizado o que há de mais moderno e atualizado no mercado corporativo.

Rafael Soto - Geodojo

Postgis, HibernateSpatial, OL4JSF, Geoserver, JEE6 e integrações com redes sociais fizeram parte do elenco de tecnologias aplicadas no curso. O minicurso ainda trouxe uma inovação ao evento e utilizou o formato de sessões de coding dojo para enriquecer a dinâmica de participação da platéia. Link para o material do minicurso e Link para o código fonte

 

Tuma Geodojo

Benício Junior - Cake Php e Openlayers

No período da tarde tivemos casa cheia para a apresentação do Benício Junior da Bahia que trouxe como temário a plataforma cake php para o desenvolvimento ágil de aplicações geo para web. Através de uma abordagem descontraída e totalmente hands-on, Benício apresentou enumeras estratégias de integração para fazer com o que o mundo cake php converse com as bibliotecas geo e bancos de dados geográficos. Ao final o mesmo presenteou a plateia com uma aplicação completa feita exclusivamente para o evento onde foi possível ter a sensação do resultado final do que foi teorizado na sua palestra. Link para a palestra

Plateia

No ultimo dia do evento destacamos a apresentação do Edmar Moreti pai do software público brasileiro para geoprocessamento na web I3GEO. Edmar apresentou em suma as principais features incluídas na nova versão do I3GEO além é claro de tirar diversas dúvidas sobre a ferramenta.

Edmar Moretti - I3geo

Encerrando o bloco de geo com casa cheia, tivemos a apresentação do programa RedeJovem do rio de janeiro com o sistema WikiMapa. O projeto é um Mapa virtual georreferenciado de ações e ativos, alimentado de forma colaborativa pelos mais diversos participantes, por meio do telefone celular ou internet a apresentação abordou as características sociais e operacionais.

RedeJovem - WikiMapa

O resultado do evento foi bastante positivo principalmente pelo fato do teor democrático das palestras terem atraído um público de iniciantes e até mesmo pessoas que nunca tiveram contato com a área. O próximo latinoware já tem data marcada e esperamos um novo convite da organização para aumentarmos a quantidade e qualidade das palestras.

 

Tux Itaipu

Rodando aplicações windows no mac!

1 de maio de 2010 1 comentário

Olá a todos!

Esta semana precisei rodar uma aplicação windows bem simples no meu mac. Logo veio a dúvida. “Será que para aplicações deste tipo não existe uma solução tipo a do linux chamada wine que rode no macosx?”. A resposta é sim!!!

Não irei fazer muitos comentários sobre ela, apenas deixarei o link para que vocês mesmos tirem as conclusões.

http://winebottler.kronenberg.org/

Abraços e até a próxima

Categorias:Sem categoria

Saindo do forno! OpenLayers 2.9

22 de abril de 2010 Deixe um comentário

Olá a todos!

Foi lançada a versão 2.9 do OpenLayers com muitas correções e novas features.
Agora é possível estilizar o visual de todos os componentes via css o que antes ficava impraticavel pelo fato de alguns componentes possuirem seus estilos atrelados ao código.
Foi adicionada a opção de refresh para as camadas onde é possível adicionar um intervalo de tempo para que a mesma fique se atualizando.
Um novo componente de edição foi incorporado para facilitar ações que antes não eram possíveis como rotacionar feições e modificar a escala de tamanho.

A lista completa das modificações e correções presentes na release podem ser encontradas no link abaixo:

http://trac.openlayers.org/wiki/Release/2.9/Notes

Categorias:Sem categoria

Google Summer Code 2010

6 de abril de 2010 Deixe um comentário

Estão abertas as inscrições para participação no evento google summer code 2010. Para quem não conhece é um dos maiores eventos globais das comunidades e projetos em software livre organizado pelo google. Durante o período de 3 meses, desenvolvedores entusiasta participam de pequenos projetos com o intuito de resolver assuntos relacionados a um determinado projeto. Durante o evento, os desenvolvedores são acompanhados por tutores, representados pelos desenvolvedores oficiais(commiters) dos projetos.

Na área de gis a fundação osgeo coordena uma lista de atividades a serem desenvolvidas nos projetos mantidos pela mesma durante o google summer code. A listagem das idéias de projetos está disponível no wiki da fundação. Os participantes tem até o dia 9 de abril para efetuar a sua inscrição. O resultado sai no dia 26 de abril e o inicio das atividades 24 de maio.

O projeto google summer code é uma excelente oportunidade para os desenvolvedores mostrarem os seus talentos interagindo com os representantes do seu projeto favorito.

Categorias:Tutorial Tags:,

css nos mapinhas!

5 de abril de 2010 Deixe um comentário

Uma das features mais criticadas pelos usuário do servidor de mapas geoserver é a dificuldades em se trabalhar com o formato SLD para estilizar os seus  mapas. Por utilizar o formato xml o padrão SLD é bastante verboso possuindo uma estrutura descritiva de alta complexidade dificultando assim o seu entendimento principalmente por parte dos designers responsáveis pela estilização. A partir destas dificuldades foi implementada uma extensão para o geoserver que permite definir estilos a partir de uma sintax css.

Abaixo segue um exemplo do nível de simplicação atingido pelo novo formato

a) Formato SLD

<?xml version="1.0" encoding="UTF-8"?>
<StyledLayerDescriptor version="1.0.0"
  xsi:schemaLocation="http://www.opengis.net/sld StyledLayerDescriptor.xsd"
  xmlns="http://www.opengis.net/sld"
  xmlns:ogc="http://www.opengis.net/ogc"
  xmlns:xlink="http://www.w3.org/1999/xlink"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <NamedLayer>
    <Name>Simple Roads</Name>
    <UserStyle>
      <Title>Default Styler for simple road segments</Title>
      <Abstract>Light red line, 2px wide</Abstract>
      <FeatureTypeStyle>
        <Rule>
          <Title>Roads</Title>
          <LineSymbolizer>
            <Stroke>
              <CssParameter name="stroke">
                <ogc:Literal>#AA3333</ogc:Literal>
              </CssParameter>
              <CssParameter name="stroke-width">
                <ogc:Literal>2</ogc:Literal>
              </CssParameter>
            </Stroke>
          </LineSymbolizer>
        </Rule>
      </FeatureTypeStyle>
    </UserStyle>
  </NamedLayer>
</StyledLayerDescriptor>

b) O equivalente em CSS

/* @title Default styler for simple road segments
 * @abstract Light red line, 2px wide
 */
* {
  stroke: #AA3333;
  stroke-width: 2px;
}

A nova extensão pode ser baixada para a versão 2.0.0 ou superior. O tutorial de instalação está disponível também para ser baixado. As instruções para utilização foram incorporadas ao tutorial do geoserver na seção CSS.

Este tipo de atitude tem como principal objetivo aumentar a sinergia entre o mundo dos padrões GISWEB e os padrões da web tradicional trazendo perfis como exemplo os designers para dentro dos projetos em GIS com uma curva de aprendizado bastante reduzida.

Fonte: blog geoserver

Categorias:Sem categoria

Tutorial Controle de Versão Distribuído: GIT – Parte 2

29 de março de 2010 Deixe um comentário

No último post  da série controle de versão distribuído com GIT, falamos sobre a filosofia dos controles de versões e as modificações na forma de pensar e trabalhar a partir do git. Neste post será feita uma abordagem mais técnica apresentando o processo de instalação e as primeiras interações com o ambiente git.

Instalação

O git possui pacotes de instalação para diversas plataformas. Podemos instalar o git nos principais sistemas operacionais de duas formas: Utilizando um pacote de instalação pré-compilado para uma determinada plataforma e a segunda obtendo o código fonte e efetuando a compilação. Considero a primeira opção a mais prática aconselhando utilizar o processo de compilação apenas para quando se queira instalar uma versão em especifico que não tenha um pacote compilador.

Para este tutorial, iremos apresentar as instalações nas principais plataformas de mercado (linux, mac os e windows).

Instalando no linux

A forma de instalação no linux vai depender apenas de qual gerenciador de pacotes você está utilizando. O nome do pacote de instalação do git constuma se chamar git-core.

Se estiver utilizando distribuições baseadas no debian, utilizando o comando apt-get é possível rapidamente instalar.

$ sudo apt-get install git-core

Para os usuário de distros baseadas na estrutura fedora, pode-se utilizar o comando yum.

$ sudo yum install git-core

Instalando no mac

No linux podemos instalar o git via instalador gráfico git4osx ou através do macports via linha de comando.

$ sudo port install git-core +svn +doc +bash_completion +gitweb

Note que não é preciso instalar todos os complementos.

Instalando no windows

A instalação no windows é bastante simplificada. O projeto msysGit possui um instalador com procedimentos fáceis para a instalação do git.

Você pode obter o instalador a partir da página do projeto no google code

$ http://code.google.com/p/msysgit

Primeiras configurações

Após concluída a instalação, vamos realizar algumas configurações básicas no git antes de partir para sua utilização. Você vai observar que todos os procedimentos feitos neste tutorial, são realizados na própria linha de comando do SO. Existem algumas ferramentas gráficas que podem atuar como GUI do git. Experimentei algumas e cheguei a conclusão que pela falta de maturidade e muitas vezes simplicidade do git, as vezes se torna mais prático utilizar o core na linha de comando.

Definindo a sua identificação

É importante definir o seu nome de usuário e email pois estas informações sempre serão anexadas aos comandos de commit feitos nos repositórios.

Para configurar estas variáveis, na linha de comando digite o seguinte:

$ git config --global user.name "Rafael Soto"
$ git config --global user.email rafael.soto@gmail.com

Definindo o editor de texto padrão

Sempre que o git precisar de uma entrada de dados do usuário o mesmo vai chamar o editor de texto padrão definido.

Para definir um editor de texto padrão, digite a linha de comando abaixo no seu console:

$ git config --global core.editor smultron

Definindo a ferramenta para realizar diff

Ferramentas de diff  são solicitadas pelo git em momentos de conflitos nas operações de merge. Apesar destes conflitos serem raros no git, é importante ter uma boa ferramenta gráfica definida para solucionar o problema da melhor forma possível. Abaixo segue a linha de comando para definir qual diff utilizar.

$ git config --global merge.tool vimdiff

Verificando as configurações

Você pode verificar todas as suas configurações executando o comando config –list

$ git config --list
user.name=Rafael Soto
user.email=rafael.soto@gmail.com
core.repositoryformatversion=0
filemode=true
bare=false
logallrefupdates=true
...

Iniciando os trabalhos no GIT

Repositórios

Para se criar ou obter um repositório git existem duas possíveis abordagens. A primeira utilizamos quando se deseja criar um novo repositório, neste caso de forma local criamos um novo repositório em branco ou um repositório a partir de um sistemas de arquivos existente. A segunda abordagem é feita através da importação de um repositório em uma máquina remota, no caso do git , chamamos este procedimento de clone.

Para iniciar o aprendizado dos comandos iniciais vamos trabalhar com a abordagem do repositório local. Em um outro momento iremos explorar a forma de trabalho publicando as ações em repositórios remotos através de um exemplo prático utilizando repositórios remotos como o git-hub.

Iniciando o repositório local

Inicialmente vamos criar uma pasta para o repositório

$ mkdir meurepo
$ cd meurepo

Logo em seguida vamos inicializar um novo repositório git a partir do diretório corrente

:/meurepo $ git init

Note que uma pasta .git foi criada no local onde o comando foi executado. Esta é a única pasta criada e utilizada pelo git dentro de todo o seu projeto. De uma forma simplificada, ele realiza a “mágica” de estruturar toda a base de versões do seu projeto nesta pasta. Pronto! Já temos o nosso repositório de controle de versões com todos os serviços fornecidos pelo git disponíveis de forma local.

Executando operações no repositório

Vamos iniciar os trabalhos criando 2 arquivos para explicarmos exemplos de operações no repositório.

:/meurepo $ touch README
:/meurepo $ touch INSTALL

Arquivos criados no diretório de trabalho(working directory) podem estar em dois estados: Tracked ou Untracked. O estado Untracked corresponde a arquivos que foram recentemente criados e estão fora do repositório git. Estes arquivos são vistos pelo git como arquivos não presentes na ultima snapshot de versão e suas modificações não são tratadas pelo mesmo. Arquivos Tracked representam exatamente o oposto, são arquivos que já estão presentes no repositório e suas modificações são rastreadas pelo git.

Para verificar o estado de um arquivo no repositório utilizamos o comando git status, este comando apresenta a situação dos arquivos em relação ao repositório naquele dado momento. Como exemplo vamos verificar o status dos arquivos que acabamos de criar.

:/meurepo $ git status
# On branch master
#
# Initial commit
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#    INSTALL
#    README
nothing added to commit but untracked files present (use "git add" to track)

Os dois arquivos (README e INSTALL) se encontram no estado Untracked, ou seja, como apenas criamos eles e não adicionamos no repositório qualquer modificação feita nos mesmos não vai efetuar nenhuma mudança no estado do repositório.

Para que um arquivo seja inserido no repositório e na próxima versão, o mesmo precisa estar marcado como staged(o detalhamento deste fluxo de trabalho foi tratado na parte 1 deste tutorial). Para adicionar um arquivo na área staged utilizamos o comando git add <arquivo/diretorio>. Vamos adicionar no nosso exemplo apenas o arquivo INSTALL e em seguida vamos verificar o status do repositório.

:/meurepo $ git add INSTALL
:/meurepo $ git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
#   (use "git rm --cached <file>..." to unstage)
#
#    new file: INSTALL
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#    README

Note que o arquivo INSTALL passa a estar disponível para entrar no próximo commit do repositório e o seu estado é de novo arquivo (new file). Vale observar que o fato de termos adicionado o arquivo, o mesmo não se encontra no repositório apenas pronto para ser realizado o commit. Ao se utilizar o comando add o git congela a situação do arquivo e o deixa pronto para o commit, se modificarmos novamente este arquivo, teremos duas versões para este arquivo, uma que já está pronta para commit e outra que foi modificada depois de já ter marcado o arquivo para o commit. Como exemplo vamos modificar o mesmo arquivo INSTALL antes de realizar o commit e verificar o status do repositório ao final da operação.

:/meurepo $ git echo "CONTEUDO 1" >> INSTALL
:/meurepo $ git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
#   (use "git rm --cached <file>..." to unstage)
#
#    new file: INSTALL
#
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#
#    modified:   INSTALL
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#    README

Observe que agora temos o mesmo arquivo INSTALL com dois estados no repositório. O primeiro representa o arquivo recém criado que foi marcado a ser inserido no repositório e o segundo o arquivo que foi modificado. Mas se nem se quer efetuamos o commit porque o arquivo já possui estado modified ? Ao executar o comando add, o git congelou o estado do arquivo INSTALL e copiou ele para área de staged. A área de staged é o local onde fica armazenado todos os arquivos que irão compor o próximo commit, snapshot ou versão do repositório. Logo em seguida, fizemos uma alteração no arquivo inserindo um conteúdo nele. Como o estado do arquivo foi modificado e ficou diferente do estado do arquivo que foi congelado na área staged do repositório, o git já identificou a mudança e deixou o novo estado do arquivo marcado para inclusão. Podemos adicionar novamente o arquivo a área de staged e a versão que passa a contar do arquivo é a ultima modificada.

:/meurepo $ git add INSTALL
:/meurepo $ git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
#   (use "git rm --cached <file>..." to unstage)
#
#    new file: INSTALL
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#    README

O próximo passo seria gerar uma nova versão ou snapshot do projeto a partir da operação commit. O commit é a operação responsável por gerar uma nova versão do projeto a partir dos arquivos que foram marcados como staged. Ao executar o comando, o git efetua uma copia de toda a situação dos arquivos incluindo as modificações e as armazena na base de dados com uma versão.

:/meurepo $ git commit -m "Meu primeiro commit"
Created initial commit fd7a2de: Meu primeiro commit
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 INSTALL

:/meurepo $ git status
# On branch master
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#    README
nothing added to commit but untracked files present (use "git add" to track)

Podemos notar que após efetuar o commit, o arquivo que estava marcado como staged foi enviado para o repositório e a área de staged limpa, restando apenas o arquivo README que se encontra no estado Untracked por não ter sido adicionado ainda.
Mas podemos nos perguntar: Sempre que eu alterar um arquivo ou criar um novo preciso ficar adicionando o mesmo a área de stag? Para responder a esta pergunta o git implementou um parâmetro para o comando commit que permite pular a etapa de adicionar os arquivos a área de staged. Ao se utilizar do argumento -a o próprio git se encarrega de adicionar e realizar o commit automaticamente.
Note que o recurso de staged de arquivos permite um controle maior do que será feito no commit.


:/meurepo $ git add README
:/meurepo $ cat "CONTEUDO 2" >> README
:/meurepo $ git commit -a -m "Meu segundo commit"</pre>

Created commit 4a2fd75: Meu segundo commit
 1 files changed, 1 insertions(+), 0 deletions(-)

:/meurepo $ git status
# On branch master
nothing to commit (working directory clean)

Observe que adicionamos o arquivo README e logo em seguida modificamos ele. No momento em que realizamos o commit com o parametro -a, o git coloca todos os arquivos modicados na área de staged e depois submete eles para o repositório.

Abaixo segue o resumo do fluxo de trabalho apresentado

Para remover o arquivo do repositório utilizamos o comando git rm <arquivo> e em seguida a confirmação da ação com o commit. Note que enquanto o commit da remoção não for feito, o arquivo permanece existente no repositório na sua ultima versão. Podemos por exemplo restaurar ele para o diretório de trabalho. Como exemplo vamos remover o arquivo README.


:/meurepo $ git rm README
:/meurepo $ git status

# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#    deleted:    README
#

:/meurepo $ git commit -m "removendo arquivo README"</pre>
Created commit b1800eb: removendo arquivo README
 1 files changed, 0 insertions(+), 1 deletions(-)
 delete mode 100644 README

:/meurepo $ git status
# On branch master
nothing to commit (working directory clean)

Para mover ou renomear os arquivos do repositório utilizamos o comando git mv <arquivo origem> <arquivo destino> e em seguida a confirmação da ação com o commit.
Como exemplo vamos modificar o nome do arquivo INSTALL.

:/meurepo $ git mv INSTALL INSTALL.txt
:/meurepo $ git status

# On branch master
nothing to commit (working directory clean)
~/repositorios/meurepo$ git mv INSTALL INSTALL.txt
~/repositorios/meurepo$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#    renamed:    INSTALL -> INSTALL.txt
#

:/meurepo $ git commit -m "modificando nome arquivo INSTALL"

Created commit 27f465e: modificando nome arquivo INSTALL
 1 files changed, 0 insertions(+), 0 deletions(-)
 rename INSTALL => INSTALL.txt (100%)

:/meurepo $ git status
# On branch master
nothing to commit (working directory clean)

O fluxo executado acima corresponde ao fluxo abaixo


$ mv INSTALL INSTALL.txt
$ git rm INSTALL.txt
$ git add INSTALL
$ git commit -m ""

Chegamos ao final de mais um post. No próximo post iremos abordar o tema BRANCH, apresentando a forma de trabalho a partir de multiplas linhas de desenvolvimento.

Categorias:Tutorial Tags:,