
Che cos'è Git?
Git è un sistema di controllo versione distribuito e open source. Permette a sviluppatori e data scientist di tracciare il codice, unire le modifiche e tornare a versioni precedenti - AWS. Ti consente di sincronizzare le modifiche con un server remoto. Grazie alla sua flessibilità e popolarità, Git è diventato uno standard del settore perché supporta praticamente 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 e formano un grafo della cronologia di sviluppo, come mostrato sotto. Ci consente di tornare al commit precedente, confrontare le modifiche e vedere l'avanzamento del progetto di sviluppo - Azure DevOps. I commit sono identificati da un hash univoco usato per confrontare e ripristinare le modifiche effettuate.

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 apportate, 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 a una nuova funzionalità senza interferenze dagli altri membri del team. Una volta finito il task, puoi unire le nuove funzionalità alla versione principale (master). 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
In Git esistono tre stati dei file: modified, staged e commit. Quando apporti modifiche a un file, queste 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 che descrive le modifiche.

Tre stati dei file in Git
Quali sono i vantaggi di Git?
- Tracciare le modifiche: consente agli sviluppatori di vedere le modifiche storiche. La cronologia di sviluppo rende più semplice identificare e correggere bug.
- Integrazione con IDE: grazie alla sua 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ò vedere i propri progressi e, usando i branch, può lavorare individualmente su un'attività e unire le modifiche alla versione principale. Pull request, risoluzione dei conflitti di merge e code review favoriscono la collaborazione.
- 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 i progetti di data science
Git offre 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 AI 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 gli altri membri del team. Il diagramma qui sotto mostra come le modifiche ai dati o al codice influenzino i metadati e l'output del modello. Tracciare queste modifiche può anche aiutare gli altri a proporre soluzioni migliori. 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. Chiunque può contribuire a progetti open source e report di bug, discutere nuovi progetti e scoprire nuovi strumenti.
I data scientist e i machine learning engineer stanno seguendo la strada degli sviluppatori software e integrano il workflow con GitHub. In questo modo, possono condividere il proprio lavoro di ricerca, favorire i contributi della community e collaborare con i team dati. Su questa piattaforma trovi ogni tipo di progetto, guida, tutorial e risorsa di data science e machine learning. Per gli studenti, la piattaforma è diventata un'opportunità per fare esperienza e, alla lunga, ottenere un 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 alla loro 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 mettere in mostra i propri progetti e può essere considerato anche come esperienza lavorativa nel tuo curriculum. Presentare i progetti del portfolio crea anche opportunità per collaborare, lanciare una startup e fare ricerca.

Progetti di portfolio
Funzionalità
GitHub offre anche varie altre funzionalità importanti quanto la presentazione di un portfolio. È necessario conoscerle per poterle integrare nei tuoi progetti di data science.
- Open source: GitHub fornisce 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 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 uno snippet di codice o incorporarlo in un blog o sito web.
- GitHub CLI: ti consente di effettuare merge request, rivedere il codice, controllare le issue e monitorare l'avanzamento dalla riga di comando.
- Archiviazione gratuita: spazio illimitato per repository privati e pubblici.
- Hosting web: puoi pubblicare il tuo sito portfolio o la documentazione. Le GitHub Pages offrono 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 Actions automatizza il flusso di sviluppo come build, test, pubblicazione, release e deploy.
- Sponsor: puoi supportare i tuoi progetti o sviluppatori open source preferiti con un contributo 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. I comandi di base includono l'inizializzazione del repository Git, il salvataggio delle modifiche, la consultazione dei log, il push delle modifiche sul server remoto e il merge.
-
git initcrea un repository Git in una directory locale. -
git clone <remote-repo-address>: copia l'intero repository da un server remoto a una directory locale. Puoi usarlo anche per copiare repository locali. -
git add <file.txt>: aggiunge uno o più file e cartelle all'area di staging. -
git commit –m “Message”: crea un'istantanea delle modifiche e la salva nel repository. -
git configusato per impostare configurazioni specifiche dell'utente come email, username e formato dei file. -
git statusmostra l'elenco dei file modificati o dei file non ancora messi in stage e committati. -
git push <remote-name> <branch-name>: invia i commit locali al branch remoto del repository. -
git checkout -b <branch-name>: crea un nuovo branch e passa al nuovo branch. -
git remote –v: visualizza tutti i repository remoti. -
git remote add <remote-name> <host-or-remoteURL>: aggiunge il server remoto al repository locale. -
git branch –d <branch-name>: elimina il branch. -
git pull mergei commit in una directory locale da un repository remoto. -
git merge <branch-name>: dopo aver risolto i conflitti di merge, il comando fonde il branch selezionato con quello corrente. -
git logmostra un elenco dettagliato di commit per il branch corrente.

Sviluppo completo con GitHub
Se vuoi imparare altri comandi, dai un'occhiata alla nostra cheat sheet di Git.
Per iniziare
In questa sezione useremo Git per tracciare un progetto di data science e GitHub come server remoto. Impareremo a installare Git, creare e clonare un repository da GitHub, eseguire esperimenti di machine learning e fare push delle modifiche (notebook, modello, dati) su GitHub usando Windows PowerShell 7.
Installare Git
Git supporta tutti i sistemi operativi. Puoi installarlo con strumenti da riga di comando o 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, clicca sulla versione di 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 usate per firmare i commit.
git config --global user.name "your-user-name"
git config --global user.email "your@email.com"
Per informazioni più approfondite sull'installazione di Git, clicca qui.
Inizializzare il progetto
Se hai un account GitHub, clicca sul pulsante + e seleziona nuovo repository. Poi inserisci il nome del repository e una breve 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.

Clone 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
>>> Cloning into 'DataCamp-Git'...
>>> warning: You appear to have cloned an empty repository.
cd .\DataCamp-Git\
OPPURE
Crea una nuova directory chiamata “DataCamp-Git” e inizializza Git con un semplice comando. Poi aggiungi la connessione al repository remoto in modo da poter sincronizzare il tuo lavoro con GitHub.
mkdir DataCamp-Git
cd .\DataCamp-Git
git init
>>> Initialized empty Git repository 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, inizializza semplicemente Git usando `git init` e aggiungi il remoto GitHub, come mostrato sopra.
Semplice commit
Prima di aggiungere file al repository, assicurati di essere nella directory locale corretta.
Partiremo 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 il commit.
git status
>>> On branch main
>>> No commits yet
>>> Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: README.md
Per creare il nostro primo commit, useremo `git commit` con un messaggio. Come possiamo osservare, il primo commit è aggiunto con 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 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à entrambi 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 del modello e i metadati.

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
Eseguiremo 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 <remote-name> <branch-name>`. Se hai un solo remoto e un solo branch, usare `git push` sarà sufficiente.
Dopo `git push`, una finestra pop-up richiederà le credenziali: inserisci semplicemente username e password di GitHub. Puoi anche generare Personal access token e usarli al posto della password. Scopri di più leggendo il 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 effettuato correttamente il push delle modifiche sul remoto. Il repository GitHub contiene tutti i file, i dati e i modelli.

Push remoto su GitHub
I branch di Git
È consigliabile lavorare con i branch: per 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 con la 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é, mettiamo in stage le modifiche e salviamo 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 pushare 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 pushato 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 a una nuova funzionalità e vuole unire le modifiche al branch remoto principale. Ora creeremo una pull request usando l'interfaccia di GitHub cliccando sul pulsante delle pull request. Poi seleziona il branch readme che vogliamo unire alla base (main). Puoi scrivere una spiegazione dettagliata delle funzionalità aggiunte e cliccare sul pulsante della pull request.

Pull request da readme a 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 clicca sulla merge request per fondere le modifiche con il branch principale.

Merge della pull request su GitHub
Complimenti, abbiamo creato con successo una pull request e l'abbiamo unita al branch principale. Puoi vedere le modifiche sul branch main qui.
Se vuoi vedere tutte le modifiche all'interno del tuo repository git, digita `git log` e ti mostrerà le modifiche storiche al tuo progetto. Registrare le modifiche nei progetti di data science è importante, e Git ci aiuta a tracciare tutto, anche i dataset di grandi dimensioni.

Cronologia dei log di Git
Considerazioni finali
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. Dall'altro lato, GitHub svolge un ruolo importante nella promozione dei progetti open source offrendo a tutti un ecosistema gratuito per lo sviluppo software.
In questo tutorial abbiamo visto Git e GitHub e perché sono importanti per i progetti di data science. Il tutorial ti presenta anche i comandi di base di Git e offre un'esperienza pratica su come tracciare le modifiche a dati, modelli e codice. Se vuoi approfondire Git, segui il corso Introduction to Git su DataCamp. Puoi anche scoprire l'importanza della certificazione GitHub Foundations e come può aiutare la tua carriera.
Domande frequenti su Git
Che cos'è Git?
Un sistema di controllo 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 si elimina 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 si cambia branch in Git?
Passa a un branch esistente usando `git checkout <nome branch>` oppure crea e passa a un nuovo branch usando `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.
Che cos'è Git Bash?
È un'applicazione per Microsoft Windows che offre utility e un'esperienza shell in stile Unix.
Come si crea un nuovo branch in Git?
Usa il comando `git branch <nuovo-branch> <base-branch>` 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, copia tutte le modifiche da un repository remoto e le unisce con la directory locale. Questo processo richiede spesso di risolvere conflitti di merge.
Come si fa il fork di un repo in Git?
Il forking su GitHub è il processo di creazione di una copia di un repository sull'account GitHub dell'utente a partire da un altro account. Di solito si fa per contribuire alla community o per il lavoro di squadra.
Come si rinomina un branch in Git?
Per il repository locale è semplice: usa `git branch -m <vecchio-nome> <nuovo-nome>`. Per rinominare un branch remoto, prima dobbiamo rimuovere il branch vecchio con `git push origin --delete <vecchio-nome>` e poi pushare il nuovo branch `git push -u origin <nuovo_nome>`.
Come si elimina il repository Git?
Puoi eliminare la cartella locale o rimuovere la cartella .git usando `rm -fr .git`. Per GitHub, vai nelle impostazioni del repository e, in fondo alla pagina, troverai l'opzione per eliminarlo.
Come installare Git su Windows?
Scarica il setup per Windows dal sito ed esegui l'installazione, che installerà Git Bash, Git CDM e Git GUI.
Come si fa il revert di un commit in Git?
Usa `git revert <commit sha>`, che richiede il codice hash univoco di un commit precedente. Puoi anche usare `git revert HEAD~2`, che significa due commit prima della head.

