Você está na página 1de 8

AngularJS Git Commit Message

Convention s
Metas
Gerando CHANGELOG.md
Reconhecendo commits sem importância
Fornece mais informações ao navegar no histórico
Formato da mensagem de confirmação
Reverter
Cabeçalho da mensagem
Permitido <tipo>
Permitido <scope>
<subject> texto
Corpo da mensagem
Rodapé da mensagem
Quebrando mudanças
Problemas de referência
Exemplos

Metas
● permite gerar CHANGELOG.md por script
● permitir ignorar commits por git bisect (commits não
importantes como formatação
● fornecer melhores informações ao navegar no histórico

Gerando CHANGELOG.md
Usamos essas três seções no changelog: novos recursos ,
correções de bugs , mudanças significativas .
Esta lista pode ser gerada por script ao fazer um lançamento.
Junto com links para commits relacionados.
É claro que você pode editar esse log de alterações antes do
lançamento real, mas ele pode gerar o esqueleto.
Lista de todos os assuntos (primeiras linhas na mensagem de
confirmação) desde a última versão:
>> git log <última tag> HEAD --pretty = format:% s

Novos recursos nesta versão


>> git log <última versão> recurso HEAD --grep

Reconhecendo commits sem importância


Estas são alterações de formatação (adicionar / remover espaços /
linhas vazias, recuo), ponto e vírgula faltando, comentários.
Então, quando você está procurando por alguma mudança, você pode
ignorar esses commits - nenhuma mudança lógica dentro deste
commit.

Ao dividir ao meio, você pode ignorar:


>> git bisect skip $ (git rev-list --grep irrelevant <good
place> HEAD)

Fornece mais informações ao navegar no histórico


Isso adicionaria um tipo de informação de “contexto”.
Olhe para estas mensagens (retiradas dos últimos commits do
angular):
● Corrigir pequenos erros de digitação no widget de documentos (instruções
do tutorial)
● Teste de correção para o cenário. Aplicação - deve remover iframe
antigo
● docs - várias correções de documentos
● docs - removendo novas linhas extras
● Quebra de linha dupla substituída por simples quando o texto é obtido
do Google
● Adicionado suporte para propriedades na documentação
Todas essas mensagens tentam especificar onde está a mudança.
Mas eles não compartilham nenhuma convenção ...

Veja estas mensagens:


● corrigir remoção de comentários
● consertando links quebrados
● Um pouco de refatoração
● Verifique se os links existem e lance uma exceção
● Corrigir a inclusão do mapa do site (para funcionar em linux com
diferenciação de maiúsculas e minúsculas)
Você consegue adivinhar o que está dentro? Essas mensagens
perdem a especificação de local ...
Então, talvez algo como partes do código: docs , docs-parser ,
compiler , scenery-runner , ...

Eu sei, você pode encontrar essas informações verificando quais


arquivos foram alterados, mas isso é lento. E ao olhar no
histórico do git posso ver que todos nós tentamos especificar o
local, faltando apenas a convenção.
F ormat da mensagem de commit
<tipo> (<escopo>): <assunto>
<LINHA EM BRANCO>
<body>
<LINHA EM BRANCO>
<footer>

Qualquer linha da mensagem de confirmação não pode ter mais de


100 caracteres ! Isso permite que a mensagem seja mais fácil de
ler no github, bem como em várias ferramentas git.

Uma mensagem de confirmação consiste em um cabeçalho, um corpo e


um rodapé, separados por uma linha em branco.

Reverter
Se o commit reverte um commit anterior, seu cabeçalho deve
começar com ` revert: `, seguido pelo cabeçalho do commit
revertido. No corpo, ele deve dizer: `This reverts commit
<hash> .`, onde o hash é o SHA do commit sendo revertido.

Cabeçalho da mensagem
O cabeçalho da mensagem é uma única linha que contém uma
descrição sucinta da mudança contendo um tipo , um escopo
opcional e um assunto .

Permitido <tipo>
Isso descreve o tipo de mudança que este commit está fornecendo.
● talento (recurso)
● correção (correção de bug)
● documentos (documentação)
● estilo (formatação, ponto e vírgula faltando, ...)
● refatorar
● teste (ao adicionar testes ausentes)
● tarefa (manter)

Permitido <scope>
O escopo pode ser qualquer coisa especificando o local da
mudança de confirmação. Por exemplo $ location , $ browser , $
compile , $ rootScop e , ng H ref , ngClick , ngView , etc ...
Você pode usar * se não houver um escopo mais adequado.

<subject> texto
Esta é uma breve descrição da mudança.
● use o tempo presente imperativo: “mudar” e não “mudar” nem
“mudar”
● não coloque a primeira letra em maiúscula
● sem ponto (.) No final

Corpo da mensagem
● assim como em <sujeito>, use imperativo, presente: “mudar”
e não “mudar” nem “mudar”
● inclui motivação para a mudança e contrastes com o
comportamento anterior

http://365git.tumblr.com/post/3308646748/writing-git-commit-
messages
http://tbaggery.com/2008/04/19/a-note-about-git-commit-
messages.html

Rodapé da mensagem

Quebrando mudanças

Todas as alterações de interrupção devem ser mencionadas como um


bloco de alteração de interrupção no rodapé, que deve começar com
a palavra INTERRUPÇÃO DE MUDANÇA: com um espaço ou duas novas
linhas. O resto da mensagem de confirmação é, então, a descrição
da mudança, justificativa e notas de migração.

QUEBRANDO A MUDANÇA: a definição das ligações de escopo isoladas mudou e


a opção injetar para a injeção do controlador de diretiva foi removida.

Para migrar o código, siga o exemplo abaixo:

Antes:

alcance: {
myAttr: 'attribute',
myBind: 'vincular',
myExpression: 'expression',
myEval: 'avaliar',
myAccessor: 'accessor'
}

Após:

alcance: {
myAttr: '@',
myBind: '@',
myExpression: '&',
// myEval - geralmente não é útil, mas nos casos em que a expressão pode ser
atribuída, você pode usar '='
myAccessor: '=' // no template da diretiva mude myAccessor () para myAccessor
}

O `inject` removido geralmente não era útil para diretivas, então não deveria haver
nenhum código usando-o.

Problemas de referência

Os bugs fechados devem ser listados em uma linha separada no


rodapé prefixada com a palavra-chave "Fecha" como esta:

Fecha # 234

ou no caso de vários problemas:

Fecha # 123, # 245, # 992

Exemplos

feat ($ browser): evento onUrlChange (popstate / hashchange /


polling)

Novo evento adicionado ao $ navegador:


- encaminhar evento popstate, se disponível
- encaminhar evento hashchange se popstate não estiver disponível
- fazer polling quando nem popstate nem hashchange disponível

Quebra $ browser.onHashChange, que foi removido (em vez disso, use


onUrlChange)
fix ($ compile): c uplo de testes de unidade para IE9

IEs mais antigos serializam html em letras maiúsculas, mas o IE9 não
...
Seria melhor esperar que não diferenciasse maiúsculas de minúsculas,
infelizmente o jasmim faz
não permitir o usuário regexps para expectativas de lançamento.

Fecha # 392
Breaks foo.bar api, foo.baz deve ser usado

feat (diretiva): ng: disabled, ng: checks, ng: multiple, ng:


readonly, ng: selected

Novas diretivas para vinculação adequada desses atributos em


navegadores mais antigos (IE).
Adicionada descrição correspondente, exemplos ao vivo e testes e2e.

Fecha # 351

style ($ location): um par de pontos e vírgulas ausentes

docs (guia): u pdated docs fixos do Google Docs

Alguns erros de digitação corrigidos:


- recuo
- batchLogbatchLog -> batchLog
- iniciar a verificação periódica
- faltando cinta

feat ($ compile): simplifique as ligações de escopo isoladas

Mudou as opções de ligação de escopo isolado para:


- @attr - associação de atributo (incluindo interpolação)
- = modelo - ligação de modelo direcional
- & expr - ligação de execução de expressão

Esta mudança simplifica a terminologia, bem como


número de opções disponíveis para o desenvolvedor. Isto
também suporta aliasing de nome local do pai.

QUEBRANDO A MUDANÇA: a definição das ligações do escopo de isolamento


mudou e
a opção injetar para a injeção do controlador de diretiva foi
removida.

Para migrar o código, siga o exemplo abaixo:

Antes:

alcance: {
myAttr: 'attribute',
myBind: 'vincular',
myExpression: 'expression',
myEval: 'avaliar',
myAccessor: 'accessor'
}

Após:

alcance: {
myAttr: '@',
myBind: '@',
myExpression: '&',
// myEval - geralmente não é útil, mas nos casos em que a expressão
pode ser atribuída, você pode usar '='
myAccessor: '=' // no template da diretiva mude myAccessor () para
myAccessor
}

O `inject` removido geralmente não era útil para diretivas, então não
deveria haver nenhum código usando-o.

Você também pode gostar