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!