Il modello repository (remoto) condiviso è il modo più semplice per collaborare allo sviluppo di un progetto tramite Git. Esiste un singolo repository remoto usato da tutti i collaboratori per inviare e ricevere commit.
Vediamo un altro modello, promosso dal servizio GitHub, in cui esistono più repository remoti con diversi permessi per i collaboratori
Fork & Pull
In questo modello sono presenti due repository remoti:
- upstream è il repository originale che funge da “master copy” per tutti i collaboratori; da questo repository remoto i collaboratori possono recuperare i nuovi commit (fetch), ma non possono inviare direttamente nuovi commit
- origin è un repository remoto di proprietà del singolo collaboratore, che è stato clonato dal repository upstream; il collaboratore può inviare (push) e recuperare (fetch) commit da questo repository
Il repository locale sa quindi che esistono due diversi repository remoti a cui è collegato. Tali repository remoti, indicati come tracked repository, possono essere ispezionati e modificati tramite il comando git remote.
Il modello fork & pull è pensato per quelle situazioni di collaborazione in cui non è possibile o non è desiderabile dare accesso in scrittura al repository remoto principale a ogni sviluppatore, ma è comunque utile la presenza di un repository remoto in cui il collaboratore può salvare il suo lavoro ed eventualmente condividerlo con altri.
Il repository remoto personale viene chiamato “fork” e il maintainer del progetto originale potrà recuperare dal fork le eventuali modifiche per incorporarle nel progetto originale stesso tramite il comando git pull, indicando il repository fork come remote da cui recuperare le modifiche.
Allo stesso modo il proprietario del repository fork potrà recuperare tramite git pull i nuovi commit del progetto originali e incorporarli nel suo fork.