IT Q&A

Welcome!

This community is for professionals and enthusiasts of our products and services.
Share and discuss the best content and new marketing ideas, build your professional profile and become a better marketer together.

0

git Submodule cheat-sheet

Avatar
Corpuz Angel

git submodules cheat sheet

Seguono i comandi per svolgere vari task con i submodules.
git si trova pre-installato nelle shell bash e cloni (quindi per linux, Mac ed il WSL); per windows , oltre ad attivare il Windows Subsystem for Linux, è possibile installare sia git che la shell git-bash [https://git-scm.com/download/win].
Nota che il plugin di eclipse Egit ha una sua implementazione di git, quindi consiglio di installare comunque git e gitbash su windows per poter risolvere eventuali problemi se ci sono difficoltà tramite eclipse.

I comandi sono dati per la CLI, ma maggior parte ha i corrispondenti comandi da IDE.

*) clonare un repository con i sui submodules 

git clone --recurse-submodules <percorso_al_repo>

Per Egit bisogna spuntare l'opzione "clone submodules"


*) Inizializzare un repository con submodules
Nel repository padre:

$ git submodule init [nome_submodule]

I submodule vengono inizializzati ma le directory rimangono vuote.
Per recuperare i file:

$ git submodule update [nome_submodule]

Una volta inizializzato, i submodule sono gestibili tramite IDE.

*) Aggiornare il riferimento ad un submodule in un progetto all'ultima versione del submodulee
Per poterlo fare da dentro una IDE, bisogna avere il submodulee inizializzato.

Dal repository padre, entrare nella directory del submodule, poi:

$ git fetch (ora siamo dentro la directory ed il riferimento al remote è quello del submodule)
$ git merge origin/master (oppure origin/<nome_branch>)

Tornando sopra alla directory padre, un `git status` rivela che è cambiato il submodule ed un `git diff` mostra cosa, ovvero il commit di riferimento.


Comandi utili

1) git status/git submodule status
Usatelo sempre e spesso, vi mostra la situazione attuale con lo status dei file e del repository; vi ricorda anch su che branch siete. Se avete un dubbio, lanciate git `status`, io tendo ad usarlo di riflesso appena entro in un repository git.

2) git diff
Senza opzioni mostra la differenza tra il repository locale e la HEAD del remoto.

3) git merge <branch_da_cui_mergiare>
Faccio sempre i merge localmente da CLI. Se ci sono conflitti non ho sporcato il repository remoto e sono già nella directory per risolverli; se non ci sono conflitti sono già nella directory per spingere al remote.

3.1) git merge --abort
Per tornare indietro da un merge bloccato e ripristinare lo stato pre-merge. Serve anche per sbloccare la situazione in eclipse quando sei in un merge e non ti consente di fare nulla finchè non lo risolvi.


1 Commento
Avatar
Abbandona
Avatar
Fella Davide
-

Aggiungo qualche comando che mi è capito di usare più di una volta:

- git checkout -b "#nome_della_branch" --> Creo una nuova branch in locale a partire dalla branch su cui sto (tipicamente master). Nota, dopo questa operazione la branch appena creata deve essere pushata in remote.

- git reset --hard HEAD --> Fa un reset totale della branch allineandola con l'HEAD

- git log --> Il Log di tutti i commit, utile per ricostruire la storia della branch

- git reset --hard (oppure --soft) $ID_COMMIT --> faccio un reset della branch al commit indicato. Nota, se indico --soft sto facendo il rest della branch ma i file rimangono, successivamente devo fare un force (parametro -f) al push in remoto perché sto cancellando commit.

- git push origin --delete “nome_branch” --> Cancellazione remota della branch

- git branch -d "nome_branch" --> Cancellazione in locale della branch