Eu não concordo com essa regra e concordo com o que Mason Wheeler disse. Eu gostaria gostaria de adicionar algumas ideias.
Eu tento me comprometer toda vez que tenho uma significativa mude para commit: isso pode ser várias vezes por dia se eu corrigir vários pequenos bugs, ou uma vez por semana, se eu estou trabalhando em um grande pedaço de software que não pode ser usado pelo resto do código de qualquer maneira significativa até atingir um estado consistente.
Além disso, eu interpreto confirmando como publicando uma revisão significativa que contribui com nova funcionalidade para a base de código. Eu acho que se deve tentar limpar o código antes de cometer para que outros desenvolvedores podem entender o significado e o propósito da mudança quando eles olham para o histórico de revisão. Quanto menos mudanças outros desenvolvedores ver na história, o melhor: quando eu olho para a história de revisão que eu quero para ver incrementos que adicionam alguma funcionalidade significativa; eu não estou interessado em cada pequena idéia que cada desenvolvedor tinha e queria experimentar antes que eles alcançou a solução.
Além disso, não acho que seja uma boa ideia usar o servidor SVN (ou qualquer sistema de controle de versão) como um recurso de backup para o qual o instantâneo atual do código é confirmado (desde que seja compilado): você pode usar um pendrive ou uma unidade USB externa ou um disco de rede para espelhar seu código atual para que ele não se perca se o seu computador quebra. Controle de revisão e backup de dados são dois diferentes coisas. Publicar uma revisão não é o mesmo que salvar um instantâneo do seu código.
Finalmente, acho que não deve ser um problema comprometer todos os dias e então (isto é, somente quando alguém está realmente satisfeito com o estado atual de o código) e evitar conflitos de mesclagem não é uma boa justificativa para cometer (também) com freqüência. Muitos conflitos de mesclagem acontecem quando pessoas diferentes trabalham nos mesmos arquivos ao mesmo tempo, o que é uma prática ruim (veja, por exemplo, este artigo , aponte 7). Os conflitos de mesclagem devem ser reduzidos dividindo um projeto em módulos com interfaces claras e com o menor número de dependências possível, e coordenando o trabalho dos desenvolvedores para que o código em que eles trabalham se sobreponha quanto possível.
Apenas meus 2 centavos.
EDITAR
Outra razão contra os comprometimentos prematuros que me veio à mente é que uma versão (muito) com bugs não pode ser testada. Se você está cometendo no tronco e sua equipe de teste está testando todos os dias, eles podem não ter versão testável por algumas horas (ou por um dia). Mesmo se você não tentar consertar o bug e Apenas reverta suas alterações, uma reconstrução pode levar algumas horas. Com, digamos cinco testadores trabalhando em sua equipe, você desperdiçou 5 x 2 = 10 horas de o tempo da equipe devido a inatividade. Aconteceu comigo uma vez, então eu realmente tento para evitar commits prematuros em nome de commit o mais rápido possível .