Git non è soltanto uno strumento per il versioning ma anche una soluzione avanzata per lo sviluppo in ambito collaborativo. Da quest'ultimo punto di vista assumono un'importanza rilavante le procedure per la gestione dei repository remoti; sostanzialmente si tratta di risorse accessibili dalla Rete o da una piattaforma localizzata esternamente rispetto alla propria configurazione locale, l'utilizzatore avrà quindi la possibilità inviare e prelevare informazioni a e da server remoti, condividendo così gli stati di avanzamento di un progetto, aggiungendo nuovi repository, rinunciando a quelli non più utili così come amministrando i diversi rami e stabilendo i criteri per il tracciamento.
Visualizzazione dei server remoti
Il comando git remote
consente di ottenere una lista dei server remoti associati ad uno specifico progetto; a tal proposito è possibile fare riferimento ai repository clonati che dovrebbero presentare in output almeno un server remoto, cioè quello di provenienza, indicato dal DVCS come origin
. L'immagine seguente mostra il risultato del lancio di un comando git remote
operato a carico del progetto "MyWP" già implementato nei capitoli precedenti:
origin
è un'indicazione di massima riguardante il server remoto di default del progetto, nel caso in cui si vogliano ottenere maggiori dettagli relativamente alla provenienza di quest'ultimo si potrà utilizzare il parametro -v
che permetterà di elencare gli URL associati ad esso:
Come è possibile notare da quanto riportato nell'immagine precedente, lo stesso URL è stato elencato due volte, la prima per l'estrazione o recupero dei dati (fetch), sostanzialmente per la loro lettura, e la seconda per l'invio dei dati in condivisione al repository remoto (push).
Code Hosting dei repository remoti
L'istruzione git remote add
è un'estensione del comando git add
che consente di aggiungere repository in remoto, a tale istruzione vanno passati come argomenti il nome breve associato al progetto e l'URL del server remoto di destinazione. Fatto questo, la successiva lista prodotta dal lancio di git remote -v
dovrebbe notificare la presenza dei nuovi repository.
Anche nel caso dell'esempio proposto il code hosting di riferimento è quello della piattaforma GitHub che offre appunto i propri server remoti per il versioning collaborativo. Per quanto riguarda invece l'accesso alle informazioni sulla nuova risorsa, si noti come l'utilizzo del nome breve nell'istruzione git remote add
consenta di adottare il comando git fetch
, seguito dal nome del repository aggiunto, per visualizzare da locale i dati relativi al contenuto di quest'ultimo, senza dover specificare l'URL del server remoto ospitante.
Si noti poi come la prima esecuzione di git fetch
porterà al caricamento dei dati del progetto corrente non disponibili per l'utilizzatore che ha lanciato il comando, il ricorso immediatamente successivo alla medesima istruzione si risolverà plausibilmente in tempi di esecuzione nettamente più brevi e in un output meno verboso, questo per via del fatto che le differenze tra repository locale e remoto sono state annullate in precedenza.
Si faccia attenzione al fatto che git fetch
non ha il compito di unire le informazioni o i file di un repository remoto con il suo corrispondente locale, ma soltanto quello di scaricare dati in quest'ultimo; tale comportamento è dovuto al fatto che il repository remoto origin
viene aggiunto dal sistema nel momento in cui si clona un repository e non andrebbe confuso con il repository del progetto originale che vive, invece, di vita propria. Per chiarire meglio quanto esposto basterà lanciare l'istruzione git fetch origin
finalizzata a rendere disponibili le modifiche condivise in remoto a partire dalla clonazione o dall'aggiornamento di un progetto.
Per scaricare i dati dal server remoto utilizzato per la clonazione e unirli alla propria versione del progetto (merging), sarà invece necessario fare ricorso al comando git pull
, esso in pratica aggiorna il repository locale al commit più recente e potrà essere utilizzato a partire dalla directory corrente per recuperare e incorporare le modifiche effettuate sul server remoto.
Condivisione e verifica in remoto
Come esposto riguardo alla formulazione dei commit, la validazione delle modifiche apportate avverrà attraverso l'istruzione git commit -m "Messaggio"
, questa operazione però non determinerà automaticamente alcun trasferimento nel repository remoto, motivo per il quale non si avrà una vero e propria operazione di condivisione; per l'invio in remoto si dovrà invece utilizzare il comando git push
tramite la seguente sintassi che prevede il passaggio all'istruzione di due parametri: il nome del server remoto e il ramo di riferimento.
git push origin master
Naturalmente, se richiesto bisognerà sostituire master
con il ramo a cui si desidera inviare le modifiche.
A questo punto, chi volesse visualizzare ulteriori informazioni riguardanti un repository su server remoto (ad esempio l'elenco dei rami tracciati) potrà fare ricorso all'istruzione git remote show
, seguita dal nome del server remoto di proprio interesse.
L'output di git remote show
potrebbe essere più o meno articolato a seconda dello stato di un progetto, mostrando per esempio il ramo caricato quando viene lanciato git push
, così come i rami remoti non caricati o quelli presenti localmente ma cancellati dal server.
Rinomina e cancellazione in remoto
Come descritto in precedenza, ad ogni remotizzazione è possibile associare un nome breve per la risorsa coinvolta, volendo modificare questo dato si potrà utilizzare il comando git remote rename
seguito, nell'ordine, dal nome breve attuale e dal nuovo nome scelto.
$ git remote rename MyWP mW
Se invece si desidera cancellare la medesima risorsa in remoto, lo si potrà fare con il comando git remote rm
seguito dal nome di quest'ultima.
$ git remote rm mW
Sia in caso di rinomina che di cancellazione, l'esito positivo delle istruzioni utilizzate non porterà alla generazione di alcuna conferma visualizzabile a video, da notare inoltre che tali operazioni non coinvolgeranno anche le copie locali delle risorse riferite al progetto corrente.