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
Last revisionBoth sides next revision
doc:appunti:prog:git [2022/01/09 15:50] – [Branches] niccolodoc:appunti:prog:git [2022/01/10 09:57] – [Revert di un singolo file] niccolo
Line 57: Line 57:
 git remote set-url origin git@github.com:RigacciOrg/ProTherm.git git remote set-url origin git@github.com:RigacciOrg/ProTherm.git
 </code> </code>
 +
 ==== git clone ==== ==== git clone ====
  
Line 122: Line 123:
  
 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**.
-===== Misc Commands ===== 
  
-==== Revert di un singolo file ====+===== 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> <code>
-git log path/to/file +git tag -a print3d-1.0
-git checkout <commit> path/to/file+
 </code> </code>
  
-==== Colors ====+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):
  
-Disable GUI colors:+<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> <code>
-git config --global color.ui false+git push origin print3d-1.0 
 +</code> 
 + 
 +Se si desidera rimuovere un tag dal repository remoto: 
 + 
 +<code> 
 +git push --delete origin print3d-1.0
 </code> </code>
  
-==== Branches ====+===== Gestionde dei branch =====
  
 Mostra i rami di sviluppo, locali e remoti: Mostra i rami di sviluppo, locali e remoti:
Line 151: Line 168:
  
 ''remotes/origin/HEAD'' is the default branch for the remote named origin. This lets you simply say ''origin'' instead of ''origin/master''. ''remotes/origin/HEAD'' is the default branch for the remote named origin. This lets you simply say ''origin'' instead of ''origin/master''.
 +
 +==== Creazione di un nuovo branch ====
  
 Per creare localmente un nuovo branch di nome **jessie**: Per creare localmente un nuovo branch di nome **jessie**:
Line 158: Line 177:
 </code> </code>
  
-Si può verificare che sia stato creato con ''git branch -a'':+Si può verificare che sia stato creato:
  
 <code> <code>
Line 168: Line 187:
 </code> </code>
  
-Si vede che localmente esistono i due branch **jessie** e **master**il secondo è marcato con un asterisco ed è quindi quello utilizzato per effettuare i commit locali.+Si vede che localmente esistono i due branch **jessie** e **master**il secondo è marcato con un asterisco ed è quindi quello utilizzato per effettuare i commit locali. Quindi aver creato un branch nuovo non significa automaticamente lavorarci sopra.
  
-Per propagare il nuovo branch anche sul repository remoto:+==== Selezionare il branch di lavoro locale ==== 
 + 
 +Per iniziare a lavorare localmente su un determinato branch si usa il comando **git switch**:
  
 <code> <code>
-git push --set-upstream origin jessie+git switch jessie
 </code> </code>
  
-Con il comando ''git branch -a'' è possibile verificare che localmente si sta lavorando ancora sul branch **master** e che sul repository remoto esistono i branch **master** e **jessie**:+Si verifica che il branch locale predefinito (marcato con un asterisco) sia effettivamente cambiato:
  
 <code> <code>
-  jessie +git branch -a 
-* master+jessie 
 +  master
   remotes/origin/HEAD -> origin/master   remotes/origin/HEAD -> origin/master
   remotes/origin/jessie   remotes/origin/jessie
Line 186: Line 208:
 </code> </code>
  
-Sul repository remoto il branch predefinito (''HEAD''cioè il commit più recente che vediamo) punta su ''origin/master'', non sul nuovo branch ''jessie''.+In ogni momento è possibile cambiare branch di lavoro localead esempio tornando su master:
  
-Con il comando **checkout** si crea un nuovo branch locale (ad esempio di nome **buster**) e lo si rende lo spazio di lavoro predefinito:+<code> 
 +git switch master 
 +</code> 
 + 
 +**ATTENZIONE** Prima di Git 2.23 si utilizzava il comando **git checkout** per cambiare branch di lavoro locale. 
 + 
 +==== Propagare un branch locale anche in remoto ==== 
 + 
 +Per propagare il nuovo branch anche sul repository remoto:
  
 <code> <code>
-git checkout -b buster+git push --set-upstream origin jessie
 </code> </code>
 +
 +È possibile verificare che localmente si sta lavorando ancora sul branch **master** e che sul repository remoto esistono i branch **master** e **jessie**:
  
 <code> <code>
 git branch -a git branch -a
-* buster +  jessie 
-  master+master
   remotes/origin/HEAD -> origin/master   remotes/origin/HEAD -> origin/master
   remotes/origin/jessie   remotes/origin/jessie
Line 203: Line 235:
 </code> </code>
  
 +Avendo fatto lo switch (o il checkout) ad uno specifico branch, gli eventuali commit andranno su di esso. Lo possiamo verificare con ''git status'':
  
 +<code>
 +git status
 +On branch jessie
 +Your branch is ahead of 'origin/jessie' by 1 commit.
 +  (use "git push" to publish your local commits)
 +</code>
  
 +==== Clonare uno specifico branch ====
  
-FIXME Per iniziare la lavorare su un branch remoto...+Quando si clona il repository remoto è possibile indicare subito su quale branch si intende lavorare:
  
-  * **[[https://careerkarma.com/blog/what-is-a-git-head/|What is a Git HEAD?]]**+<code> 
 +git clone --branch jessie https://github.com/RigacciOrg/project.git 
 +</code>
  
-==== Locally Committed Differences ====+Con **git branch** sarà possibile verificare quale è il branch locale predefinito, marcato con un asterisco.
  
-Per vedere le differenze tra il master remoto e quello locale (**ATTENZIONE** questo comando non controlla la versione ultima presente sul repository, lavora sui dati salvati localmente!):+===== Misc Commands ===== 
 + 
 +==== 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> <code>
-git diff --name-only remotes/origin/master..master+git restore path/to/file
 </code> </code>
  
-L'opzione ''%%--name-only%%'' limita l'output al solo nome dei file cambiati.+Con versioni precedenti di Git si può usare:
  
-==== Mostrare l'URL del repository ====+<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 remote show origin+git log path/to/file 
 +git checkout <commit_id> path/to/file
 </code> </code>
-===== Creare un 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.+==== Colors ====
  
-Ad esempio per marcare la versione corrente con il nome **print3d-1.0** si esegue:+Disable GUI colors:
  
 <code> <code>
-git tag -a print3d-1.0+git config --global color.ui false
 </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):+==== Locally Committed Differences ==== 
 + 
 +Per vedere le differenze tra il master remoto e quello locale (**ATTENZIONE** questo comando non controlla la versione ultima presente sul repository, lavora sui dati salvati localmente!):
  
 <code> <code>
-git log --pretty=oneline +git diff --name-only remotes/origin/master..master
-..+
-d7dd3e5c44023bfefc6a6c649506e3e029929b4c Added a 3D printable OpenSCAD model. +
-... +
-git tag -a print3d-1.0 d7dd3e5+
 </code> </code>
  
-Infine bisogna salvare sul repository remoto (origin) il nuovo tag:+L'opzione ''%%--name-only%%'' limita l'output al solo nome dei file cambiati. 
 + 
 +==== Mostrare l'URL del repository ====
  
 <code> <code>
-git push origin print3d-1.0+git remote show origin
 </code> </code>
  
doc/appunti/prog/git.txt · Last modified: 2024/02/12 11:07 by niccolo