tux

Premessa:

  • faccio riferimento a github e nell'elenco di comandi che segue si suppone di disporre dell'account per accedervi
  • scopo di questo post è quello di riassumere la lista dei comandi per la gestione di un repository remoto
  • tutti i comandi vengono eseguiti da shell

 Entrare nella directory del progetto che si vuole salvare su github e digitare:

git init

Viene creata una directory nascosta .git. Con il comando:

git status

si può vedere lo stato attuale di salvataggio dei files nel repository.

Salvando un progetto su github è buona consuetudine fornire il progetto di un file licenza e di un file leggimi. E' quindi opportuno creare un file LICENSE.txt ed un file README.md. E' possibile trovare le definizioni delle licenze software sul sito choosealicense.com tramite il quale possiamo scegliere che licenza utilizzare e copiarne il testo nel nostro file. Riguardo al file README (l'estensione md sta per markdown) è possibile scaricare un template con tutti i caratteri di controllo per una corretta formattazione su github all'indirizzo github/PoorpleBooth.

Un'altro file da creare è .gitignore . Lo scopo di questo file è quello di impedire a git di copiare nel repository files non necessari o files specifici della macchina su cui si sta sviluppando ma che non sono utili a replicare il progetto su un'altra macchina. Nel caso specifico di un progetto Microchip MPLAB è stata redatta una lista delle estensioni e directory, questa lista si trova su github/RLocelett. Una lista molto ampia rivolta a programmi e sistemi operativi la si trova in github/gitignore.

Adesso, che abbiamo indicato cosa non trasferire, possiamo accodare tutti i files del progetto da inserire nel repository:

git add .

e inserire i files nel repository locale:

git commit --message "first commit"

Per verificare l'operazione appena eseguita si può utilizzare il comando:

git log

Ora ci serve il repository remoto su cui trasferire la copia del repository locale appena creato: si può utilizzare la procedura guidata di creazione di un nuovo progetto su github. Nella procedura guidata viene suggerita la creazione dei files leggimi e licenza, non facciamolo in quanto abbiamo bisogno di un repository vuoto. Inserito il nome del progetto e confermato si accede a una finestra di benvenuto con molte utili informazioni, quello che a noi occorre è l'indirizzo remoto del nostro repository:

Schermata 2017 12 02 alle 08.46.43

Copiare l'indirizzo e digitare da shell il seguente comando (l'indirizzo indicato fa riferimento al mio repository):

git remote add origin https://github.com/PaoloCarlo/tutorial_1.git

Per verificare se l'operazione è andata a buon fine si può digitare il comando:

paolocarlobernardi$ git remote -vv 
origin https://github.com/PaoloCarlo/tutorial_1.git (fetch)
origin https://github.com/PaoloCarlo/tutorial_1.git (push)

Non resta che effettuare il push del repository locale su quello remoto:

git push -u origin master

In opposizione, se si vuole scaricare da remoto un progetto per duplicarlo sulla propria macchina si usa il comando "clone" seguito dall'indirizzo del repository remoto.

git clone https://github.com/PaoloCarlo/tutorial_1.git

Volendo creare una nuova versione del progetto, o magari una variazione temporanea che verrà unita al progetto originario dopo verifica, è possibile creare un nuovo ramo con il comando "branch".

git branch temp

Abbiamo creato il ramo "temp". Per fare in modo che le modifiche che vogliamo inserire nel repository vadano nel ramo "temp" è necessario cambiare ramo, dal "master" al "temp".

git checkout temp

Digitando

git branch

si ha la verifica di quanto appena fatto: il ramo selezionato viene evidenziato da un asterisco.

Si può creare un nuovo ramo e selezionarlo con una sola istruzione:

git checkout -b temp

Il ramo creato può essere eliminato con il comando:

git branch -d temp

Una volta terminato lo sviluppo del nuovo ramo, volendo riunire il nuovo codice prodotto con la versione esistente, si usa il comando "merge". Prima però è necessario rientrare nel precedente ramo.

git checkout master
git merge temp

Questa operazione è consentita se non ci sono conflitti con il ramo primario.

Da ricordare

Elenco di seguito un approfondimento con alcuni parametri da ricordare in quanto utili. Se non diversamente indicato possono essere provati senza pericolo.

Visualizzo lo storico del repository:

git log --oneline --graph --all --decorate

Visualizzo quale repository remoto è collegato e rappresenta "origin":

git remote -v

Utile per capire se il repository locale è allineato con quello remoto:

git branch -vv --all 

Per aggiornare il repository remoto con quello locale:

git push origin master

Per aggiornare git in ambiente mac:

brew upgrade git

Da qualsiasi altro sistema operativo si va sul sito git-scm.com

Per annullare commit se non è ancora stato eseguito push:

git reset --soft HEAD^

Con l'opzione soft si elimina l'ultima azione commit ma non si tocca il contenuto dei file che rimane inalterato. HEAD^ indica il commit antecedente a quello appena effettuato.

Volendo riportare i file allo stato antecedente al commit, eliminando tutte le modifiche effettuate dal penultimo commit (questa operazione è potenzialmente pericolosa in quanto modifica i files del repository):

git reset --hard HEAD^

Avendo già effettuato il push sul repository remoto si può effettuare un nuovo commit che riporta il repository allo stato precedente (questa operazione è potenzialmente pericolosa in quanto modifica i files del repository)

git revert HEAD