Created on 19 Jun 2015 ;    Modified on 23 Aug 2016

Git... ting

Qui riporto alcuni semplici how to usando Git: un sistema per la gestione delle versioni di gruppi di file (come dicono gli informatici: version control system).

Per chi vuole qualche riferimento:

Un esempio di procedura per il salvataggio del lavoro

Si può riassumere come segue:

  • controllo locale
  • aggiungere i file modificati allo staged
  • commit locale
  • pull dal repository remoto
  • push al repository remoto

Da cui i seguenti comandi

git status
git add nomi_dei_file
git commit
git pull
git push

Indice

Iniziare a lavorare con repository GIT vuoto

Quando si vuole portare un lavoro in un repository GIT dedicato si procede così

  • creare una directory vuota
  • copiarci i file da inserire nel repository
  • andare nella directory e creare un repository vuoto (comando git init)
  • creare un file .gitignore in cui elencare, uno per riga, i file che NON si vuole mettere nel repository; in questo file si possono usare patten del tipo *.pdf per indicare tutti i file di tipo pdf
  • indicare a git di cominciare a tenere sotto controllo i file (comando git add .)
  • indicare a git di caricare il repository (comando git commit -m "messaggio_esplicativo_del motivo_del_commit")

Da cui i seguenti comandi:

mkdir prj_dir
cp * prj_dir
cd prj_dir
git init
touch .gitignore
vim .gitignore ....
git add .
git commit -m "caricamento iniziale"

Gestione dei tag

aggiunge tag al (branch) master, ultimo commit:

git tag -a v0.1 -m "sprint-1"

oppure per agganciare il tag ad un particolare commit:

git tag -a 1.0.1 8226ae1acfa99f43526de3e6c228a34da8536a29 -m "sprint-1"

per copiare il tag al repository remoto:

git push --follow-tags git@git.dominio:progetto.git

cancella tag, localmente e su repo:

git tag -d v0.1 git push git@git.defalcoalfano.it:cedife.git :refs/tags/v0.1

Reset: elimina i risultati del comando add

Quando si vuole aggiungere un file al controllo di GIT si usa il comando git add ...

Puo accedere di aggiungere file non voluti, ad esempio per un errore di digitazione.

In questi casi git reset annulla gli add effettuati, anche se non si è ancora fatto commit.

Stash: salva uno stato del lavoro, non pronto per il commit

Quando si vuole cambiare branch, ma si è in una sitazione in cui non si ritiene opportuno fare commit, è possibile usare il comando git stash

Questo salva la situazione attuale, che può essere ripristinata successivamente usando il comando git stash apply

Si possono avere più stash. Si elencano con il comando git stash list

L'opzione apply applica l'ultimo stash effettuato.

Per applicare uno stash precedente l'ultimo, lo si può indicare utilizzando pedissequamente il nome indicato dall'opzione list.

Gli stash(es) vengono ricordati da git. Per eliminarli tutti si usa il comando git stash clear.

Mentre, per eliminare l'ultimo stash registrato basta indicare git stash drop. Questo stesso comando si può utilizzare per cancellare una stash precedente l'ultimo. Va indicato in coda il nome, o l'indice, dello stash da rimuovere.

Inviare ad un secondo repository remoto

E' possibile gestire più di un repository remoto rispetto un repository locale.

Il comando git remote add nome ... permette di aggiungere un riferimento ad un repository remoto, distinto dal remoto di riferimento (quest'ultimo ha nome standard: origin).

Quindi, ad esempio:

git remote add alt indirizzo_repository_remoto
git push -u alt --all

Clonare un repository nella directory corrente

git clone indirizzo_repository_remoto

Ad esempio:

>git clone https://github.com/miguelgrinberg/flasky.git

Elencare i commit nel repository

git log

Un esempio di output è:

>git log
commit 9ea2d63e1ebaaddfc1739f63cf365a712402ae68
Author: ldfa <luciano@xxxxxx.xxx>
Date:   Mon Mar 30 19:27:14 2015 +0200

    miomodulo
    * debug delle funzioni per ...

commit e0965b87880684325a9dcc9ec01df9d035b1cf79
Author: ldfa <luciano@xxxxxx.xxx>
Date:   Thu Mar 26 20:21:27 2015 +0100
....

Recuperare un file dal repository

git show  commit_id:path_to_file

Nota. Per salvare il file, ridirigere l'output su disco. Ad esempio:

git show  c30d9cutted:shared/miomodulo/miofile.cs > miofile.cs.old

Elencare i file in repository

git show --pretty="format:" --name-only commit_id

Ad esempio:

>git show --pretty="format:" --name-only e728eb32df5c15681c7b45576c6bd218a9926a54

miasoluzione/miasoluzione/mioprogetto/Controllers/HomeController.cs
miasoluzione/miasoluzione/mioprogetto/Views/EditController/EditEdit.cshtml

Passare ad un branch

Ottenendo i relativi file nella directory corrente:

git checkout nome_branch

Cancellare un branch

Per eliminare un branch dal repository locale: git branch -d nome_branch

Dopo avere eliminato un branch localmente, se lo si vuole cancellare anche dal repository remoto (origin): git push origin :nome_branch

Elencare i branch

Per avere l'elenco dei branch dal repository locale: git branch

Copiare un brach locale su repository remoto e metterlo in tracking

git push -u origine nome_branch

Ad esempio:

>git push -u http://reporemoto/tfs/mycollection/_git/progetto db_core
Username for 'http://reporemoto': Administrator
Password for 'http://Administrator@reporemoto':
< ... >
 * [new branch]      db_core -> db_core
Branch db_core set up to track remote branch db_core from http://reporemoto/tfs/mycollection/_git/progetto

Controllare la configurazione

git config --list

Ad esempio:

>git config --list
core.symlinks=false
core.autocrlf=true
< ... >
user.email=myname@mydomain
user.name=myname
< ... >
remote.origin.url=http://reporemoto/tfs/mycollection/_git/progetto
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
branch.master.remote=origin
branch.master.merge=refs/heads/master