doc:appunti:prog:git
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| doc:appunti:prog:git [2022/01/09 18:14] – niccolo | doc:appunti:prog:git [2026/11/06 10:51] (current) – [git restore] niccolo | ||
|---|---|---|---|
| Line 66: | Line 66: | ||
| cd qgis-web-client | cd qgis-web-client | ||
| git pull | git pull | ||
| + | </ | ||
| + | |||
| + | ==== git add ==== | ||
| + | |||
| + | Se nel repository locale di un progetto si aggiunge un file, questo risulta come //untracked file// (vedere con '' | ||
| + | |||
| + | < | ||
| + | git add filename | ||
| + | </ | ||
| + | |||
| + | Se si sono aggiunte diverse directory e file al progetto, è possibile aggiungerli tutti al sistema di tracking di Git con: | ||
| + | |||
| + | < | ||
| + | git add -A | ||
| + | </ | ||
| + | |||
| + | ==== git restore ==== | ||
| + | |||
| + | Se un file viene modificato nel repositori locale e **non è stato committed** né pushed nel repository origine, è possibile riportarlo alla versione precedente con: | ||
| + | |||
| + | < | ||
| + | git restore nomefile | ||
| </ | </ | ||
| Line 96: | Line 118: | ||
| git remote add origin_rw git@github.com: | git remote add origin_rw git@github.com: | ||
| git push origin_rw | git push origin_rw | ||
| + | </ | ||
| + | |||
| + | ==== git pull --rebase ==== | ||
| + | |||
| + | Può capitare che un '' | ||
| + | |||
| + | < | ||
| + | git pull --rebase | ||
| + | git push | ||
| </ | </ | ||
| Line 134: | Line 165: | ||
| </ | </ | ||
| - | se invece della versione corrente si vuole etichettare un commit precedente, bisogna individuare l'hash ed eseguire il comando (notare che l'hash è indicato in forma abbreviata): | + | Una pratica abbastanza diffusa è quella di usare il solo numero di versione come tag, es. **v0.41**. Viene aperto l' |
| + | |||
| + | Se invece della versione corrente si vuole etichettare un commit precedente, bisogna individuare l'hash ed eseguire il comando (notare che l'hash è indicato in forma abbreviata): | ||
| < | < | ||
| Line 148: | Line 181: | ||
| < | < | ||
| git push origin print3d-1.0 | git push origin print3d-1.0 | ||
| + | </ | ||
| + | |||
| + | È possibile anche fare il push di tutti i nuovi tag con il comando: | ||
| + | |||
| + | < | ||
| + | git push origin --tags | ||
| </ | </ | ||
| Line 256: | Line 295: | ||
| ===== Misc Commands ===== | ===== Misc Commands ===== | ||
| - | ==== Revert | + | ==== Restore o revert |
| + | |||
| + | A partire da Git 2.23 esiste il comando **git restore** che consente di ripristinare un file modificato localmente alla sua versione di checkout: | ||
| + | |||
| + | < | ||
| + | git restore path/ | ||
| + | </ | ||
| + | |||
| + | Con versioni precedenti di Git si può usare: | ||
| + | |||
| + | < | ||
| + | git checkout -- path/ | ||
| + | </ | ||
| + | |||
| + | Se si desidera tornare ad uno specifico commit, si può visualizzare il log degli stessi e richiederlo esplicitamente: | ||
| < | < | ||
| git log path/ | git log path/ | ||
| - | git checkout <commit> path/ | + | git checkout <commit_id> path/ |
| </ | </ | ||
| Line 286: | Line 339: | ||
| git remote show origin | git remote show origin | ||
| </ | </ | ||
| + | |||
| + | ===== Annullare le modifiche locali in conflitto con origin/main ===== | ||
| + | |||
| + | Se un file è stato cambiato sia nella copia locale che nel repository originale, queste sono le istruzioni per annullare le modifiche locali e riallineare tutto al **origin/ | ||
| + | |||
| + | < | ||
| + | git fetch origin | ||
| + | git checkout origin/main -- database-pgsql.sql | ||
| + | git pull | ||
| + | git status | ||
| + | </ | ||
| + | |||
| + | In questo modo le modifiche locali vengono annullate e **non resta traccia** di esse nel git. | ||
| ===== Annullare le modifiche locali ===== | ===== Annullare le modifiche locali ===== | ||
| Line 310: | Line 376: | ||
| Effettuare lo **stash** significa //mettere da parte// provvisoriamente le modifiche locali. Ciò che è stato //stashed// può essere visto con **git stash list**. | Effettuare lo **stash** significa //mettere da parte// provvisoriamente le modifiche locali. Ciò che è stato //stashed// può essere visto con **git stash list**. | ||
| - | Questi passaggi riallineano il repository locale con quello remoto. L' | + | Questi passaggi riallineano il repository locale con quello remoto. L' |
| < | < | ||
| Line 320: | Line 386: | ||
| git merge ' | git merge ' | ||
| </ | </ | ||
| + | |||
| + | ===== Ignorare le modifiche locali ===== | ||
| + | |||
| + | Se in un clone locale è necessario modificare alcuni file (ad esempio un file di configurazione) ma non si vuole che tale modifica sia propagata al repository, è possibile marcare ciascun file in questo modo: | ||
| + | |||
| + | < | ||
| + | git update-index --skip-worktree config/ | ||
| + | </ | ||
| + | |||
| + | Il file in questione verrà **ignorato** sia da **pull** che da **push**. Per rimuovere tale caratteristica: | ||
| + | |||
| + | < | ||
| + | git update-index --no-skip-worktree config/ | ||
| + | </ | ||
| + | |||
| + | Purtroppo questa configurazione non può essere utilizzata per ignorare una intera directory. | ||
| + | |||
| + | ===== .gitignore ===== | ||
| + | |||
| + | Supponiamo che nella radice di un progetto Git si abbia il file **.gitignore** che contiene: | ||
| + | |||
| + | < | ||
| + | # --- Gradle & build output --- | ||
| + | .gradle/ | ||
| + | build/ | ||
| + | |||
| + | # --- Local, machine-specific config --- | ||
| + | local.properties | ||
| + | |||
| + | # --- Signing secrets: NEVER commit these --- | ||
| + | *.jks | ||
| + | *.keystore | ||
| + | keystore.properties | ||
| + | |||
| + | # --- IDE / editor (not used here) --- | ||
| + | *.iml | ||
| + | .idea/ | ||
| + | .vscode/ | ||
| + | |||
| + | # --- OS cruft --- | ||
| + | .DS_Store | ||
| + | Thumbs.db | ||
| + | |||
| + | # --- Misc --- | ||
| + | *.log | ||
| + | captures/ | ||
| + | </ | ||
| + | |||
| + | ad esempio la riga **build/** significa che qualsiasi cartella con quel nome verrà ignorata, ad esmepio **/build/** e **/ | ||
| + | |||
| + | Il progetto può includere altri **.gitignore** in sottocartelle, | ||
| + | |||
| ===== Chiave SSH per Github.com ===== | ===== Chiave SSH per Github.com ===== | ||
| Line 347: | Line 465: | ||
| ssh -T git@github.com | ssh -T git@github.com | ||
| Hi RigacciOrg! You've successfully authenticated, | Hi RigacciOrg! You've successfully authenticated, | ||
| - | </code< | + | </code> |
| Verifichiamo che un repository locale sia stato clonato tramite protocollo HTTPS: | Verifichiamo che un repository locale sia stato clonato tramite protocollo HTTPS: | ||
doc/appunti/prog/git.1641748450.txt.gz · Last modified: by niccolo
