I grandi repository mercuriali soffrono di una "corsa di spinta"?


9

La lettura di alcuni "Perché un DVCS è migliore" risponde a diverse domande sui programmatori. Sembrano tutti dire che in generale, DVCS è migliore poiché non si ha una gara di commit in grandi progetti, IE commit, non aggiornati quindi aggiornamento, commit, nuovo non aggiornato, commit, ancora obsoleto, ecc.

DVCS limita questo con il concetto di push. Tuttavia, in progetti molto grandi non ci sarebbe una "gara di spinta", soprattutto alla fine della giornata? So che in Git questo è in qualche modo compensato dalla costante ramificazione di tutto, ma in Mercurial non si ramifica, si crea una nuova testa.

Problema che vedo

  1. L'utente tenta di spingere
  2. Scaduto (mercurial non ti consentirà di spingere se il tuo repository locale non è aggiornato), quindi tiri e unisci le modifiche locali
  3. L'utente tenta di spingere di nuovo, ma mentre stava unendo qualcun altro ha spinto, quindi non è più aggiornato
  4. Tirare e unire nuovamente
  5. Ancora obsoleto
  6. Ripetere

Suona familiare?

È un problema reale con repository mercuriali molto grandi e popolari? Che dire all'interno di un'azienda quando tutti fanno la loro ultima spinta della giornata?


chi non si ramifica in mercurial? hg branch myfeature; hg ci -m "Starting feature branch"; hg push --new-branch
Carson Myers,

@Carson In git i rami sono economici. In mercurial sono molto più permanenti. Generalmente ho sentito che in git si dirama per lavorare su una funzione, in mercurial si crea una nuova testa o si clona in una directory diversa.
TheLQ

bene puoi aggiungere un --close-branchquando commetti - e mercurial ha nomi di rami, non devi clonare in una nuova directory
Carson Myers,

@Carson Non sto dicendo che non puoi o che non sia possibile, sto solo dicendo che ho sempre sentito che la convenzione era di clonare o creare una nuova testa, non un ramo. La maggior parte dei repository mercuriali che ho visto hanno solo pochi rami mentre i repository git tendono ad avere un sacco
TheLQ

Non sono sicuro, non ho mai usato Git
Carson Myers il

Risposte:


8

Per quanto ne so, la maggior parte dei grandi progetti open source che utilizzano DVCS usano "richieste pull" invece di push, ovvero un utente richiede che il progetto venga ritirato dalla propria filiale e il prject può scegliere di eseguire queste richieste pull in qualsiasi ordine , se non del tutto. Questo elimina le esigenze della "gara di spinta", come l'hai chiamata.

In altre società non posso garantire il processo, ma dove lavoro questo non è un problema.

Vedi, quando stai lavorando su un caso, stai lavorando su un ramo dell'intero repository, quindi le tue richieste push passano a una versione remota del trunk principale. Quando si desidera integrare la modifica (terminata) nel trunk, caricare il trunk, tirare, unire, spingere.

Occasionalmente ( molto occasionalmente) due persone tentano di farlo allo stesso tempo (di solito a causa di qualche comunicazione errata). In questo caso chi "perde" dovrà solo ri-tirare, unire, spingere. Dato che non c'è fretta alle 17:00 per impegnarsi in un repository centrale, il problema che hai delineato non è proprio lì.

Questa è la bellezza del DVCS: la ramificazione è indolore, quindi tutti possono lavorare sul proprio ramo.

MODIFICARE

Oh, ho appena notato il tuo commento "In mercurial non si ramifica ...": Sì, lo fai. Non è necessario, ma poiché è così facile e i vantaggi di farlo superano di gran lunga il fatto di farlo, si tende a ramificare molto i repository.


Ho sempre sentito che cloni per lavorare su funzionalità sperimentali, non su branch. La maggior parte delle ragioni che ho sentito è che nei rami mercuriali sono molto più permanenti che in Git. Potrei sbagliarmi comunque
TheLQ

Questa è la cosa, per quanto riguarda mercurial un clone è un ramo, puoi ancora fare praticamente tutto ciò che puoi fare con una "testa" standard (e alcune altre cose!), Ma hai il lusso aggiunto del pull / spingere il livello di distanza dal bagagliaio. Non sono sicuro di cosa intendi per permanenza, quando hai finito con il tuo clone puoi semplicemente cancellarlo.
Ed James,

Come mai non c'è corsa alle 17:00?
Cem Catikkas,

Come ho detto, la maggior parte delle volte tutti lavorano nel proprio ramo (è molto improbabile che tu stia lavorando esattamente sullo stesso problema di un'altra persona), quindi mentre tutti spingono alla fine del giorno è in rami diversi. Inoltre, nel mio lavoro abbiamo tempo flessibile, quindi è più una corsa dalle 16 alle 18;)
Ed James,

1

No, non esiste una gara push perché il lavoro viene svolto nei rami dell'argomento . Un master unione gestisce la complessità (relativamente inferiore) della combinazione dei rami in un ramo di integrazione . Questo di solito viene fatto continuamente. Per ulteriori informazioni sui flussi di lavoro di controllo di versione distribuito, la prima fonte sarebbe bocca del cavallo: man gitworkflows, on-line qui . Flussi di lavoro Mercurial fanno uso ramificazione nonostante la tua richiesta e le tecniche sono simili.


L'OP sta facendo una distinzione su git e hg qui, ma la tua risposta è rivolta a git (il primo link è molto orientato a git, per esempio). È una risposta corretta (poiché l'interpretazione errata originale dell'OP della ramificazione in hg porta alla domanda stessa), ma vale la pena notare che è la stessa per hg.
Ed James,

@Ed Buon punto, aggiornato per chiarire che la risposta si applica sia a git che a mercurial.
Rein Henrichs,

vedi il repository git.git, è un buon esempio di unione usando DVCS. Ci sono molti punti di unione. Potrebbero esserci più di 10 filiali temporanee contemporaneamente prima di essere infine fuse nella filiale principale.
Linquize,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.