devdev / in the loop
Git Git

Guida al versioning con Git
Lavorare con i server remoti

Finora abbiamo parlato di Git come un sistema che funziona principalmente sulla nostra macchina. È vero però che Git è un sistema che offre il meglio di sé quando usiamo server remoti per gestire il nostro lavoro, magari da più postazioni. Ci vengono subito in mente due piattaforme principali si social coding: una è GitHub che è il regno dell’open source e l’altra è BitBucket che è sicuramente molto diffusa per quanto riguarda la gestione dei repository di lavoro privati. Queste due piattaforme offrono gratuitamente il primo approccio ad un sistema remoto per usare Git fin da subito, anche per sperimentare.

Ciò non toglie che quando lo riterrete necessario potrete installare Git su un server privato in tutta autonomia! Esistono molte altre aziende che offrono l’hosting Git, più o meno gratuito e con svariate funzionalità aggiuntive.

Quando Git è stato creato, oramai più di 10 anni fa, il suo scopo principale fu quello di ospitare lo sviluppo del kernel Linux, un progetto che unisce centinaia di sviluppatori da tutto il mondo. Oggi il progetto è hostato su GitHub. Abbiamo già visto come clonare un repository Git in una precedente lezione, ora vediamo come sincronizzare il nostro lavoro locale con il repository remoto.

 

Visualizzare i server remoti

Ogni repository può avere dei server remoti che fungono da sorgenti/destinazioni. Per visualizzare quali sono, basta eseguire il comando git remote -v :

$ git remote -v
origin	https://lucamurante@bitbucket.org/macrubato3.git (fetch)
origin	https://lucamurante@bitbucket.org/macrubato3.git (push)

Nel nostro caso, stiamo utilizzando un repository privato ospitato su BitBucket. Possiamo notare che i server hanno un nome (origin)  e un URL che può essere http o ssh a seconda del sistema. Sono inoltre divisi in (fetch)  e (push) . Quelli abilitati al push permettono l’invio di modifiche, mentre fetch significa che possiamo scaricare dati da quel server. I server remoti in Git servono come riferimento per le azioni che facciamo su quel repository, questo vuol dire che non siamo continuamente collegati ad essi: è il bello di Git!

Aggiungere o rimuovere un repository remoto

Per aggiungere una connessione ad un repository remoto, utilizziamo il comando

git remote add <nome> <url>

Il <nome> che diamo al server ci servirà per avere una scorciatoia per altri comandi, come quello per rimuovere un server:

git remote rm <nome>

Consiglio: spesso i sistemi di social coding come BitBucket forniscono questo comando già pronto da incollare ed eseguire.

git fetch

Questo comando scarica i commit dal server remoto senza intaccare il lavoro in locale. Quando eseguiamo git fetch , i commit remoti vengono salvati come un ramo remoto (remote branch) e non vanno ad intaccare i branch locali. Questo comando ci serve, nella maggior parte dei casi per guardare lo stato del progetto. Difatti, se volessimo integrare il lavoro remoto nel nostro repository locale, dovremmo eseguire un comune git merge . I rami remoti sono quindi un metodo sicuro che non intacca i nostri file in locale. Per scaricare tutti i rami remoti usiamo il comando

git fetch <remote>

In alternativa possiamo indicare esplicitamente un ramo per scaricare solo quello:

git fetch <remote> <ramo>

git pull

Fare il merge  di codice remoto nel repository locale è uno dei task più diffusi per chi lavora con Git in modo collaborativo. Abbiamo già visto git fetch , che può essere seguito da git merge . Il comando git pull  li unisce in un unico comando:

git pull <remote>

Scarica la copia remota del ramo attuale e ne effettua immediatamente il merge con quello locale. Questo è il modo principale per sincronizzare la copia locale del repository con quello generale remoto. È la base del social coding ed è il pattern di collaborazione più diffuso.

git push

Quando abbiamo fatto diversi commit e siamo pronti per caricare il nostro lavoro sul repository remoto, dobbiamo lanciare il comando git push. È un po’ la controparte del comando git fetch e va usato in modo analogo:

git push <remote> <ramo>

Questo trasferisce tutti i commit locali che ancora non sono presenti nel server remoto. Piccolo consiglio: se abbiamo creato dei tag, essi non vengono automaticamente spediti al repository remoto, ma dobbiamo farlo esplicitamente con l’opzione –tags:

git push <remote> --tags

 

if (weekend) {
    relax();
}
la nostra newsletter, ogni tanto.