Estou usando o Git há algum tempo e recentemente comecei a usá-lo para marcar meus lançamentos, para que eu pudesse acompanhar as alterações com mais facilidade e poder ver qual versão cada um de nossos clientes está executando (infelizmente, o código atualmente exige que cada cliente tenha sua própria cópia do site PHP; estou mudando isso, mas é lento).
De qualquer forma, estamos começando a ganhar impulso, achei que seria muito bom poder mostrar às pessoas o que mudou desde o último lançamento. O problema é que não tenho mantido um registro de alterações porque não tenho uma boa idéia de como fazê-lo. Nesse período em particular, posso executar o log e criar manualmente um, mas isso ficará cansativo muito rapidamente.
Tentei pesquisar no "git changelog" e "git manage changelog", mas não encontrei nada que realmente falasse sobre o fluxo de trabalho das alterações de código e como isso coincide com o changelog. No momento, estamos acompanhando o fluxo de trabalho de desenvolvimento de Rein Henrichs e eu adoraria algo que acompanhasse isso.
Há uma abordagem padrão que me falta, ou essa é uma área em que todos fazem suas próprias coisas?
Muito obrigado por seus comentários / respostas!
--graph
, que mostra visualmente em quais ramificações as confirmações estão.git log
saída para o changelog não faz sentido. Você precisa fazer um trabalho de filtragem e edição para ter um registro de alterações legível; caso contrário, por que você precisaria de um registro de alterações? Eu acho que você pode automatizar a geração de um changelog, mas por favor não faça uma cópia bruta dogit log
!Você pode usar algum sabor do git log para ajudá-lo:
Se você nomear suas ramificações de maneira adequada, para que uma mesclagem a ser exibida seja exibida como "Função de ramificação mesclada-foobar", você poderá reduzir as coisas mostrando apenas essa mensagem, e nem todos os pequenos commits que você mesclou, que juntos formam a característica:
Você pode aumentar isso com um script próprio, o que pode fazer coisas como remover os bits de "Filial mesclado", normalizar a formatação, etc. Em algum momento, é necessário escrevê-lo, é claro.
Em seguida, você pode criar uma nova seção para o log de alterações uma vez por versão:
e confirme isso na versão release.
Se o seu problema é que esses assuntos de submissão não são nada parecidos com o que você gostaria de colocar em um registro de alterações, você tem duas opções: continue fazendo tudo manualmente (e tente acompanhá-lo com mais regularidade em vez de brincar no momento da liberação) ou corrija seu estilo de mensagem de confirmação. Uma opção, se os sujeitos não o fizerem, seria colocar linhas como "change: added feature foobar" nos corpos das mensagens de confirmação, para que mais tarde você pudesse fazer algo como
git log --pretty=%B | grep ^change:
pegar apenas aquelas bits importantes das mensagens.Não sei ao certo quanto mais do que esse git poderia realmente ajudá-lo a criar seus changelogs. Talvez eu tenha interpretado mal o que você quer dizer com "gerenciar"?
fonte
AVISO LEGAL: Eu sou o autor do gitchangelog do qual falarei a seguir.
TL; DR: convém verificar o próprio changelog do gitchangelog ou a saída ascii que gerou a anterior.
Se você deseja gerar um log de alterações a partir do seu histórico do git, provavelmente precisará considerar:
Opcionalmente, você pode querer alguma categorização (coisas novas, alterações, correções) ...
Com tudo isso em mente, eu criei e usei o gitchangelog . Ele visa alavancar uma convenção de mensagens de confirmação do git para atingir todos os objetivos anteriores.
Ter uma convenção de mensagem de confirmação é obrigatório para criar um bom registro de alterações (com ou sem o uso
gitchangelog
).confirmar convenção de mensagem
A seguir, sugestões para o que pode ser útil pensar em adicionar suas mensagens de confirmação.
Convém separar aproximadamente seus commits em grandes seções:
Além disso, você pode marcar algumas confirmações:
Tente escrever sua mensagem de confirmação direcionando os usuários (funcionalidade) o mais rápido possível.
exemplo
Isso é padrão
git log --oneline
para mostrar como essas informações podem ser armazenadas:Então, se você percebeu, o formato que eu escolhi é:
Para ver um resultado de saída real, você pode olhar o final da página PyPI de gitchangelog
Para ver uma documentação completa da minha convenção de mensagens de confirmação, você pode ver o arquivo de referência gitchangelog.rc.reference
Como gerar um excelente log de alterações a partir disso
Então, é muito fácil criar um registro de alterações completo. Você pode criar seu próprio script rapidamente, ou usar
gitchangelog
.gitchangelog
irá gerar um changelog completo (com suporte a seções comoNew
,Fix
...) e é razoavelmente configurável para suas próprias convenções de confirmação. Ele suporta qualquer tipo de saída, graças a templates atravésMustache
,Mako templating
e tem um motor padrão legado escrito em python matéria; todos os três mecanismos atuais têm exemplos de como usá-los e podem gerar changelogs como o exibido na página PyPI do gitchangelog.Eu estou certo que você sabe que há uma abundância de outros
git log
parachangelog
ferramentas lá fora também.fonte
Um CHANGELOG mais direto ao ponto. Diga-me se você gosta.
fonte
--format
, como explicado no git-scm.com/docs/git-log#_pretty_formatsO
gitlog-to-changelog
script é útil para gerar um estilo GNUChangeLog
.Conforme mostrado por
gitlog-to-changelog --help
, você pode selecionar os commits usados para gerar umChangeLog
arquivo usando a opção--since
:ou passando argumentos adicionais depois
--
, que serão passados paragit-log
(chamados internamente porgitlog-to-changelog
):Por exemplo, estou usando a seguinte regra no nível superior
Makefile.am
de um dos meus projetos:Esta regra é usada no momento da liberação para atualizar
ChangeLog
com as últimas mensagens de confirmação ainda não gravadas. O arquivo.last-cl-gen
contém o identificador SHA1 da confirmação mais recente registradaChangeLog
e é armazenado no repositório Git.ChangeLog
também é gravado no repositório, para que possa ser editado (por exemplo, para corrigir erros de digitação) sem alterar as mensagens de confirmação.fonte
Como criar uma tag por versão é a melhor prática, convém particionar seu log de alterações por versão. Nesse caso, este comando pode ajudá-lo:
fonte
Para projetos GitHub , pode ser útil: github-changelog-generator
Ele gera o log de alterações a partir de questões fechadas de tags e solicitações pull mescladas.
Este CHANGELOG.md foi gerado por este script.
Exemplo:
fonte
Eu também fiz uma biblioteca para isso. É totalmente configurável com um modelo de bigode. Que pode:
Eu também fiz:
Mais detalhes no Github: https://github.com/tomasbjerre/git-changelog-lib
Na linha de comando:
Ou em Jenkins:
fonte
É o que eu gosto de usar. Ele recebe todas as confirmações desde a última tag.
cut
se livra do hash de confirmação. Se você usar números de ticket no início de suas mensagens de confirmação, elas serão agrupadassort
. Classificando Também ajuda se você prefixar certos commits comfix
,typo
, etc.fonte
Deixei o servidor de IC canalizar o seguinte em um arquivo nomeado
CHANGELOG
para cada novo release com a data definida no release-filename:fonte
Para um changelog no estilo GNU, criei a função
Com isso:
gnuc
e agora minha área de transferência contém algo como:
Então eu uso a área de transferência como ponto de partida para atualizar o ChangeLog.
Não é perfeito (por exemplo, os arquivos devem ser relativos ao caminho do ChangeLog, portanto,
python/py-symtab.c
sem,gdb/
desde que editarei ogdb/ChangeLog
), mas é um bom ponto de partida.Scripts mais avançados:
Porém, eu tenho que concordar com Tromey: duplicar dados de confirmação do git no ChangeLog é inútil.
Se você deseja fazer um changelog, faça um bom resumo do que está acontecendo, possivelmente conforme especificado em http://keepachangelog.com/
fonte
Baseado no bithavoc , lista o
last tag
atéHEAD
. Mas espero listar os logs entre 2 tags.Listar logs entre 2 tags.
Por exemplo, ele listará os logs de
v1.0.0
parav1.0.1
.fonte