Domanda

In un lavoro precedente, ho trovato più facile da gestire e mantenere un ramo pre-release stabile (o principale, a seconda della configurazione) avendo ogni opera sviluppatore sul suo / la sua propria filiale. Abbiamo avuto solo una singola istanza di produzione, quindi non necessità di supportare più versioni delle stesse applicazioni.

Questo ramo "pre-release" è chiamato in questo modo perché c'era un altro ramo (principale) dove ci piacerebbe fare il nostro di sosta e di produzione rilasci da. I rami erano configurazione tale che solo il codice dal ramo pre-rilascio potrebbe essere fusa nel ramo rilascio. Queste unioni erano i nostri recensione codice di posti di blocco. La CI costruisce sono state fatte da questo ramo pre-release come bene e che era fino a ciascun sviluppatore di unione da "pre-release" per la propria filiale a questioni merging complesse migitage quando è stato completato lo sviluppo di quel corpo di lavoro.

Se ci fosse una necessità per gli sviluppatori di fare coppia e lavorare insieme un una determinata caratteristica, nient'altro che i loro permessi propri sportelli hanno impedito loro di lavorare con gli altri. Questo ha funzionato bene per la gestione di team distribuiti in cui gli individui all'interno di ogni squadra sono stati lavorando su / più funzioni distinte.

Con l'aiuto di frequente (1-2 volte a settimana) 30 minuti incontri aggiornare lo stato, noi, come una squadra, potrebbe decidere che cosa sarebbe andato in QA e cosa no per quel particolare il rilascio QA.

Questo sistema ha funzionato, ma trovo un sacco di risentimento per le filiali di sviluppo durante la ricerca su questo argomento. Sembra che ci sia un sacco di entusiasmo sulla funzione di repository locale di git. Eppure, sembra che sono solo modi diversi di affrontare gli stessi problemi. Non considerando i problemi di cross-rete che i repository locali di indirizzo, quali l'assegno di latenza e così via.

È stato utile?

Soluzione

Ci sono tre differenze principali:

  1. locali significa repository proprio questo: è locale al vostro sistema, e se sei mai trovato a bloccati su un'isola deserta senza connessione Internet, sarete ancora in grado di confermare le modifiche. Una delle cose migliori di Git è che non c'è bisogno di essere collegato al repository per essere in grado di sfruttare il sistema di controllo versione. Gli sviluppatori a volte funzionano in remoto, senza essere in grado di accedere al repository principale e che di solito può essere disordinato quando si dispone di un sistema come Subversion , Perforce , o un altro tipo di controllo di versione repository centralizzato sistema. Con Git e BitKeeper , si può facilmente lavorare offline.

  2. In una ramo sviluppatore situazione, che normalmente sono ramificazione dal integrazione ramo al sviluppatore ramo e la fusione di nuovo alla integrazione ramo. In Git, non si uniscono, ma le patch di invio e si può inviare le modifiche non solo per il Master repository , ma ad altri sviluppatori senza prima di inviare il cerotto al Master repository . Questo permette agli sviluppatori di lavorare insieme senza toccare il Master repository .

  3. In una sviluppatore / integrazione di installazione ramo, ramo sviluppatore è nel repository che significa che altri possano vederlo. In Git, i cambiamenti dello sviluppatore non sono disponibili fino a quando lo sviluppatore offre loro cambiamenti.

Altri suggerimenti

Un DVCS come Git o Mercurial introduce un flusso di lavoro di pubblicazione (push / pull), che è ortogonale alla ramificazione .

Ciò significa che:

  • , anche se tutti gli sviluppatori stanno lavorando sullo stesso ramo, possono farlo "privatamente" in proprio repo: fintanto che non pubblicano funzionano (cioè spinta a un pronti contro termine a monte), che comuni ramo è in realtà proprio. Possono tirare (recuperare + merge) regolarmente al fine di non discostarsi troppo dal lavoro di altri sullo stesso argomento, ma si spingeranno quando è pronto.

  • uno sviluppatore potrebbe anche non spingere la sua / il suo lavoro, ma un integratore può recuperare, da un repository upstream "integrazione", come molti ramo (con lo stesso nome), da come pronti contro termine di molti sviluppatori che le esigenze integrator a: ogni ramo sarà negozio nella repo di integrazione nel proprio spazio dei nomi (dev1/branch, dev2/branch, dev3/branch, ...)
    Da lì, l'integratore può guardare i commit filiale di ogni sviluppatore sta introducendo, e decidere di unire o meno le modifiche nella repo di integrazione.
    Nota: Questo è leggermente diverso in Mercurial, dal nome ramo hanno nomi in un namespace globale (s Vedere Jakub Narebski ' risposta su " Git e Mercurial - confrontare e contrapporre ", guardando il "opinione personale: personalmente ritengo che "rami denominati" ..." parte)

Quindi un git "repo locale" trasformare qualsiasi ramo in ramo di uno sviluppatore (che non impedisce uno sviluppatore per fare il suo / la sua propria filiale privata in cima chi proviene da un pronti contro termine comune).
sono disponibili per la pubblicazione attiva (spinta dallo sviluppatore) o la pubblicazione passivo (pull o fetch da un repo monte, senza intervento diretto da detto sviluppatore) quei rami


David W 's risposta (upvoted) rende più chiara è la differenza tra:

  • lavorando da un ramo di un nuovo ramo (che potrebbe essere legato a uno sviluppatore, anche se io preferisco rami legati a un'attività o un insieme di attività, al fine di isolare uno sforzo di sviluppo: vedere " Quando si deve diramare ")
  • lavorando da un ramo clonato da un pronti contro termine nel proprio repo: si può lavorare sulla stesso ramo, tranne che si tratta di un clonato (copia) di detto ramo da un pronti contro termine a monte
    . Se il repo sviluppatore non è accessibile da un integratore, allora sì, come dice David, "In Git, i cambiamenti dello sviluppatore non sono disponibili fino a quando lo sviluppatore offre loro cambiamenti.".
    Se repo dello sviluppatore è accessibile (anche attraverso un semplice " locale protocollo " come una rete azione), quindi le modifiche dello sviluppatore può essere tirato dal repo a valle ad un repo integrazione a monte)

Vedere anche " Descrivere il flusso di lavoro di utilizzare la versione controllo (VCS o DVCS) " un altro modo per contrastare la via centralizzata VCS di usare rami contro il modo decentrato VCS di utilizzare repository.

Se ha funzionato per voi, grande. Penso che si dovrebbe trovare che avrebbe funzionato ancora meglio con un DVCS, perché possono sostenere tutto quello che stai facendo ora e altro ancora.

Uno dei vantaggi di un repository locale su un ramo di sviluppo è che si può avere come molti rami che si desidera a livello locale. È possibile girare un rapido ramo per testare qualcosa siete curiosi di sapere. È possibile girare un ramo di migrazione di prova alla versione più recente di quella libreria che ami. Il tutto senza la necessità di "inquinare" il server centralizzato con roba che forse non dovrebbe mai vedere la luce del giorno.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top