GitHub: cos’è e come si usa per lo sviluppo software
Fresco di acquisizione da parte di Microsoft, GitHub è il cuore di un servizio di hosting di repository Git, ovvero una gestione del codice sorgente basata su cloud… ma questo è solo l’inizio. GitHub implementa infatti anche funzionalità per la revisione del codice (richieste di pull, diff e richieste di revisione), gestione del progetto (incluso monitoraggio e assegnazione dei problemi), integrazioni con altri strumenti di sviluppo, gestione del team, documentazione e “social coding”.
Molto simile a una sorta di social network per sviluppatori, GitHub è un ambiente aperto in cui i programmatori possono condividere e collaborare liberamente (anche ad hoc) su codice open source. GitHub rende facile trovare codice utile, copiare repository per uso personale e inviare modifiche ai progetti di altri, diventando sede di praticamente ogni progetto open source di qualsiasi importanza.
Controllo della versione Git
Prima di poter capire cosa fa GitHub e come funziona, dobbiamo capire cos’è Git. Git è un sistema di controllo della versione distribuito originariamente scritto da Linus Torvalds nel 2005 per e con l’aiuto della comunità del kernel di Linux. Git è nato inizialmente come uno strumento da riga di comando, adattandosi alla sua origine nella comunità del kernel Linux. Potete ancora usare la riga di comando di Git se volete, ma non è più obbligatorio.
Al posto (o in aggiunta) della riga di comando, è infatti possibile utilizzare il client GitHub gratuito per Windows o Mac o qualsiasi altra GUI per Git o un editor di codice che si integri con Git. Tutte queste opzioni sono inizialmente più facili da usare rispetto alla riga di comando. La riga di comando Git è preinstallata sulla maggior parte dei sistemi Mac e Linux e supporta tutte le operazioni; le GUI in genere supportano un sottoinsieme di operazioni Git frequentemente utilizzato.
Git è diverso dai sistemi di controllo delle versioni precedenti come Subversion in quanto è distribuito piuttosto che centralizzato. È anche abbastanza veloce, soprattutto dal momento che la maggior parte delle operazioni avviene sul vostro repository locale. Tuttavia, l’utilizzo di Git aggiunge un livello di complessità. L’invio di codice al repository locale e l’invio di commit a un repository remoto sono passaggi separati. Quando i team dimenticano questo (o non gli è stato insegnato), si può arrivare a situazioni in cui diversi sviluppatori lavorano con basi di codice divergenti.
Un repository Git remoto può trovarsi su un server o su un altro computer dello sviluppatore e Ciò consente molti possibili flussi di lavoro per i team. Un flusso di lavoro comune prevede l’utilizzo di un repository server come repository “blessed”, al quale viene inviato solo codice verificato e ben testato, spesso tramite una richiesta pull emessa dal repository di uno sviluppatore.
GitHub Enterprise
GitHub.com è un servizio di cloud hosting in grado di gestire una serie di account di diverso tipo: account di sviluppatori gratuiti (solo repository pubblici) e a pagamento (7 dollari al mese), account team (9 dollari per utente al mese) e account aziendale (21 dollari per utente al mese).
Se volete eseguire GitHub Enterprise in locale o nella vostra istanza cloud su AWS, Microsoft Azure, Google Cloud Platform o IBM Cloud, potete farlo per lo stesso prezzo di 21 dollari al mese per utente come l’account aziendale in hosting. GitHub Enterprise aggiunge alcune funzionalità utili come la messaggistica in-app agli utenti e il provisioning degli accessi integrato con le directory LDAP, ma rinuncia allo SLA del 99,95% di GitHub.com per gli account aziendali ospitati.
GitHub contro Bitbucket
GitHub non è l’unico servizio Git avanzato in hosting e GitHub Enterprise non è l’unico prodotto locale per le aziende. Atlassian Bitbucket compete con entrambi, con prezzi leggermente inferiori e con un livello di team di cinque membri gratuito che include repository privati illimitati e l’uso di Pipeline Bitbucket per l’integrazione continua. GitHub rimane comunque un sito più popolare per i progetti open source e ha un bacino di sviluppatori open source molto più ampio, ma i prezzi di Bitbucket sono più favorevoli per le piccole startup.
GitHub vs GitLab
GitLab compete sia con GitHub sia con Bitbucket, sia in hosting, sia on-premises. In superficie GitLab sembra avere più funzionalità rispetto ai due rivali, ma la differenza rispetto a Bitbucket si assottiglia non poco se si considera Jira quando si valuta Bitbucket. GitLab offre gratuitamente funzionalità cloud per progetti open source, ma questa funzionalità aggiuntiva non compensa in realtà il fatto che la comunità di sviluppatori open source su GitHub sia molto più ampia.
GitHub Desktop
GitHub Desktop semplifica la gestione dei repository di GitHub.com e GitHub Enterprise. Anche se non implementa tutte le funzionalità della riga di comando di Git e della GUI web di GitHub, integra tutte le operazioni che farete quotidianamente dal vostro desktop mentre contribuite ai progetti. In uno scenario tipico clonerete repository da GitHub a GitHub Desktop, li sincronizzerete a seconda delle necessità, creerete branch per il vostro lavoro e occasionalmente ripristinerete uno o più commit.
Per lavorare con i repository per i quali non avete privilegi di commit e collaborazione, in genere si inizia a eseguire un fork del repository su GitHub e a clonarlo sul desktop. Quindi si aggiungono in GitHub Desktop tutti i branch necessari, si eseguono le modifiche del caso, si verifica il lavoro, si reinseriscono i commit nel repository remoto e infine si genera una richiesta di pull per il progetto principale.
Atom Editor
Potete utilizzare qualsiasi editor di programmazione per modificare il codice, incluso l’editor Atom di GitHub gratuito e open source per Windows, Mac e Linux che si integra perfettamente con GitHub e GitHub Desktop. È possibile aprire Atom da GitHub Desktop facendo clic con il pulsante destro del mouse sul repository che si desidera esplorare o modificare.
Atom viene fornito con circa 90 pacchetti, quattro temi dell’interfaccia utente e otto temi di sintassi. I pacchetti possono supportare linguaggi di programmazione specifici, come TypeScript, o aggiungere funzionalità come Hydrogen, un ambiente di coding interattivo che supporta Python, R, JavaScript e altri kernel di Jupyter. Atom si basa sull’integrazione con HTML, JavaScript, CSS e Node.js e viene seguito (così come GitHub Desktop) su Electron, un framework per la creazione di app multipiattaforma che utilizzano tecnologie web.
Progetti GitHub
I progetti software open source spesso hanno bisogno di ulteriori aiuti per rafforzare il controllo della qualità, pur accettando contributi esterni al core team dei committenti. Il bisogno di contributori è enorme, ma portare nuovi contributori nel progetto mantenendo l’integrità del codice base è un’impresa difficile e potenzialmente pericolosa. Allo stesso tempo, anche la necessità di feedback da parte degli utenti del progetto è importantissima.
GitHub ha una serie di meccanismi che possono aiutare a svolgere queste funzioni. Ad esempio, gli utenti possono aggiungere problematiche di vario genere al progetto su GitHub per segnalare bug o richiedere funzionalità aggiuntive. I project manager che lavorano con questi problemi possono generare elenchi di attività, assegnare problemi a contributori specifici, menzionare altri contributori interessati in modo che vengano informati delle modifiche e aggiungere etichette.
Per contribuire a un progetto, in pratica si inizia da un branch principale dell’argomento che contiene le modifiche apportate che si desidera aggiungere al branch di base del progetto e si inizializza una richiesta di pull dal branch principale. Altri contributori possono esaminare le modifiche proposte, aggiungere commenti di revisione, contribuire alla discussione di richiesta di pull e aggiungere i propri commit alla richiesta di pull.
Una volta che tutte le persone coinvolte sono soddisfatte delle modifiche proposte, un committer può unire la richiesta di pull. L’unione può conservare tutti i commit o riunire tutte le modifiche in un singolo commit. Se questa fusione genera conflitti, potete risolverli su GitHub o usando la linea di comando. Le revisioni del codice su GitHub consentono inoltre a un team distribuito di collaborare in modo asincrono.
Utili strumenti di GitHub per i revisori includono diff, la cronologia e blame view (un modo per visualizzare l’evoluzione di un file commit dopo commit). Le discussioni sul codice su GitHub finiscono nei commenti presentati in linea con le modifiche al codice. Se gli strumenti integrati non sono sufficienti per il vostro progetto, potete aggiungere strumenti e componenti aggiuntivi per la revisione del codice e per l’integrazione continua dal marketplace di GitHub.