User Tools

Site Tools


doc:appunti:prog:git

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
doc:appunti:prog:git [2022/01/09 16:46] – [Propagare un branch locale anche in remoto] niccolodoc:appunti:prog:git [2026/03/07 07:30] (current) niccolo
Line 124: Line 124:
 Dalla propria home page, cliccare sul fork. Controllare che il titolo della pagina sia **%%<username>/<projectname>%%**. Quindi cliccare sul tab **Settings** e quindi in fondo alla pagina **Delete this repository**. Dalla propria home page, cliccare sul fork. Controllare che il titolo della pagina sia **%%<username>/<projectname>%%**. Quindi cliccare sul tab **Settings** e quindi in fondo alla pagina **Delete this repository**.
  
-===== Branches =====+===== Gestione dei tag ===== 
 + 
 +Uno dei motivi più comuni per cui creare un **tag** è dare un nome e un numero di versione di una particolare versione del progetto. Quello che viene maracto con un tag diventa **immutabile** e non potrà essere cambiato in futuro. Per contro i **branch** servono a identificare rami diversi dello sviluppo che subiranno eventuali cambiamenti. 
 + 
 +Ad esempio per marcare la versione corrente con il nome **print3d-1.0** si esegue: 
 + 
 +<code> 
 +git tag -a print3d-1.0 
 +</code> 
 + 
 +Una pratica abbastanza diffusa è quella di usare il solo numero di versione come tag, es. **v0.41**. Viene aperto l'editor per poter inserire una **breve descrizione** del tag. 
 + 
 +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): 
 + 
 +<code> 
 +git log --pretty=oneline 
 +... 
 +d7dd3e5c44023bfefc6a6c649506e3e029929b4c Added a 3D printable OpenSCAD model. 
 +... 
 +git tag -a print3d-1.0 d7dd3e5 
 +</code> 
 + 
 +Infine bisogna salvare sul repository remoto (origin) il nuovo tag: 
 + 
 +<code> 
 +git push origin print3d-1.0 
 +</code> 
 + 
 +È possibile anche fare il push di tutti i nuovi tag con il comando: 
 + 
 +<code> 
 +git push origin --tags 
 +</code> 
 + 
 +Se si desidera rimuovere un tag dal repository remoto: 
 + 
 +<code> 
 +git push --delete origin print3d-1.0 
 +</code> 
 + 
 +===== Gestionde dei branch =====
  
 Mostra i rami di sviluppo, locali e remoti: Mostra i rami di sviluppo, locali e remoti:
Line 224: Line 264:
 ===== Misc Commands ===== ===== Misc Commands =====
  
-==== Revert di un singolo file ====+==== Restore o revert di un singolo file ==== 
 + 
 +A partire da Git 2.23 esiste il comando **git restore** che consente di ripristinare un file modificato localmente alla sua versione di checkout: 
 + 
 +<code> 
 +git restore path/to/file 
 +</code> 
 + 
 +Con versioni precedenti di Git si può usare: 
 + 
 +<code> 
 +git checkout -- path/to/file 
 +</code> 
 + 
 +Se si desidera tornare ad uno specifico commit, si può visualizzare il log degli stessi e richiederlo esplicitamente:
  
 <code> <code>
 git log path/to/file git log path/to/file
-git checkout <commit> path/to/file+git checkout <commit_id> path/to/file
 </code> </code>
  
Line 255: Line 309:
 </code> </code>
  
-===== Creare un tag =====+===== Annullare le modifiche locali in conflitto con origin/main =====
  
-Uno dei motivi più comuni per cui creare un **tag** è dare un nome e un numero di versione di una particolare versione del progetto. Quello che viene maracto con un tag diventa **immutabile** non potrà essere cambiato in futuro. Per contro i **branch** servono a identificare rami diversi dello sviluppo che subiranno eventuali cambiamenti. +Se un file è stato cambiato sia nella copia locale che nel repository originale, queste sono le istruzioni per annullare le modifiche locali riallineare tutto al **origin/main** (nell'esempio il file cambiato è ''database-pgsql.sql''):
- +
-Ad esempio per marcare la versione corrente con il nome **print3d-1.0** si esegue:+
  
 <code> <code>
-git tag -a print3d-1.0+git fetch origin 
 +git checkout origin/main -- database-pgsql.sql 
 +git pull 
 +git status
 </code> </code>
  
-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): +In questo modo le modifiche locali vengono annullate e **non resta traccia** di esse nel git.
- +
-<code> +
-git log --pretty=oneline +
-... +
-d7dd3e5c44023bfefc6a6c649506e3e029929b4c Added a 3D printable OpenSCAD model. +
-... +
-git tag -a print3d-1.0 d7dd3e5 +
-</code> +
- +
-Infine bisogna salvare sul repository remoto (origin) il nuovo tag: +
- +
-<code> +
-git push origin print3d-1.0 +
-</code>+
  
 ===== Annullare le modifiche locali ===== ===== Annullare le modifiche locali =====
Line 314: Line 355:
 git merge '@{u}' git merge '@{u}'
 </code> </code>
 +
 +===== 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:
 +
 +<code>
 +git update-index --skip-worktree config/database.php
 +</code>
 +
 +Il file in questione verrà **ignorato** sia da **pull** che da **push**. Per rimuovere tale caratteristica:
 +
 +<code>
 +git update-index --no-skip-worktree config/database.php
 +</code>
 +
 +Purtroppo questa configurazione non può essere utilizzata per ignorare una intera directory.
  
 ===== Chiave SSH per Github.com ===== ===== Chiave SSH per Github.com =====
Line 341: Line 398:
 ssh -T git@github.com ssh -T git@github.com
 Hi RigacciOrg! You've successfully authenticated, but GitHub does not provide shell access. Hi RigacciOrg! You've successfully authenticated, but GitHub does not provide shell access.
-</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.1641743164.txt.gz · Last modified: by niccolo