Modulo 11 — GitHub: basi
Cos’è GitHub
Section titled “Cos’è GitHub”GitHub è una piattaforma di hosting per repository Git: puoi caricare i tuoi repo, accedervi da qualunque posto e condividerli con chiunque. In più offre funzioni di collaborazione non native di Git (issue, pull request, profili, …).
Git vs GitHub (ripasso)
Section titled “Git vs GitHub (ripasso)”| | Git | GitHub | | --- | --- | | Software o servizio | Software locale di version control | Servizio cloud che ospita repo Git | | Account | Non serve | Serve | | Internet | Non serve | Serve | | Indipendenza | Si usa senza GitHub | Ha alternative: GitLab, Bitbucket, Gerrit… |
Perché GitHub
Section titled “Perché GitHub”- Popolarità: fondato nel 2008, è l’host di codice più grande del mondo (40+ milioni di utenti e 190+ milioni di repository nel 2020).
- Gratuito: il tier Free offre repo pubblici e privati illimitati e collaboratori illimitati (i tier a pagamento sono Team/Enterprise).
- Collaborazione: imprescindibile appena il progetto coinvolge più persone.
- Open source: è LA casa dei progetti open (React, Swift, …). Per contribuire servono le basi di GitHub.
- Visibilità: il profilo funziona da curriculum; molti datori di lavoro lo consultano. Contribuire a progetti popolari dà visibilità.
- Aggiornamento: seguire i progetti che usi su GitHub è il modo migliore per stare al passo con modifiche e decisioni.
git clone — copiare un repo esistente
Section titled “git clone — copiare un repo esistente”git clone <url>⚠️ Non essere dentro un repository quando esegui il clone!
Il comando recupera tutti i file del progetto e l’intera storia Git, inizializzando un repository locale completo.
- Chiunque può clonare un repo pubblico: non serve essere owner o collaboratore, basta l’URL.
- Spingere le proprie modifiche sul repo è un’altra storia: serve il permesso!
cloneè un comando Git standard: non è legato a GitHub, funziona con repository ospitati ovunque.
Chiavi SSH
Section titled “Chiavi SSH”Per certe operazioni (es. push) serve autenticarsi. Senza SSH, il terminale chiede email e password di GitHub a ogni push. Generando e configurando una chiave SSH ci si collega senza credenziali manuali (GitHub offre una guida per la configurazione).
Portare il codice su GitHub: due strade
Section titled “Portare il codice su GitHub: due strade”Via 1: repo locale esistente
Section titled “Via 1: repo locale esistente”- Crea un repo (vuoto) su GitHub.
- Collega il repo locale (aggiungi un remote).
- Pusha le modifiche.
Via 2: partire da zero
Section titled “Via 2: partire da zero”- Crea il repo su GitHub.
- Clonalo sul tuo computer (il remoto viene configurato in automatico).
- Lavora e committa in locale.
- Pusha su GitHub.
I remotes
Section titled “I remotes”Prima di pushare, Git deve conoscere la destinazione: in gergo, un remote. Un remote è essenzialmente un URL dove vive un repository ospitato.
Vedere i remotes
Section titled “Vedere i remotes”git remote # elenco nomigit remote -v # verbose: nomi + URLAggiungere un remote
Section titled “Aggiungere un remote”Un remote è una coppia label + URL:
git remote add origin https://github.com/utente/repo.git“Git: d’ora in poi, quando dico origin intendo questo URL.”
origin è solo una convenzione, non ha poteri speciali. Quando cloni, il remote di default viene chiamato origin — e quasi nessuno lo rinomina.
Rinominare / rimuovere
Section titled “Rinominare / rimuovere”git remote rename <vecchio> <nuovo>git remote remove <nome>Nota: aggiungere un remote non comunica con GitHub — è solo un segnalibro.
git push — inviare al remote
Section titled “git push — inviare al remote”git push <remote> <branch>git push origin master # pusha il branch master sul remote origingit push origin newfeature # pusha il branch newfeatureDopo nuovi commit locali, il repo su GitHub non sa nulla: per condividerli va ripushato il branch.
Recap del workflow
Section titled “Recap del workflow”- Crea un repo vuoto su GitHub.
- Copia l’URL del repo.
- Aggiungi il remote al repo locale con quell’URL.
- Pusha.
Il quadro completo
Section titled “Il quadro completo”Workspace ──add──▶ Staging (index) ──commit──▶ Repository locale ──push──▶ Remote repository ◀────────────────────── pull / fetch ──────────────────────────