
Che cos'è Git?
Git è un sistema di controllo di versione distribuito e open-source. Consente a sviluppatori e data scientist di tracciare il codice, unire le modifiche e tornare a versioni precedenti - AWS. Ti permette di sincronizzare le modifiche con un server remoto. Grazie alla sua flessibilità e popolarità, Git è diventato uno standard del settore perché supporta quasi tutti gli ambienti di sviluppo, gli strumenti da riga di comando e i sistemi operativi.
Come funziona Git?
Git archivia i tuoi file e la loro cronologia di sviluppo in un repository locale. Ogni volta che salvi le modifiche effettuate, Git crea un commit. Un commit è un'istantanea dei file correnti. Questi commit sono collegati tra loro, formando un grafo della cronologia di sviluppo, come mostrato di seguito. Permette di tornare al commit precedente, confrontare le modifiche e visualizzare l'avanzamento del progetto di sviluppo - Azure DevOps. I commit sono identificati da un hash univoco che viene utilizzato per confrontare e ripristinare le modifiche apportate.

Un grafo della cronologia di sviluppo
Branch
I branch sono copie del codice sorgente che lavorano in parallelo alla versione principale. Per salvare le modifiche effettuate, unisci il branch alla versione principale. Questa funzionalità favorisce un lavoro di squadra senza conflitti. Ogni sviluppatore ha il proprio compito e, usando i branch, può lavorare su una nuova funzionalità senza l'interferenza degli altri membri del team. Una volta terminato il compito, puoi unire le nuove funzionalità con la versione principale (master branch). Se vuoi imparare a clonare un branch, dai un'occhiata a questo tutorial su Git Clone Branch.

Aggiunta di una nuova funzionalità al repository
Commit
Esistono tre stati dei file in Git: modificato, staged e commit. Quando modifichi un file, le modifiche vengono salvate nella directory locale. Non fanno parte della cronologia di sviluppo di Git. Per creare un commit, devi prima mettere in stage i file modificati. Puoi aggiungere o rimuovere modifiche nell'area di staging e poi impacchettarle come un commit con un messaggio descrittivo.

Tre stati dei file in Git
Quali sono i vantaggi di Git?
- Tracciare le modifiche: consente agli sviluppatori di visualizzare le modifiche storiche. La cronologia di sviluppo semplifica l'identificazione e la correzione dei bug.
- Integrazione con IDE: grazie alla popolarità, l'integrazione di Git è disponibile in tutti gli ambienti di sviluppo, ad esempio VSCode e JupyterLab.
- Collaborazione di team: un team di sviluppatori può visualizzare i propri progressi e, usando i branch, lavorare in modo indipendente su un'attività e unire le modifiche alla versione principale. Pull request, risoluzione dei conflitti di merge e code review favoriscono la collaborazione del team.
- VCS distribuito: in un sistema distribuito non c'è un archivio file centralizzato. Esistono più backup per lo stesso progetto. Questo approccio consente agli sviluppatori di lavorare offline e fare commit delle modifiche.
Git per progetti di Data Science
Git fornisce il controllo di versione per script, metriche, dati e modelli. Usando l'estensione git-lfs puoi archiviare e versionare grandi database e modelli di machine learning. In un tipico progetto di data science, hai un notebook Jupyter, dataset, modello, metadati e metriche del modello. I metadati includono file con informazioni sul modello di machine learning, feature, parametri del modello e file di automazione. Tutto questo è necessario per monitorare l'avanzamento delle applicazioni di IA e risolvere i problemi.
Tracciare gli esperimenti di data science aiuta gli scienziati a ripristinare modifiche accidentali, selezionare il miglior esperimento in base alla metrica di performance e collaborare con altri membri del team. Il diagramma seguente mostra come le modifiche ai dati o al codice influenzano i metadati e l'output del modello. Tracciare queste modifiche può aiutare anche gli altri membri del team a trovare una soluzione migliore. Scopri tutto su Git nell'ultimo blog di Summer Worsley.

Git per un progetto di Data Science
Collaborazione con GitHub
GitHub è una piattaforma cloud per lo sviluppo software. È comunemente usata per salvare file, tracciare modifiche e collaborare su progetti di sviluppo. Negli ultimi anni GitHub è diventata la piattaforma sociale più popolare per le community di sviluppo software. Le persone possono contribuire a progetti open-source e segnalazioni di bug, discutere nuovi progetti e scoprire nuovi strumenti.
I data scientist e gli ingegneri di machine learning stanno seguendo il percorso degli sviluppatori software e integrando il flusso di lavoro con GitHub. In questo modo possono condividere il proprio lavoro di ricerca, consentire il contributo della community e collaborare con i team di data. Su questa piattaforma puoi trovare ogni tipo di progetto di data science e machine learning, guide, tutorial e risorse. Per gli studenti, la piattaforma è diventata un'opportunità per fare esperienza lavorativa e, alla fine, trovare lavoro in un'azienda prestigiosa.
Portfolio
La maggior parte dei recruiter tecnici chiederà i progetti di portfolio o il profilo GitHub. Questo li aiuta a capire se un candidato è adatto all'azienda. È altamente consigliato creare un profilo GitHub e aggiornarlo regolarmente. I responsabili delle assunzioni cercano sempre candidati con grande esperienza nello sviluppo software e che contribuiscono a progetti open-source. Poter analizzare il portfolio GitHub li aiuta a preparare le domande per i colloqui tecnici.

Profilo GitHub
GitHub permette ai data scientist di mostrare i propri progetti e può anche valere come esperienza lavorativa sul tuo CV. Mettere in mostra i progetti del portfolio crea anche opportunità per collaborare, avviare una startup e fare ricerca.

Progetti di Portfolio
Funzionalità
GitHub offre anche varie altre funzionalità altrettanto importanti quanto mostrare un portfolio. È necessario conoscere ciascuna funzionalità per poterle integrare nei tuoi progetti di data science.
- Open-source: GitHub offre un ecosistema completo per i progetti open-source. Puoi sponsorizzare i maintainer, contribuire a un progetto, usare strumenti open-source in un progetto esistente e promuovere il tuo lavoro.
- Collaborazione della community: GitHub è diventata una piattaforma comunitaria dove si possono discutere issue, richieste di funzionalità, contributi di codice e documentazione.
- Explore: la scheda GitHub Explore ti aiuta a scoprire nuovi progetti, strumenti di tendenza ed eventi per sviluppatori.
- GitHub Gist: puoi condividere snippet di codice o incorporarli in un blog o sito web.
- GitHub CLI: ti permette di effettuare merge request, revisionare codice, controllare le issue e monitorare i progressi dal programma a riga di comando.
- Spazio di archiviazione gratuito: spazio illimitato per repository privati e pubblici.
- Hosting web: puoi pubblicare il tuo sito portfolio o la documentazione. GitHub Pages offre un'esperienza semplice per creare e distribuire siti web.
- Codespace: un ambiente di sviluppo cloud integrato con il tuo repository GitHub.
- Project: uno strumento personalizzabile e flessibile per pianificare e tracciare il lavoro su GitHub.
- Automazione: GitHub Action automatizza il flusso di lavoro di sviluppo come build, test, pubblicazione, rilascio e deploy.
- Sponsor: puoi supportare il tuo progetto o sviluppatore open-source preferito pagando una quota mensile o una tantum. Consente anche agli sviluppatori di usare piattaforme di pagamento di terze parti come ko-fi.
Comandi di base
Prima di passare alla gestione dei progetti di data science, vediamo i comandi Git più comuni che userai in ogni progetto di data science. I comandi di base includono l'inizializzazione del repository Git, il salvataggio delle modifiche, il controllo dei log, il push delle modifiche sul server remoto e il merge.
- git init crea un repository Git in una directory locale.
- git clone <indirizzo-repo-remoto>: copia l'intero repository da un server remoto nella directory locale. Puoi usarlo anche per copiare repository locali.
- git add <file.txt>: aggiunge un singolo file o più file e cartelle all'area di staging.
- git commit –m “Messaggio”: crea un'istantanea delle modifiche e la salva nel repository.
- git config usato per impostare configurazioni specifiche dell'utente come email, username e formato file.
- git status mostra l'elenco dei file modificati o dei file non ancora in stage e commit.
- git push <nome-remoto> <nome-branch>: invia i commit locali al branch remoto del repository.
- git checkout -b <nome-branch>: crea un nuovo branch e ci passa.
- git remote –v: visualizza tutti i repository remoti.
- git remote add <nome-remoto> <host-o-URL-remoto>: aggiunge il server remoto al repository locale.
- git branch –d <nome-branch>: elimina il branch.
- git pull unisce i commit da un repository remoto alla directory locale.
- git merge <nome-branch>: dopo aver risolto i conflitti di merge, il comando fonde il branch selezionato in quello corrente.
- git log mostra un elenco dettagliato dei commit per il branch corrente.

Sviluppo completo con GitHub
Se ti interessa imparare altri comandi, consulta il cheat sheet di Git di Gitlab.
Per iniziare
In questa sezione useremo Git per tracciare un progetto di data science e GitHub come server remoto. Impareremo come installare Git, creare e clonare un repository da GitHub, eseguire esperimenti di machine learning e inviare le modifiche (notebook, modello, dati) a GitHub usando Windows PowerShell 7.
Installare Git
Git supporta tutti i sistemi operativi. Puoi installarlo usando strumenti da riga di comando oppure scaricare e installare direttamente il setup.
Linux
Per i sistemi operativi basati su Debian/Ubuntu usa `apt-get install git`, e se usi un altro sistema basato su Linux, consulta l'elenco completo dei comandi di installazione qui.
macOS
Se hai installato homebrew, usa questo comando per scaricare e installare Git: `brew install git`. Puoi anche scaricare il programma di installazione binario ed eseguire il setup.
Windows
Installare Git su Windows è semplice. Vai alla pagina di download, fai clic sulla versione Windows specifica e scarica e installa il setup. Se hai lo strumento winget, puoi installarlo digitando `winget install --id Git.Git -e --source winget` in PowerShell.
Dopo aver installato Git, assicurati di aver configurato nome utente ed email. Queste informazioni vengono utilizzate per firmare i commit.
git config --global user.name "your-user-name"
git config --global user.email "[email protected]"
Per informazioni più approfondite su come installare Git, fai clic qui.
Inizializzare il progetto
Se hai un account GitHub, fai clic sul pulsante + e seleziona un nuovo repository. Poi inserisci il nome del repository e aggiungi una semplice descrizione. Verrà creato un repository pubblico vuoto.

Creazione del progetto
Ci sono molti modi per clonare repository remoti nella directory locale e GitHub fornisce una guida dettagliata su come clonare, aggiungere il remoto e inizializzare un progetto Git.

Clonare da GitHub
Possiamo semplicemente clonare il repository fornendo un link HTTPS. Assicurati di essere nella directory di lavoro usando il prompt dei comandi o PowerShell.
git clone https://github.com/kingabzpro/DataCamp-Git.git
>>> Clonazione in 'DataCamp-Git'...
>>> warning: sembra che tu abbia clonato un repository vuoto.
cd .\DataCamp-Git\
OPPURE
Crea una nuova directory chiamata “DataCamp-Git” e inizializza Git con un semplice comando. Dopo, aggiungi una connessione al repository remoto in modo da poter sincronizzare il tuo lavoro con GitHub.
mkdir DataCamp-Git
cd .\DataCamp-Git
git init
>>> Repository Git vuoto inizializzato in C:/Repository/GitHub/DataCamp-Git/.git/
git remote add origin https://github.com/kingabzpro/DataCamp-Git.git
OPPURE
Se hai già un progetto in una directory, ti basta inizializzare Git con `git init` e aggiungere il remoto di GitHub, come mostrato sopra.
Commit semplice
Prima di aggiungere file al nostro repository, assicurati di essere nella directory locale corretta.
Inizieremo in modo semplice creando un file README con l'intestazione DataCamp-Git. Poi lo aggiungeremo all'area di staging usando `git add`.
echo "# DataCamp-Git" >> README.md
git add README.md
Git status mostra che siamo sul branch main e che il file `README.md` è in stage e pronto per essere messo in commit.
git status
>>> Sul branch main
>>> Ancora nessun commit
>>> Modifiche pronte per il commit:
(usa "git rm --cached <file>..." per togliere dallo staging)
new file: README.md
Per creare il nostro primo commit, useremo `git commit` con un messaggio. Come possiamo osservare, il primo commit è stato aggiunto sotto l'hash ed9c886.
git commit -m "first commit"
>>> [main (root-commit) ed9c886] first commit
>>> 1 file changed, 1 insertion(+)
>>> create mode 100644 README.md
Aggiungere i file del progetto
Useremo il workspace di DataCamp MasterCard Stock Price with LSTM and GRU e scaricheremo i file. L'autore del progetto ha preprocessato i dati e addestrato serie temporali sui modelli LSTM e GRU. Scopri di più sul progetto leggendo il tutorial sulle Reti Neurali Ricorrenti (RNN).
Per salvare il file del modello, abbiamo aggiunto una nuova cella di codice nel notebook Jupyter del progetto. Il nuovo script creerà una nuova directory chiamata “model” e salverà i modelli LSTM e GRU.
!mkdir -p model
model_lstm.save('model/LSTM')
model_gru.save('model/GRU')
Come possiamo vedere, il repository Git ha una cartella data che contiene file CSV, la cartella model con i pesi e i metadati del modello.

Ora metteremo in stage tutti i file. Puoi aggiungere qualsiasi directory, file o dato dopo il comando iniziale.
git add .\data .\model LSTM_GRU.ipynb RNN.png
OPPURE
Se vuoi aggiungere tutti i file all'area di staging, usa il punto.
git add .
Commit e Push
Faremo il commit di tutte le modifiche con un semplice messaggio e l'output mostra tutti i nuovi file in create mode.
git commit -m "project files added"
>>> [main aa3e19a] project files added
>>> 10 files changed, 5020 insertions(+)
>>> create mode 100644 LSTM_GRU.ipynb
>>> create mode 100644 RNN.png
>>> create mode 100644 data/Mastercard_stock_history.csv
>>> create mode 100644 data/Mastercard_stock_info.csv
>>> create mode 100644 model/GRU/saved_model.pb
>>> create mode 100644 model/GRU/variables/variables.data-00000-of-00001
>>> create mode 100644 model/GRU/variables/variables.index
>>> create mode 100644 model/LSTM/saved_model.pb
>>> create mode 100644 model/LSTM/variables/variables.data-00000-of-00001
create mode 100644 model/LSTM/variables/variables.index
La sincronizzazione con il repository remoto su GitHub richiede un nome remoto e il nome del branch `git push <nome-remoto> <nome-branch>`. Se hai un solo remoto e un solo branch, allora usare `git push` sarà sufficiente.
Dopo il `git push`, una finestra pop-up chiederà le credenziali: inserisci semplicemente il tuo username o password di GitHub. Puoi anche generare token di accesso personali e inserirli al posto della password. Scopri di più nel tutorial su Git Push e Pull.
git push
>>> Enumerating objects: 21, done.
>>> Counting objects: 100% (21/21), done.
>>> Delta compression using up to 4 threads
>>> Compressing objects: 100% (19/19), done.
>>> Writing objects: 100% (21/21), 1.83 MiB | 1.59 MiB/s, done.
>>> Total 21 (delta 2), reused 0 (delta 0), pack-reused 0
>>> remote: Resolving deltas: 100% (2/2), done.
>>> To https://github.com/kingabzpro/DataCamp-Git.git
>>> * [new branch] main -> main
Andremo a controllare il nostro repository GitHub kingabzpro/DataCamp-Git per verificare di aver inviato correttamente le modifiche al remoto. Il repository GitHub contiene tutti i file, i dati e i modelli.

Push remoto su GitHub
Branch di Git
Si consiglia di lavorare con i branch: ad esempio, se vuoi occuparti della documentazione del progetto, crea un branch di documentazione usando `git checkout` o `git branch`. Apporta modifiche al file README e, quando le hai finalizzate, unisci il branch alla base.
Nel nostro caso, abbiamo creato e siamo passati a un nuovo branch chiamato `readme`.
git checkout -b readme
Modifichiamo il file README aggiungendo una descrizione del progetto e collegando il workspace e il tutorial RNN di DataCamp. Dopodiché metteremo in stage le modifiche e salveremo un'istantanea con un messaggio.
git add README.md
git commit -m "project description and links to blog"
>>> [readme f3b8b9b] project description and links to blog
>>> 1 file changed, 8 insertions(+)
Il repository remoto non ha un branch readme. Per creare un nuovo branch e inviare le modifiche, useremo “readme:readme”. L'output del comando mostra che sono stati creati nuovi branch e che i branch `readme` locale e remoto sono sincronizzati.
git push origin readme:readme
>>> remote: Resolving deltas: 100% (1/1), completed with 1 local object.
>>> remote: Create a pull request for 'readme' on GitHub by visiting:
>>> remote: https://github.com/kingabzpro/DataCamp-Git/pull/new/readme
>>> remote:
To https://github.com/kingabzpro/DataCamp-Git.git
>>> * [new branch] readme -> readme
Puoi notare che abbiamo inviato con successo il branch locale su GitHub con una versione modificata del file README.md.

Branch Readme su GitHub
Pull request
Questa funzionalità è comune nelle organizzazioni. Per esempio, uno sviluppatore ha lavorato su una nuova funzionalità e vuole unire le modifiche al branch remoto principale. Ora creeremo una pull request usando la GUI di GitHub facendo clic sul pulsante pull request. Poi seleziona il branch readme che vogliamo unire alla base (main). Puoi scrivere una spiegazione dettagliata delle funzionalità aggiunte e fare clic sul pulsante della pull request.

Pull request dal branch readme al main
Il maintainer del repository confronterà le tue modifiche e le unirà quando avranno superato tutti i test. Nel nostro caso, sei tu il maintainer, quindi fai clic sulla richiesta di merge per fondere le modifiche con il branch principale.

Unione della pull request su GitHub
Congratulazioni, abbiamo creato con successo una pull request e l'abbiamo unita al branch principale. Puoi visualizzare le modifiche sul branch main qui.
Se vuoi visualizzare tutte le modifiche nel tuo repository git, digita `git log` e verranno mostrate le modifiche storiche del tuo progetto. Registrare i cambiamenti nei progetti di data science è importante e Git ci aiuta a tracciare tutte le modifiche, anche di dataset di grandi dimensioni.

Cronologia dei log di Git
Conclusione
I GitOps sono fondamentali per lo sviluppo di applicazioni data-driven. Sono diventati una competenza essenziale per tutti i tipi di lavori IT; persino i ricercatori accademici li usano per condividere il codice degli esperimenti con un pubblico più ampio. D'altra parte, GitHub svolge un ruolo importante nel promuovere i progetti open-source fornendo a tutti un ecosistema gratuito per lo sviluppo software.
In questo tutorial abbiamo imparato cosa sono Git e GitHub e perché sono importanti per i progetti di data science. Il tutorial ti introduce anche ai comandi di base di Git e offre un'esperienza pratica su come tracciare le modifiche a dati, modelli e codice. Se ti interessa approfondire Git, segui il corso Introduzione a Git su DataCamp. Puoi anche informarti sull'importanza della certificazione GitHub e su come può aiutare la tua carriera.
Domande frequenti su Git
Che cos'è Git?
Un sistema di controllo di versione distribuito e open-source. Consente agli sviluppatori di archiviare, versionare e visualizzare le modifiche in un progetto di sviluppo. Favorisce un lavoro di squadra flessibile e un flusso di lavoro ottimizzato.
Cosa significa Git?
Non è un acronimo. Secondo il suo creatore, Linus Torvalds, “Git può significare qualsiasi cosa, a seconda dell'umore.” È una combinazione di tre lettere casuali che non sono usate da alcun comando UNIX.
Come faccio a clonare un repository Git?
È sufficiente digitare `git clone <indirizzo del repository remoto>` in un terminale. Puoi clonare repository locali e remoti. Supporta sia i protocolli SSH che HTTPS.
Come eliminare un branch in Git?
Per eliminare un branch locale, usa `git branch -d <nome_branch_locale>`, e per eliminare il branch remoto, usa `git push <nome_remoto> -d <nome_branch_remoto>`.
Come passare da un branch all'altro in Git?
Passa a un branch esistente con `git checkout <nome branch>` oppure crea e passa a un nuovo branch con `git checkout -b <nome branch>`.
Come installo Git?
Per i sistemi Linux usa `apt-get install git`, e per altri sistemi operativi consulta git-scm.com.
Git è gratuito?
Sì, è gratuito e open-source sotto licenza GPL-2.0.
Cos'è Git Bash?
È un'applicazione per Microsoft Windows che offre utility e un'esperienza di shell basate su Unix.
Come creare un nuovo branch in Git?
Usa il comando `git branch <nuovo-branch> <branch-di-base>` nel terminale. Per creare e passare a un nuovo branch, usa `git checkout -b <nome branch>`.
Cosa fa git pull?
Aggiorna la versione locale di un repository da un server remoto, copiando tutte le modifiche da un repository remoto e unendole con la directory locale. Questo processo richiede spesso la risoluzione di conflitti di merge.
Come fare il fork di un repo in Git?
Il forking su GitHub è il processo di creazione di una copia di un repository nell'account GitHub dell'utente a partire da un altro account. Di solito si fa per contributi della community o lavoro di squadra.
Come rinominare un branch in Git?
Per il repository locale è semplice: usa `git branch -m <vecchio-nome> <nuovo-nome>`. Per rinominare un branch remoto, prima bisogna rimuovere il branch vecchio con `git push origin --delete <vecchio-nome>` e poi pushare il nuovo branch con `git push -u origin <nuovo_nome>`.
Come eliminare il repository Git?
Puoi eliminare la cartella locale oppure rimuovere la cartella .git con `rm -fr .git`. Per GitHub, vai alle impostazioni del repository e, in fondo alla pagina, troverai l'opzione per eliminare.
Come installare Git su Windows?
Scarica l'installer per Windows dal sito ed esegui il setup, che installerà Git Bash, Git CDM e Git GUI.
Come fare il revert di un commit in Git?
Usa `git revert <commit sha>`, che richiede l'hash univoco di un commit precedente. Puoi anche usare `git revert HEAD~2`, che indica due commit prima della testa.

