On Github fazo96 / Git_and_Github
fazo96.github.io/Git_and_Github
A cura di Enrico Fasoli
Sviluppare un Software in gruppo
Come condividiamo il lavoro?
Ma perchè non scegliere il migliore?
Per Windows dal sito git-scm.como installando GitHub Desktop (consigliato)
Per Linux tramite il Package Manager
Per OSX tramite Homebrew
Per capire meglio Git, partiamo da alcuni suoi concetti di base
Contiene tutti i dati relativi a un progetto
Ogni copia di un repository è un repository
Contiene la working directory e una cartella .git con tutti i dati di git
In altre parole, sono i file che si trovano in questo momento nella cartella della repository e con cui state lavorando.
Tutti i dati di git sono salvati nella cartella nascosta .git del vostro repository
Git offre numerosi strumenti per interagire con essi
Sono usati per tenere traccia di diversi rami di sviluppo. Quello principale si chiama master di default e punta, per convenzione, all'ultimo commit.
Indica l'ultimo commit che è stato estratto nella W.D.
Esempio: quando dovete lavorare su un commit, lo estraete nella W.D. per farci delle modifiche. L'HEAD viene spostato per puntare al commit che avete estratto.
il file .gitignore nella cartella di un repository specifica quali file e cartelle Git deve ignorare.
Esempio: se usate Netbeans, noterete che genera un sacco di file. La maggior parte di essi sono temporanei e non vanno tracciati usando git, altrimenti si crea solo disordine inutile.
Potete trovare esempi di gitignore già pronti su internet e adattarli
Vediamo adesso quali sono i comandi più importanti.
Nota: su Linux, è sempre possibile consultare il manuale di un comando! Alternativamente, una ricerca su internet può aiutare molto!
$ git config [--global] (nome) (valore)
Nota: è importante configurare il nome e la email
$ git config --global name "Enrico Fasoli"
$ git config --global email "enrico.fasoli1996@gmail.com"
$ git init
Partendo da una cartella di file esistenti (o vuota) viene creato un repository vuoto (senza commit)
$ git status
Vi informa su cosa succede nella W.D., sulla posizione dell'HEAD e altre informazioni.
$ git checkout (riferimento...)
Permette di estrarre lo stato di una repository ad un certo commit nella W.D.
Può anche essere usato per creare nuovi branch
Attenzione: questa operazione sposta l'HEAD al riferimento che è stato estratto.
$ git add (file o cartelle...)
Permette di scegliere quali file o cartelle (o tutto usando il flag -A) aggiungere al prossimo commit
Attenzione: questa operazione sposta l'HEAD al riferimento che è stato estratto.
$ git diff [argomenti]
Diff è un utilissimo comando che mostra cosa è stato cambiato tra l'HEAD e la W.D..
Può anche essere usato per vedere la differenza tra due riferimenti ad esempio tra due commit o due branch.
$ git commit [-m "messaggio"]
Include i file selezionati con add in un nuovo commit, che si baserà sull'HEAD corrente.
Attenzione: questa operazione sposta l'HEAD al nuovo commit.
$ git log [argomenti]
Partendo dall'HEAD, mostra la catena di commit su cui esso si basa. Tramite argomenti può essere configurato per mostrare altre informazioni in diverso formato.
$ git stash [apply/pop/drop/list/show]
$ git tag "etichetta"
Permette di etichettare un commit. Spesso usato per marcare la versione del software
E operazioni associate
Per gli utenti esperti!
$ git merge [opzioni] (branch)
Questa operazione pericolosa può risultare in un Conflict
$ git rebase [opzioni] (branch/commit)
Questa operazione pericolosa può risultare in un Conflict
Quando accade, git va in uno stato di conflitto e inserisce nella W.D. i file modificati per includere entrambe le versioni di ogni parte che causa un conflitto.
Il conflitto si risolve aggiustando manualmente i file e confermando le modifiche a git. Alternativamente si può annullare l'operazione che ha causato il conflitto.
Nota: in caso di conflitto, non andare nel panico e leggere attentamente l'output di git status!
$ git reset --(hard|mixed|soft) [opzioni] (branch)
Questa operazione è pericolosa e può causare la perdita di commit!
Git supporta una serie di protocolli per comunicare con i remote
$ git clone [URL...]
Permette di creare una copia locale completa di un repository remoto
Nota: aggiunge automaticamente un remote chiamato origin con l'URL dato
$ git clone https://github.com/utente/repo.git
$ git remote (add|remove|rename|...) (nome) [URL...]
Permette di aggiungere, eliminare, modificare i remote di una repository
Nota: di solito il server principale viene chiamato origin
$ git remote add origin https://github.com/utente/repo.git
$ git remote rename origin github
$ git fetch [-u] [remote] [riferimento]
Permette di controllare lo stato del remote
$ git push [-u] [(remote) (riferimento)]
Permette di pushare un branch locale a un remote, aggiornandolo
$ git pull [-u] [(remote) (riferimento)]
Permette di aggiornare la copia locale dal remote dato
ma GitHub è il più usato
Alcuni possono essere installati su un vostro server