Scalare Git in Team Usage

2

Negli ultimi 3 anni ho usato git quasi quotidianamente per tutti i miei progetti per animali domestici e al lavoro per piccoli progetti che non erano nel repository SVN globale. Il mio flusso di lavoro è abbastanza simile al famoso modello di branching git del link per riassumere:

  • Lavoro nei rami, un ramo per una funzione (non confondendo il bugfix con la nuova funzione, ecc.)

  • Mi impegno davvero molto spesso, spesso solo 2-5 righe, i commit più grandi sono di solito nuove funzioni ecc. Uso intensamente lo strumento di commit interattivo per organizzare semanticamente i miei commit (cioè mentre aggiusti una dichiarazione di importazione e qualcosa in un funzione, tendo a dividerlo in due quando le modifiche non sono correlate).

  • Infine, tendevo a usare git merge con l'opzione --no-ff , perché in un certo senso mi piace il grafico della cronologia delle diramazioni visive in gitk.

  • Mai usato davvero il rebasing (tranne per le correzioni)

Naturalmente questo flusso di lavoro non ha mai dovuto affrontare conflitti di fusione così seri come i team che lavorano sulla stessa base di codebase.

Ora ho letto qua e là, che alcuni progetti sono molto preoccupati di mantenere una storia "avanti veloce". Perché è così importante? Qual è la tua scelta in tal senso?

Posso immaginare che una storia "lineare" sia più facile da gestire quando si guardano le storie, ma: è anche utile avere la vera storia secondo me. La storia lineare senza fast-forward è più simile alle storie SVN forse, ma i miei commit git sono solitamente molto più piccoli del commit SVN medio, questi sono - penso - più paragonabili a un branch-merge in git (almeno il mio utilizzo ). Lavorare senza -no-ff farebbe un po 'di "ingombrare" la cronologia nel master (questa è la mia preoccupazione per le unioni rapide).

    
posta wirrbel 23.01.2014 - 08:32
fonte

1 risposta

3

Esistono alcune best practice comuni quando si lavora con un repository Git condiviso. Quelli che conosco sono questi:

  • One commit per feature
  • Nessun commit che interrompe la build
  • Prova a rebase di tutto sul ramo principale

Il modo in cui i diversi team lavorano può variare, quindi non credo che ci sia una sola risposta a questa domanda. Ad esempio, diversi team sceglieranno di essere meno severi nel rompere la build.

La cosa principale, secondo me, è cercare di lasciare sempre il repository in uno stato funzionante. I tuoi colleghi dovrebbero essere in grado di controllare qualsiasi commit e iniziare a lavorare da lì senza problemi di build o altri bug ovvi. Crea e prova tutto prima di eseguire il commit.

Per avere una buona panoramica di un repository condiviso è una buona idea aggiungere solo una bugfix o una nuova funzionalità per commit. Alcune funzionalità hanno bisogno di più commit ma, se possibile, i commit dovrebbero essere organizzati per sottofunzionalità (ad esempio un commit potrebbe aggiungere nuovi endpoint API necessari per la feature X, quindi un altro commit aggiunge la funzione effettiva nell'applicazione frontend). Questo aiuta anche a non interrompere la costruzione, poiché le funzionalità implementate a metà sono magneti per i bug.

Avere una cronologia di commit lineare semplifica molte cose ma non è richiesta. Penso che questo varierà molto tra i progetti. Alcuni probabilmente richiederanno di rebase sempre le tue modifiche sul suggerimento di master , mentre altri accetteranno i rami delle funzionalità. Avere una storia lineare aiuta immensamente a tenere traccia dei numeri di build / versione. Git descrive può essere utilizzato senza l'hash breve se si dispone di una cronologia lineare, per esempio.

    
risposta data 23.01.2014 - 09:09
fonte

Leggi altre domande sui tag