Appunti Git

29 Giugno 2017

In questo articolo appunterò una traccia schematica di alcune nozioni apprese durante la lettura dell’ottimo book git

Il flusso di lavoro di Git è basato su tre stati, ai quali sono correlate le tre sezioni di un progetto Git:

Di seguito un riepilogo del flusso di lavoro:

  1. Modifica di un file in locale
  2. Stage dei file
  3. Commit per rendere permanenti le modifiche nel repository

Configurazione di git

Settare la propria identità. Queste informazioni vengono utilizzare per i commit in moda da sapere chi lo ha fatto. Le opzioni vengono salvate nel file ~/.gitconfig

Pre elencare le impostazioni settate usare:

Ulteriori informazioni

Inizializzazione di un progetto Git

Questo paragrafo vale se vuoi utilizzare Git con un progetto esistente. Entra nella cartella principale:

In questo modo verrà creata una cartella .git che conterrà i file necessari per il repository ma ancora nessun file è stato tracciato.

La prima riga inserisce i file nell’area di stage, la seconda esegue il commit per mettere al sicuro i file nel database. Git add si usa sia per iniziare a tracciare un nuovo file, sia per aggiungere all’area di stage sia già tracciati ma che sono stati modificati. Si usa anche per eseguire la fusione dei file che entrano in conflitto dopo che sono stati risolti.

Partire da un progetto esistente

In questo modo verranno scaricati tutti i file dal repository git in locale, ogni versione di ogni file della storia del progetto. Il punto finale indica a git di scaricare i file della directory corrente altrimenti verrebbe creata una sotto cartella con il nome del repository

Flusso di lavoro Git

Flusso di lavoro Git – sorgente: http://git-scm.com/book/it/

Ignorare i file

Se non si vogliono mandare tutti i file nel repository è possibile ignorarli creando un elenco di file e/o cartelle nel file .gitignore:

La prima riga dice a Git di non considerare i gile che finiscono con .o oppure con .a, la seconda riga ignora tutti i file che finiscono con la tilde, la terza ignora tutta la cartella upload. Se è necessario rimuovere dal repository file presenti nei commit successivi leggere questa pagina.

Ulteriori informazioni

Informazioni di stato

Sono due i comandi fondamentali per avere informazioni circa lo stato di git:

Il primo si limita a elencare i file nuovi aggiunti alla directory di lavoro e che non sono ancora stati messi nell’area di staged o i file modificati che devono essere ancora committati. Il secondo comando invece indica differenze dettagliate anche sulle righe modificate. Git diff  mostra cosa hai modificato ma non ancora messo nell’area di stage, comparando appunto cosa c’è nell’area di lavoro con quello presente nell’area di stage. Git diff –cache mostra invece la comparazione tra ciò che c’è nell’area di stage e l’ultimo commit eseguito.

Il commit

Con questo comando verrà lanciato l’editor scelto in fase di configurazione per scrivere la descrizione del commit. In alternativa è possibile fare:

Nel commit finiranno solo i file e le cartelle per i quali è stato fatto git add, ossia che sono nell’area di stage. Con l’opzione -v si inserisce nella descrizione la “differenza” dei cambiamenti (diff). L’opzione -a invece permette di saltare il passaggio di parcheggio nell’area di stage, eseguendo quindi autamaticamente un git add –all.

Ulteriori informazioni

Storia dei commit

Questo comando mostra la storia di tutti i commit effettuati sul repository, tuoi e degli altri collaboratori, il commit più recente è mostrato in alto. L’opzione -p aggiunge il diff nei log e l’opzione – (es. -2) limita agli ultimi 2 commit.

Questo comando mostra l’elenco dei commit ma ci aggiunge la lista dei file modificati compreso di righe modificate aggiunte o rimosse.

Questo comando mostra i log delle ultime due settimane.

Ulteriori informazioni

Annullare le cose

Modificare l’ultimo commit

Questo comando permette di modificare un commit già fatto. Se lo si esegue subito dopo un commit permette di modificare la descrizione, ma se si esegue dopo aver aggiunto o modificato dei file dall’area di stage, allora questi non finiranno in un nuovo snapshot ma nell’ultimo commit fatto. Esempio:

Il secondo commit riscrive il risultato del primo

Annullare le modifiche a un file

Riporta il file all’ultimo commit

Repository remoti

Sorgente remota

Questo comando elenca i soprannomi di tutti i nodi specificati. Se sei partito con un clone del repository vedrai “origin” che è il nome standard che Git da al Server che hai clonato. L’opzione -v mostra anche l’ulr. Se si hanno più repository la lista sarà tipo questa:

Notare che solo origin è un url ssh e quindi l’unico nel quale si può fare il push. Gli altri sono i repository di collaboratori dai quali possiamo attingere i contributi.

Aggiungere un repository remoto

pb è il soprannome utilizzabile da linea di comando:

Prelevare da sorgenti remote

Questo comando si collega al repository remoto e scarica tutti i file che non si hanno

Questo comando invece oltre a scaricare i file tenta di fonderli con il codice locale con il quale si sta lavorando.

Ulteriori informazioni

Branching

Per spostarsi in un altro:

Creare un nuovo ramo

E’ anche possibile Creare un ramo ed entrarci direttamente:

Vedere i rami remoti

Merge dei rami

Per prima cosa ci si sposta nel ramo in cui fogliamo effettuare il merge e poi uniamo le modifiche fatte in “nuovo_ramo” con il ramo master. Durante il merge potrebbero esserci dei conflitti se sono stati modificati gli stessi file con più patch. Citando git-scm.com:

Qualsiasi cosa che ha un conflitto di fusione e non è stato risolto è elencato come unmerged. Git aggiunge dei marcatori standard di conflitto-risoluzione ai file che hanno conflitti, così puoi aprirli manualmente e risolvere i conflitti. I tuoi file conterranno una sezione che assomiglierà a qualcosa tipo:

La versione HEAD (del ramo principale, perche è qui che ci siamo spostati per fare il merge con il nuovo_ramo) è la versione del ramo master, mentre la parte sotto a ====== è la parte di codice del ramo “nuovo_ramo”

Dopo il merge è possibile rimuovere il ramo unito:

Lista dei rami correnti

Il ramo che inizia con un asterisco, è il ramo in cui ci si trova in questo momento. L’opzione -v mostra l’ultimo commit di ogni ramo. E’ possibile anche vedere quali rami sono stati già fusi nel ramo attuale:

I risultati che non iniziano con un asterisco possono solitamente essere rimossi in quanto già fusi. Per vedere invece i rami non ancora fusi:

Pushing

Dry run

Per vedere cosa verrà caricato con il push:

Per vedere la differenza di codice tra i file che saranno caricati e quelli già nel repository

Per vedere il full path dei file che saranno modificati

Fetch

In questo modo creo un ramo locale che si basa sul ramo remoto creato da qualche collaboratore. Questo viene chiamato Tracking Branch, ossia si tratta di un ramo locale relazionato con un ramo remoto. Se sei su uno di questi rami e fai “git push”, Git sa in automatico a quale server e ramo inviare. Stessa cosa per “git pull”.

Per creare un ramo locale con un nome diverso dal ramo remoto:

Ulteriori informazioni

Eliminare rami remoti

Ulteriori informazioni

Ripristinare un commit

Vedere queste pagine:

git-reset(1) Manual Page
Come annullare una commit in Git


Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *