Como ignorar arquivos no Git

Faz algum tempo que estamos usando o Git para fazer deploy nos projetos da GS Solutions e um dos cuidados que isso exige é manter os arquivos de configuração do servidor de produção intactos.

Como ignorar arquivos no Git?

.gitignore

O modo mais fácil de ignorar arquivos no repositório é através do gitignore. O gitignore é uma lista que ignora qualquer arquivo que ainda não foi acompanhado pelo repositório através do git add. Veja a documentação (en).

Quando um arquivo já foi adicionado ao sistema de tracking muitas pessoas acham que o gitignore não está funcionando. Na verdade você precisa remover o arquivo do índice para que repositório pare de monitorar aquele arquivo.

Como fazer usar o .gitignore para um arquivo que já foi commitado?

Se um arquivo já foi adicionado e commitado não adianta somente adicionar ele no seu .gitignore, você precisa primeiro remover ele do sistema de tracking do git. Para isso utilize o comando abaixo:

git rm --cached config.json

No exemplo abaixo o git vai remover o cache/tracking do arquivo config.json e se ele estiver no .gitignore do repositório ele não será mais indexado nos commits.

Como ignorar um arquivo do repositório no git

Para arquivos de configuração eu prefiro que eles estejam no tracking do git, pois eles são parte do projeto e devem estar no repositório. Mas apesar de estarem no repositório, não quero enviar para o repositório minhas alterações locais. Para isso podemos pedir para que o git considere que determinados arquivos não foram alterados alterando o índice do git manualmente.

Mantendo o exemplo do arquivo config.json vamos supor que ele não está no seu gitignore e você fez alterações para o ambiente de desenvolvimento e não quer correr o risco de commitar estas mudanças.

Diga para o git considerar que aquele arquivo não foi alterado com o seguinte comando:

git update-index --assume-unchanged config.json

Agora seu repositório vai considerar que este arquivo não foi alterado mesmo que você atualize ele inúmeras vezes. Se você precisa dar commit em alguma alteração no arquivo é só remover o status de “não alterado” deste arquivo no índice do repositório com a seguinte linha de código:

git update-index --no-assume-unchanged config.json

Para arquivos de configuração eu prefiro utilizar o –assume-unchanged. Deixo o .gitignore para arquivos de uploads do projetos, cache e demais arquivos que não fazem parte do projeto.

Como vocês lidam com arquivos de configuração no repositório? Deixe dicas nos comentários!

Palestra sobre Componetização de CSS e HTML (Front in Sampa 2013)

[http://www.youtube.com/watch?v=00NrHc7Vz4g]

Saiu o vídeo oficial da minha palestra no FrontInSampa 2013, sobre componetização de HTML e CSS e a polêmica sobre orientação a objetos com CSS.

E os slides:

[slideshare id=28678434&doc=componetizacaodecsscomcompass-131127102153-phpapp02]

E você usa componetização de CSS e HTML? Que ferramentas utiliza para isso?

Datas recursivas com PHP

Em um dos projetos que estou trabalhando eu precisei trabalhar com datas recursivas a partir de uma data inicial e de uma periodicidade. 

Datas no PHP

Não vou abordar a fundo como trabalhar com datas no PHP, apenas como adicionar determinado número de dias em uma data. Se você não tem ideia de como trabalhar com datas no PHP, recomendo começar pelo manual do PHP date() date(). 

Mas o conceito de recursividade é simples e vou explicar abaixo o funcionamento de cada passo para gerar datas repetidas com PHP.

Formatando a data de hoje

Primeiro, o básico de formatação de datas com PHP. Estou trabalhando com MySQL (date), portanto trabalho com a seguinte formatação.

date('Y-m-d');

O código acima vai retornar a data de hoje no formato ano-mes-dia.

Adicionar dias em uma data

Para dar início a recursividade a lógica é: tenho uma data e preciso saber qual será a data daqui X dias, e assim sucessivamente. Para adicionar dias a uma data usamos a função strtotime (veja o manual) do PHP junto com date. 

No exemplo abaixo o resultado deve ser a data formatada para exatamente daqui a 7 dias.

date('Y-m-d', strtotime(date('Y-m-d') . '+7 days'));

Recursividade de datas

Com estes 2 conceitos básicos sobre datas no PHP e um pouco de criatividade você consegue gerar datas recursivas no PHP

No exemplo abaixo, vou pegar as próximas 10 datas a partir de hoje, com uma periodicidade de 15 dias e colocar no array $myDates;

$lastDate = date('Y-m-d');
$myDates = array();
for ($x=0; $x<=10; $x++){
  $myDates[] = $lastDate;
  $lastDate = date('Y-m-d', strtotime($lastDate . ' +15 days'));
}

Recursividade de datas por período

Indo um pouco mais longe, você pode fazer seleções de datas dentro de janela de tempo usando quase a mesma lógica – mas deve tomar cuidado para não gerar loop infinito no seu código.

No exemplo abaixo, quero retornar todas as datas a partir de hoje, contando de 15 em 15 dias, até a data limite de 4 de Dezembro.

$lastDate = date('Y-m-d');
$endDate = '2014-12-04';
$myDates = array();
$finished = false;
while(!$finished){
  $lastDate = date('Y-m-d', strtotime($lastDate . ' +15 days'));
  if(strtotime($lastDate) > strtotime($endDate)){ $finished = true; break; }
  $myDates[] = $lastDate;
}

Usando a mesma verificação do $endDate você pode configurar uma data inicial e uma final, selecionando apenas as datas dentro deste período.

Talvez existe algum método mais eficiente de fazer isso. Quando pesquisei sobre o assunto encontrei a biblioteca When, mas ela não era exatamente o que eu queria. 

Se você precisa saber quando serão as próximas Quarta-Feiras que irão cair em um dia 2 de Fevereiro, é a biblioteca para você, vale conferir. Se você optar pela When tome cuidado com os loops infinitos que ela pode gerar.

Como abrir sublime no terminal (Linux) sem usar a sessão do terminal

Um dos problemas que eu não enfrentava com o Sublime no MacOS mas achava um pouco chato no Subline no Linux (Ubuntu) é que quando eu abria o Sublime pelo terminal no Ubuntu o aplicativo ficava atrelado a sessão do terminal – não posso usar o termina e se eu fechar o terminal, encerra o Sublime.

Como abrir o Sublime no terminal sem usar a sessão do terminal

O primeiro passo é remover o link simbólico em /user/bin/sublime (ou outro nome que você tenha utilizado para chamar o aplicativo pelo terminal).

rm /usr/bin/sublime

Feito isso vamos criar um pequeno shell que vai abrir o sublime sem estar atrelado a sessão do terminal:

Crie o arquivi /usr/bin/sublime com o seguinte conteúdo:

#!/bin/sh
nohup /opt/Sublime\ Text\ 2/sublime_text $1 >/dev/null 2>&1 &

Se necessário substitua /opt/Sublime\ Text\ 2/sublime_text pelo caminho onde você fez a instalação do Sublime Text.

Salve o arquivo e agora é só abrir o terminal e digitar “sublime” que você terá o aplicativo aberto e pode usar ou fechar o terminal, sem afetar o programa.

Customização de CSS com Compass

Trabalhar com componetização do HTML e CSS significa mais qualidade no código e muito mais produtividade no longo prazo.

Já escrevi algumas vezes aqui sobre este assunto, um dos que causaram bastante debate foi sobre CSS orientato a objetos – mais debate pela nomenclatura do que pela metodologia em si.

Este ano tive o prazer de palestrar no Front in Sampa 2013 e falei um pouco sobre componetização de HTML e CSS utilizando o Compass, uma ferramenta extraordinária que vale a pena ser estudada.

A popularização de frameworks como o Bootstrap tornaram mais fácil este tipo de metologia, pois já temos a segmentação da estrutura e trabalhar com a customização visual dos componentes fica bem mais fácil. Aproveitar este conhecimento de arquitetura de front-end destes projetos e trazer para dentro da sua empresa pode ajudar muito na produtividade da equipe.

Abaixo os slides da minha apresentação sobre este assunto:

[slideshare id=28678434&doc=componetizacaodecsscomcompass-131127102153-phpapp02]

E aí, vamos componetizar?