Italia Community Lab - git

Comandi di base, valutazione del progetto

  • clone
    • significato: copia localmente l’intera struttura del progetto
    • scopo: viene utilizzato principalmente per puntare a un repository esistente e creare un clone o una copia di quel repository in una nuova directory, in un'altra posizione
    • esempio:
      • git clone (--depth N per evitare di portarsi dietro la storia di tutti i commit) https://github.com/consiglionazionaledellericerche/cool-jconon
  • pull
    • significato: sincronizza il repository locale con quello remoto
    • scopo: incorpora i cambiamenti di un repository nel ramo locale corrente (git fetch + git [merge|rebase] a seconda della configurazione corrente)
    • esempio:
      • git pull https://github.com/consiglionazionaledellericerche/cool-jconon-template
  • log
    • significato: strumento per monitorare la timeline del progetto
    • scopo: comando di ampia portata mostra lo storico delle modifiche
    • esempio:
      • git log --all --graph --decorate --oneline

Azioni pre-contributo (elementi di narrazione)

  • apertura issue
  • creazione fork su repo personale
  • identificare le modalità di contribuzione (PR su branch dev se disponibile)
  • commit con messaggio eloquente (vedi sotto)
  • apertura PR che referenzia la issue (che chiude la issue automaticamente al merge)
  • richiesta revisione agli autori

Comandi per contributori:

  • status

    • significato: mostra le differenze tra il file di indice e il commit HEAD
    • scopo: serve per tenere traccia dei files modificati, del ramo attuale e di altre informazioni riguardo il cosiddetto index
    • esempio:
      • git status [-s] in un repo con files modificati
  • diff

    • significato: Mostra le modifiche tra commit, commit e working tree
    • scopo: confrontare rapidamente le modifiche tra commit
    • esempi:
      • git diff README (mostra le modifiche nel file rispetto all'ultimo commit)
      • git diff <8digit-commit-hash> README (confrontato al ramo XXXX)
      • git diff HEAD README
      • git diff <8digit-commit-hash> HEAD README (cambiamenti “da” “a”)
  • checkout

    • significato: permette il cambio di contesto dei rami oppure ripristina il working tree
    • scopo: poter passare rapidamente da un ramo all’altro
    • esempio:
      • git checkout -b dev (crea e switcha in ramo dev)
      • git checkout master
      • git checkout README
  • branch

    • significato:
    • scopo: permette la gestione dei rami
    • esempio:
      • git branch dev
  • stash

    • significato: sposta le modifiche non ancora salvate in una directory di lavoro temporanea e le riapplica dopo un’azione
    • scopo: serve a salvare il lavoro in un'area temporanea e a rispristinare le modifiche in un secondo momento
    • esempio:
      • git stash save "aggiunto css agli asset”
      • vi file; git commit -a -m "..."
      • git stash pop
  • rebase

    • significato: è un'azione che consente di riscrivere i commit da un ramo a un altro ramo. In sostanza, Git elimina i commit da un ramo e li aggiunge a un altro.
    • scopo: tenere la timeline lineare rispetto a quanto accade con git merge
    • esempio:
      • git checkout test; git rebase master
  • reset

    • significato: comando per gestire eventuali errori
    • scopo: ripristinare lo stato coerente da un’azione errate
    • esempio:
      • git reset –hard HEAD~1 (annullare l’ultimo commit)
  • push

    • significato: aggiorna il repository remoto
    • scopo: aggiorna i riferimenti remoti utilizzando i riferimenti locali, inviando gli oggetti necessari per completare i riferimenti forniti.
    • esempio:
      • git push -u origin master
  • merge

    • significato: unisce due o più timeline di sviluppo insieme
    • scopo: incorpora le modifiche dai commit con nome (dal momento in cui le loro timeline si sono discostate dal ramo corrente) nel ramo corrente
    • esempio:
      • git checkout master; git merge dev
  • remote

    • significato: gestisce l'insieme di repository remoti di cui monitori i branch.
    • scopo: collegare il repository locale con uno o più repository remoti
    • esempio:
      • git remote add origin http://github.com/consiglionazionaledellericerche/cool-jconon

Comandi per manutentori (come precedenti)

  • tag
    • significato: contrassegnare punti specifici nella cronologia di un repository come importanti
    • scopo: rendere recuperabile il progetto in uno specifico punto della timeline
    • esempio:
      • git tag -a 1.0.0 -m "prima versione 1.0.0"

conventional commits https://www.conventionalcommits.org/

  • feat (nuova funzionalità)
  • fix (bug fix)
  • docs (modifiche alla documentazione)
  • style (formattazione, punti e virgola mancanti, ecc; nessuna modifica del codice)
  • refactor (refactoring del codice di produzione)
  • test (aggiunta di test mancanti, test di refactoring; nessuna modifica del codice di produzione)
  • chore (updating grunt tasks etc; nessuna modifica del codice di produzione

Link utili: