Na Mozilla, estamos principalmente rigorosos quanto ao recebimento de contribuições via git/GitHub. Além de exigir testes e reforçar a qualidade do código, um requisito básico para o envio de um commit (ou vários) é que a mensagem do commit comece com “bug #######”, que é uma referência ao bug do Bugzilla. A exigência da mensagem faz sentido, mas detesto voltar aos colaboradores e pedir que façam “a papelada” de alterar a mensagem de commit para que corresponda ao nosso padrão, por isso geralmente tento fazer a atualização para eles.


Recentemente, a MDN recebeu uma contribuição que atualizou o CKEditor e o fez por meio de aproximadamente 60 commits, nenhum dos quais fazia referência ao número do bug para a atualização do recurso. Eu queria muito fazer as atualizações das mensagens de commit para esse colaborador, mas queria fazer isso de forma automatizada – uma atualização em lote para me poupar o tempo de atualizar cada mensagem uma a uma. Bem-vindo ao filter-branch e --msg-filter!


Anexação a mensagens de confirmação


Para acrescentar texto a cada mensagem de confirmação em um determinado intervalo, o senhor executaria uma mensagem como:



git filter-branch --msg-filter 'echo "bug ###### - \c" && cat' master..HEAD


A combinação de filter-branch e --msg-filter permitirão que o senhor examine cada mensagem de confirmação. O trecho echo permite que o senhor crie a nova string. A última parte é o intervalo cujas mensagens de commit devem ser direcionadas – nesse caso, estou acrescentando o texto a cada commit no ramo de recursos.


O senhor também pode sed para conseguir isso:



git filter-branch -f --msg-filter 'sed "s/^/bug ###### - /"' master..HEAD


Anexar a mensagens de compromisso


O caso de anexar mensagens de confirmação pode ser quando o senhor deseja adicionar o(s) nome(s) do(s) revisor(es) à mensagem. O acréscimo é praticamente o mesmo:



git filter-branch -f --msg-filter 'cat && echo "[Reviewer Walsh]"' master..HEAD


A diferença aqui é a posição do cat comando. Todo o resto pode ser o mesmo.


Tenho uma relação de amor e ódio com o git – adoro o git porque é muito fácil para 90% das minhas necessidades, mas o odeio quando preciso dos outros 10%. Espero que esses exemplos o ajudem se o senhor se deparar com essa necessidade no futuro!