Os grandes repositórios mercuriais sofrem com uma "corrida de empurrão"?

9

Lendo algumas respostas "Por que um DVCS é melhor", responde a várias perguntas sobre programadores. Parece que todos dizem que, em geral, o DVCS é melhor, já que você não tem uma corrida de consolidação em grandes projetos, IE commit, desatualizada. atualizar, confirmar, desatualizado novamente, confirmar, ainda desatualizado etc.

O DVCS limita isso com o conceito de push. No entanto, em projetos muito grandes, não haveria uma "corrida de empurrão", especialmente no final do dia? Eu sei que no Git isso é um pouco remediado pela constante ramificação de tudo, mas no Mercurial você não ramifica, cria uma nova cabeça.

Problema que vejo

  1. O usuário tenta enviar
  2. Desatualizado (o mercurial não permitirá que você pressione se o seu repositório local estiver desatualizado), para que você puxe e mescle suas alterações locais
  3. O usuário tenta enviar por push novamente, mas enquanto eles estavam mesclando alguém enviado por push, está desatualizado novamente
  4. Puxe e junte novamente
  5. Ainda desatualizado
  6. Repetir

Soa familiar?

Este é um problema real com repositórios mercuriais muito grandes e populares? E dentro de uma empresa, quando todo mundo faz o esforço final do dia?

TheLQ
fonte
quem não se ramifica no mercurial? hg branch myfeature; hg ci -m "Starting feature branch"; hg push --new-branch
Carson Myers
@Carson Nos ramos git são baratos. No mercurial, eles são muito mais permanentes. Geralmente, ouvi dizer que no git você ramifica para trabalhar em um recurso, no mercurial você cria um novo cabeçalho ou clone para um diretório diferente.
TheLQ
assim você pode adicionar um --close-branchao cometer - e mercurial nomeou ramos, você não tem que clone para um novo diretório
Carson Myers
@ Carson Não estou dizendo que você não pode ou que não é possível, estou apenas dizendo que sempre ouvi dizer que a convenção era clonar ou criar um novo chefe, não um ramo. A maioria dos repos mercuriais que eu vi só tem alguns ramos enquanto repos git tendem a ter um monte
TheLQ
Eu não tenho certeza, eu nunca usei git
Carson Myers

Respostas:

8

Até onde eu sei, a maioria dos grandes projetos de código-fonte aberto que usam o DVCS usa "solicitações pull" em vez de "push", ou seja, um usuário solicita que o projeto puxe de sua ramificação, e o prject pode optar por realizar essas solicitações pull em qualquer ordem , se houver. Isso elimina as necessidades da "corrida de empurrão", como você nomeou.

Em outras empresas, não posso garantir o processo, mas onde trabalho não é um problema.

Veja que, quando você está trabalhando em um caso, está trabalhando em uma ramificação de todo o repositório, então suas solicitações de envio vão para uma versão remota do tronco principal. Quando você deseja integrar sua alteração (concluída) ao tronco, você carrega o tronco, puxa, funde, empurra.

Ocasionalmente ( muito ocasionalmente), duas pessoas tentam fazer isso ao mesmo tempo (normalmente devido a alguma falta de comunicação). Nesse caso, quem "perder" terá apenas que puxar novamente, fundir, empurrar. Como não há pressa das 17h para se comprometer com um repositório central, o problema que você descreveu não está realmente lá.

Essa é a beleza do DVCS: a ramificação é indolor, para que todos possam trabalhar em sua própria ramificação.

EDITAR

Ah, acabei de notar seu comentário "No mercurial você não se ramifica ...": Sim, você sim. Você não precisa, mas como é muito fácil e os benefícios de fazê-lo superam o fato de não o fazerem muito, você tende a apenas repostar bastante.

Ed James
fonte
Eu sempre ouvi dizer que você clona para trabalhar em recursos experimentais, não em ramificações. A maioria das razões que ouvi é que nos ramos mercuriais são muito mais permanentes do que no Git. Eu posso estar errado no entanto
TheLQ
É isso, no que diz respeito ao mercurial, um clone é um ramo, você ainda pode fazer praticamente tudo o que pode fazer com uma "cabeça" padrão (e mais algumas coisas!), Mas você tem o luxo adicional da atração / empurre o nível de distância do tronco. Não sei ao certo o que você quer dizer com permanência. Quando terminar o clone, você pode excluí-lo.
Ed James
Como é que não há pressa às 17h?
Cem Catikkas 06/06/11
Como eu disse, na maioria das vezes todos estão trabalhando em seu próprio ramo (é improvável que você trabalhe exatamente no mesmo problema que outra pessoa), portanto, enquanto todo mundo pressiona no final do dia, é para ramos diferentes. Além disso, no meu trabalho, temos horários flexíveis por isso é mais de uma corrida quatro horas - seis horas;)
Ed James
1

Não, não existe uma corrida de empurrão porque o trabalho é feito em tópicos . Um mestre de mesclagem gerencia a complexidade (relativamente menor) de combinar as ramificações em uma ramificação de integração . Isso geralmente é feito continuamente. Para mais informações sobre fluxos de trabalho de controle de versão distribuído, a primeira fonte seria boca do cavalo: man gitworkflows, on-line aqui . Workflows Mercurial fazer uso ramificação apesar de sua reivindicação e as técnicas são semelhantes.

Rein Henrichs
fonte
O OP está fazendo uma distinção sobre git e hg aqui, mas sua resposta é direcionada para git (o primeiro link é muito orientado a git, por exemplo). É uma resposta correta (como a má interpretação original do OP de ramificação em hg leva à própria pergunta), mas vale a pena notar que é o mesmo para hg.
Ed James
@ Ed Bom ponto, atualizado para esclarecer que a resposta se aplica ao git e ao mercurial.
Rein Henrichs
veja o repositório git.git, é um bom exemplo de fusão usando o DVCS. Existem muitos pontos de mesclagem. Pode haver mais de 10 ramificações temporárias ao mesmo tempo antes de finalmente serem fundidas na ramificação principal.
linquize 26/07/12