Pergunta

Estamos pensando em mudar de um estilo de check-out/edição/check-in do sistema de controle de versão para o Subversion, e durante a avaliação descobrimos que quando você executa uma ação de atualização no TortoiseSVN (e presumivelmente em qualquer cliente Subversion?), se as alterações no repositório que precisam ser aplicadas aos arquivos que você está editando não causarem conflitos, eles serão mesclados automaticamente/silenciosamente.

Isto nos assusta um pouco, pois é possível que esta fusão, embora não produza nenhum erro de compilação, possa pelo menos introduzir alguns erros lógicos que podem não ser facilmente detectados.

Exemplo muito simples:Estou trabalhando em um método C#, alterando alguma lógica na última parte do método, e outra pessoa altera o valor para o qual uma variável é inicializada no início do método.A alteração da outra pessoa não está nas linhas de código nas quais estou trabalhando, portanto não haverá conflito;mas é possível alterar drasticamente a saída do método.

O que esperávamos que a situação fosse é que, se uma fusão precisasse ocorrer, os dois arquivos seriam mostrados e pelo menos uma opção simples de aceitar/rejeitar alteração seria apresentada, para que pelo menos estivéssemos cientes de que algo mudou e temos a opção de ver se isso afeta nosso código.

Existe uma maneira de fazer isso com o Subversion/TortoiseSVN?Ou estamos muito presos em nossos métodos atuais de trabalho e deveríamos apenas deixar que isso aconteça ...

Foi útil?

Solução

A melhor maneira de contornar isso é educar os desenvolvedores.Depois de fazer uma atualização no TortoiseSVN, ele mostra uma lista de arquivos afetados.Basta clicar duas vezes em cada arquivo para obter a diferença entre eles.Então você poderá ver o que mudou entre a sua versão e a versão mais recente do repositório.

Outras dicas

Está nas perguntas frequentes:Como posso evitar que o Subversion faça mesclagens automáticas?

  1. Em TortoiseSVN->Configurações->Geral->Arquivo de configuração do Subversion, clique no botão editar.
  2. Mudar o [helpers] seção adicionando

      diff-cmd = "C:\\false.bat"
    

    (observe a barra invertida dupla)

  3. Crie o arquivo C:\false.bat que contém duas linhas

      @type %9
      @exit 1
    

Aqui está um truque para o TortoiseSVN:

Como desativar a “mesclagem automática” no Subversion

O truque para svn.exe é definir a ferramenta svn external diff para um programa que falhará constantemente.

svn --diff-cmd=/bin/false

Se o programa diff externo falhar, o svn conclui que o conflito não pode ser resolvido e não o mesclaria.

Eu sugiro que você aprenda a trabalhar com o modelo natural do Subversion, se possível.Na prática, descobrimos que os conflitos são raros e o tipo de conflito lógico de que você fala é quase inexistente (não consigo me lembrar de nenhum caso nos últimos 4 anos em nosso repositório).

Os membros da equipe devem verificar as alterações na menor escala possível (mantendo a correção), em vez de acumular um dia inteiro de trabalho para apenas verificar uma vez.Isso reduzirá a possibilidade de pisar no trabalho de outra pessoa.

Se você está preocupado com uma mudança específica que está fazendo, o Subversion fornece uma bloqueio mecanismo para permitir que você evite outras alterações no arquivo.Veja o livro Vermelho capítulos sobre bloqueio.

É por isso que o teste automatizado (unidade) é uma parte fundamental do desenvolvimento de software distribuído.No exemplo que você deu, pelo menos um teste de unidade deve falhar no svn update e alertá-lo sobre o erro.

Lembre-se do que é Subversion:um sistema de controle de versão, não uma ferramenta de mesclagem de código que funciona perfeitamente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top