Um colega meu disse-me que ele está pensando em fazer o nosso servidor CI para commits reverter essa falharam a construção, de modo a HEAD
nos master
é sempre estável (como em passar a construir pelo menos).
Essa é uma prática recomendada ou pode ser mais problemática do que simplesmente deixar de funcionar master
até que o desenvolvedor a conserte?
Meu pensamento é que a reversão do commit tornará mais complexa a tarefa de ler o commit e a correção (o desenvolvedor terá que reverter o reverso e, em seguida, confirmar a correção, o que também desorganizará o git log
) e devemos deixar o commit e confirmar o consertar. Embora eu veja algumas vantagens em ter master
estabilidade, essa reversão de comprometimento de falha não me convence.
editar: não importa se é master
ou qualquer outro ramo de desenvolvimento, mas a pergunta permanece a mesma: o sistema de IC deve reverter uma confirmação que falhou na compilação?
outra edição (longa): Ok, estamos usando git
de uma maneira estranha. Acreditamos que o conceito de ramificações vai contra o IC real, porque o comprometimento com uma ramificação o isola dos outros desenvolvedores e de suas alterações, e acrescenta tempo para você reintegrar sua ramificação e lidar com possíveis conflitos. Se todos se comprometerem com master
esses conflitos, eles serão reduzidos ao mínimo e cada confirmação será aprovada em todos os testes.
Obviamente, isso força você a empurrar apenas o estável (ou interrompe a construção) e a programar com mais cuidado para não quebrar a compatibilidade com versões anteriores ou alternar entre recursos ao introduzir novos recursos.
Existem trocas ao fazer o IC desta ou daquela maneira, mas isso está fora do escopo da questão (consulte a pergunta relacionada a isso). Se preferir, posso reformular a pergunta: uma pequena equipe de desenvolvedores trabalha em conjunto em um ramo de recursos. Se um desenvolvedor confirmar algo que interrompa a compilação para essa ramificação, o sistema de IC deve reverter a confirmação ou não?
master
para começar. É para isso que as ramificações de desenvolvimento e recursos são usadas. Essas mudanças ocorrem em algo como um ramo de integração, onde você pode testar se todos os novos recursos de vários desenvolvedores trabalharão juntos e somente se isso for testado poderá entrar no master. Ou pelo menos esse é um possível fluxo de trabalho.