Cosa significa git 'remote' e 'origin'?
Primo, guardiamo cosa sono i rami -
I rami sono facili, prendono meno spazio, permettono di provare nuove idee, isolare le caratteristiche, e forniscono flessibilità nella collaborazione. Il master è il ramo di default che viene creato e spesso chiamato "mainline" o "trunk" nei progetti aziendali. Questa linea è normalmente costruita per gli ambienti Dev e QA e talvolta per la produzione. In alternativa, alcune aziende preferiscono fare un taglio RC al master che poi costruisce in produzione e il master continua a costruire per gli ambienti Dev.
I blocchi nella figura sottostante rappresentano i commit e i numeri sono solo le prime 5 cifre dello SHA-1 associato a quel commit.
Diciamo che avete bisogno di sperimentare sull'algoritmo di ricerca del vostro sito web per renderlo più veloce. Allo stesso tempo, non volete rovinare la vostra attuale implementazione nel caso in cui il nuovo esperimento vada male. In questo caso, si crea un nuovo ramo e si lavora su di esso. Il master consiste ancora nel vostro codice originale testato e potete scegliere di unire il ramo "revisione della ricerca" al successo o semplicemente scartarlo. Bello, vero?
Ora, passando ai repository remoti o Remoti -
I Remoti permettono la collaborazione al progetto. Il repository remoto è quello ospitato su qualche server remoto all'interno della vostra organizzazione o su Github. Essenzialmente, non c'è una vera differenza tra il repository GIT sulla tua macchina locale e il repository git sul server remoto. Per ora, immagina solo che il server remoto stia eseguendo qualche software git che gli permette di comunicare con più client git allo stesso tempo.
Sei sul ramo master. Se copiate le vostre modifiche sul repository remoto (operazione push), esse saranno ora presenti sul repository remoto perché gli altri possano accedervi. Sul tuo locale però, viene creato un altro ramo chiamato origin/master che fa riferimento al ramo del server remoto. L'origin/master cerca sempre di rimanere aggiornato con il ramo del repository remoto.
Diciamo che qualche altro programmatore nel tuo team fa un commit al ramo remoto master, e tu hai bisogno di portare quelle modifiche giù nel nostro locale (operazione di fetch). Quando fai il fetch, git sincronizza le modifiche con il tuo origin/master. Non le porterà sul vostro ramo master, fino a quando non le unirete.
Oltre al fetch, c'è un'operazione di pull che esegue entrambe le operazioni di fetch e merge in una volta sola.
Nota che il master e origin/master non sono essenzialmente due rami diversi. Sono solo due puntatori che puntano a diversi commit.
Inoltre, è chiaro che il tuo codice non è accessibile agli altri sviluppatori anche se fai un commit, finché non lo spingi.