Cos'è GitHub? Più del controllo della versione di Git nel cloud

GitHub è fondamentalmente un servizio di hosting di repository Git, ovvero un sistema di gestione del codice sorgente o di controllo della versione basato su cloud, ma questo è solo l'inizio. Inoltre, GitHub implementa funzionalità per la revisione del codice (richieste pull, differenze e richieste di revisione), la gestione dei progetti (inclusi il monitoraggio e l'assegnazione dei problemi), le integrazioni con altri strumenti per sviluppatori, la gestione del team, la documentazione e la "codifica sociale".

Qualcosa come un sito di social networking per programmatori, GitHub è un ambiente aperto in cui i programmatori possono condividere e collaborare liberamente (anche ad hoc) su codice open source. GitHub semplifica la ricerca di codice utile, la copia di repository per uso personale e l'invio di modifiche ai progetti di altri. Di conseguenza, GitHub è diventato la sede di praticamente tutti i progetti open source di qualsiasi importanza.

Ogni volta che voglio esplorare un progetto open source, inizio cercando il nome del progetto. Una volta trovato il sito web del progetto, cerco il suo link al repository di codice e nove volte su 10 finisco su GitHub.

Controllo della versione di Git

Prima di poter capire cosa fa GitHub e come funziona GitHub, dobbiamo capire 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 Linux. Non sono qui per venderti su Git, quindi ti risparmierò il discorso su quanto sia veloce, piccolo, flessibile e popolare, ma dovresti sapere che quando cloni un repository Git ("repo", in breve) ottieni l'intera cronologia delle versioni sul tuo computer, non solo un'istantanea da un ramo alla volta.

Git è iniziato come uno strumento da riga di comando, adattandosi alla sua origine nella comunità del kernel Linux. Puoi ancora usare la riga di comando Git, se lo desideri, ma non è necessario. Al posto o in aggiunta alla riga di comando, puoi utilizzare il client GitHub gratuito su Windows o Mac, o una qualsiasi delle altre GUI per Git o un editor di codice che si integra 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 utilizzato di frequente.

Git è diverso dai vecchi sistemi di controllo delle versioni come Subversion in quanto è distribuito piuttosto che centralizzato. È anche abbastanza veloce, soprattutto perché la maggior parte delle operazioni avviene sul tuo repository locale. Tuttavia, l'utilizzo di Git aggiunge un livello di complessità: il commit del codice nel tuo repository locale e il push dei tuoi commit in un repository remoto sono passaggi separati. Quando i team dimenticano questo (o non gli è stato insegnato a riguardo) può portare a situazioni in cui diversi sviluppatori stanno lavorando con basi di codice divergenti.

Un repository Git remoto può trovarsi su un server oppure può essere sul computer di un altro sviluppatore. Ciò consente molti flussi di lavoro possibili per i team. Un flusso di lavoro comune prevede l'utilizzo di un repository del server come repository "benedetto", a cui viene affidato solo il codice revisionato e ben testato, spesso tramite una richiesta pull emessa dal repository di uno sviluppatore.

Funzionalità GitHub

Ho già notato che GitHub è un server Git basato su cloud per l'hosting di codice e la codifica sociale e che implementa funzionalità per la revisione del codice (richieste pull, differenze e richieste di revisione), la gestione dei progetti (inclusi il monitoraggio e l'assegnazione dei problemi), integrazioni con altri strumenti di sviluppo, gestione del team e documentazione.

L'ultima innovazione nella codifica sociale di GitHub è rappresentata dai coautori del commit , che si ottiene aggiungendo uno o più trailer "co-authored-by" alla fine di un messaggio di commit. Questo meccanismo non influisce sul core del repository di per sé e non cambia l'aspetto del repository su Git semplice, ma su GitHub il chrome mostrerà più commit nella lista dei commit e darà a ciascun coautore il credito nel suo grafico del contributo.

Se lo desideri, puoi estendere GitHub utilizzando l'API GraphQL di GitHub. Si tratta di un miglioramento significativo rispetto all'API precedente di GitHub, basata su chiamate REST.

GitHub Enterprise

GitHub.com è un servizio di cloud hosting in grado di gestire una vasta gamma di tipi di account: account per sviluppatori gratuiti (solo repository pubblici) ea pagamento ($ 7 al mese), team ($ 9 per utente al mese) e aziende ($ 21 per utente al mese) ). Se desideri eseguire GitHub Enterprise in locale o nella tua istanza cloud su AWS, Microsoft Azure, Google Cloud Platform o IBM Cloud, puoi farlo allo stesso prezzo di $ 21 per utente al mese di un account aziendale ospitato. GitHub Enterprise aggiunge alcune funzioni utili, come la messaggistica in-app per gli utenti e il provisioning degli accessi integrato con le directory LDAP, ma rinuncia allo SLA del 99,95% di uptime di GitHub.com per gli account aziendali ospitati.

GitHub contro Bitbucket

GitHub non è l'unico servizio Git ottimizzato 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 gratuito di cinque membri che include repository privati ​​illimitati e l'uso di Bitbucket Pipelines per l'integrazione continua. GitHub è un sito più popolare per i progetti open source e ha un pool molto più ampio di sviluppatori open source. Il prezzo di Bitbucket è più favorevole per le piccole startup.

GitHub contro GitLab

GitLab compete sia con GitHub che con Bitbucket, sia in hosting che in locale. In superficie, GitLab sembra avere più funzionalità del ciclo di vita rispetto agli altri, ma la differenza da Atlassian per lo più scompare se includi Jira quando valuti Bitbucket. GitLab offre gratuitamente funzionalità cloud Gold-plan ai progetti open source, ma questa funzionalità aggiuntiva non compensa realmente la più ampia comunità di sviluppatori open source su GitHub.

GitHub Desktop

GitHub Desktop, mostrato di seguito, semplifica la gestione dei repository GitHub.com e GitHub Enterprise. Anche se non implementa tutte le funzionalità della riga di comando Git e della GUI web di GitHub, implementa tutte le operazioni che farai quotidianamente dal tuo desktop mentre contribuisci ai progetti. In genere, clonerai i repository da GitHub a GitHub Desktop, li sincronizzerai secondo necessità, creerai rami per il tuo lavoro, impegnerai il tuo lavoro e occasionalmente annullerai uno o più commit.

Per lavorare con i repository per i quali non hai privilegi di commit e collaborazione, in genere inizi con il fork del repository su GitHub e clonando il fork sul desktop. Quindi aggiungi tutti i rami di cui hai bisogno in GitHub Desktop, esegui il commit delle modifiche desiderate, testa il tuo lavoro, rimanda i commit al tuo repository biforcato remoto e infine generi una richiesta pull al progetto padre.

Puoi vedere il pulsante Pull Request in alto a destra dell'interfaccia di GitHub Desktop. Puoi anche vedere molti commit nel progetto Neo4j che erano fusioni di rami o richieste pull. Questo è tipico dei progetti open source con pochi commter e molti contributori.

Editor di Atom

Puoi utilizzare qualsiasi editor di programmazione che ti piace per modificare il codice, incluso l'editor Atom gratuito, open source e hackerabile di GitHub (mostrato sotto), che si integra bene con GitHub e GitHub Desktop. Puoi utilizzare Atom su MacOS, Windows o Linux. Puoi aprire Atom da GitHub Desktop facendo clic con il pulsante destro del mouse sul repository che desideri esplorare o modificare.

Atom viene fornito con circa 90 pacchetti, quattro temi dell'interfaccia utente e otto temi della sintassi. Puoi aggiungere uno qualsiasi dei 7.000 pacchetti e 2.000 temi alla tua installazione di Atom. I pacchetti possono supportare linguaggi di programmazione specifici, come TypeScript, o aggiungere funzionalità, come Hydrogen, un ambiente di codifica interattivo che supporta Python, R, JavaScript e altri kernel Jupyter.

Atom è costruito con l'integrazione di HTML, JavaScript, CSS e Node.js. Funziona su Electron, un framework per la creazione di app multipiattaforma utilizzando tecnologie web. GitHub Desktop funziona anche su Electron.

Progetti GitHub

I progetti di software open source spesso necessitano di metodi per applicare il controllo di qualità pur accettando contributi dall'esterno del team principale dei committer. La necessità di collaboratori è enorme, ma portare nuovi collaboratori nel progetto mantenendo l'integrità della base di codice è un'impresa difficile e potenzialmente pericolosa. Allo stesso tempo, anche la necessità di feedback da parte degli utenti del progetto è enorme.

GitHub ha una serie di meccanismi che possono aiutare a ingrassare le ruote dei progetti open source. Ad esempio, gli utenti possono aggiungere problemi al progetto su GitHub per segnalare bug o richiedere funzionalità. Alcuni altri sistemi chiamano questi ticket . I project manager che lavorano con i problemi possono generare elenchi di attività, assegnare problemi a contributori specifici, menzionare altri contributori interessati in modo che vengano informati delle modifiche, aggiungere etichette e pietre miliari.

Per contribuire a un progetto, in pratica si inizia da un ramo head dell'argomento che contiene le modifiche confermate che si desidera aggiungere al ramo di base del progetto e si inizializza una richiesta pull dal ramo principale, come mostrato di seguito. Quindi sposti i tuoi commit e li aggiungi al ramo del progetto. Altri contributori possono rivedere le modifiche proposte, aggiungere commenti di revisione, contribuire alla discussione sulla richiesta pull e aggiungere i propri commit alla richiesta pull.

Una volta che tutte le persone coinvolte sono soddisfatte delle modifiche proposte, un committer può unire la richiesta pull. L'unione può conservare tutti i commit, schiacciare tutte le modifiche in un singolo commit o ribasare i commit dal ramo head al ramo base. Se l'unione genera conflitti, puoi risolverli su GitHub o utilizzando la riga di comando.

Le revisioni del codice su GitHub consentono a un team distribuito di collaborare in modo asincrono. Gli strumenti utili di GitHub per i revisori includono diff (la metà inferiore dello screenshot di seguito), cronologia (la metà superiore) e visualizzazione della colpa (un modo per visualizzare l'evoluzione di un file commit per commit). Le discussioni sul codice su GitHub entrano nei commenti che vengono presentati in linea con le modifiche al codice. Se gli strumenti integrati non sono sufficienti per il tuo progetto, puoi aggiungere la revisione del codice e strumenti di integrazione continua dal marketplace GitHub. I componenti aggiuntivi del mercato sono spesso gratuiti per i progetti open source.

Sintesi di GitHub

I gist sono repository GitHub speciali per condividere il tuo lavoro (pubblico) o per salvare il lavoro per un successivo riutilizzo (segreto). Possono contenere singoli file, parti di file o applicazioni complete. Puoi scaricare i riassunti, clonarli, eseguirne il fork e incorporarli.

Le sintesi pubbliche possono essere scoperte e trovate nelle ricerche. Puoi utilizzare parole chiave per restringere ciò che trovi, inclusi prefissi per limitare i risultati a riepiloghi di utenti specifici, riepiloghi con almeno N stelle, riepiloghi con nomi di file specifici e così via.

Gli elementi segreti non sono ricercabili, ma chiunque abbia l'URL può vederli. Se vuoi davvero che il tuo codice sia protetto, usa un repository privato.

Come abbiamo visto, GitHub fornisce repository Git come servizio, insieme a funzionalità per la revisione del codice, la gestione dei progetti, le integrazioni con altri strumenti di sviluppo, la gestione del team, la codifica sociale e la documentazione. Sebbene GitHub non sia l'unico prodotto nella sua categoria, è il repository dominante per lo sviluppo di software open source.