Ricerca…
Sintassi
- git worktree add [-f] [--detach] [--checkout] [-b <nuovo-ramo>] <percorso> [<ramo>]
- git worktree prune [-n] [-v] [--expire <expire>]
- git worktree list [--porcelain]
Parametri
Parametro | Dettagli |
---|---|
-f --force | Per impostazione predefinita, aggiungi dei rifiuti per creare un nuovo albero di lavoro quando <branch> è già stato estratto da un altro albero di lavoro. Questa opzione sostituisce quella protezione. |
-b <new-branch> -B <new-branch> | Con add, crea un nuovo ramo chiamato <new-branch> inizia da <branch> , e controlla <new-branch> nel nuovo albero di lavoro. Se <branch> è omesso, per impostazione predefinita HEAD . Di default, -b rifiuta di creare un nuovo ramo, se già esiste. -B sostituisce questa protezione, ripristinando <new-branch> in <branch> . |
--detach | Con Aggiungi, scollegare HEAD nel nuovo albero di lavoro. |
- [no-] checkout | Per impostazione predefinita, aggiungi controlli <branch> , tuttavia - --no-checkout può essere utilizzato per sopprimere il checkout per poter effettuare personalizzazioni, come la configurazione di sparse-checkout. |
-n --dry-run | Con la prugna, non rimuovere nulla; basta segnalare cosa rimuoverà. |
--porcellana | Con la lista, uscita in un formato facile da analizzare per gli script. Questo formato rimarrà stabile nelle versioni Git e indipendentemente dalla configurazione dell'utente. |
-v --verbose | Con prugna, segnala tutte le rimozioni. |
- expire <time> | Con la prugna, si espirano solo alberi di lavoro inutilizzati più vecchi di <time> . |
Osservazioni
Vedere la documentazione ufficiale per maggiori informazioni: https://git-scm.com/docs/git-worktree .
Utilizzo di un albero di lavoro
Hai ragione nel lavorare su una nuova funzione e il tuo capo chiede di sistemare qualcosa immediatamente. In genere, è possibile utilizzare git stash
per archiviare temporaneamente le modifiche. Tuttavia, a questo punto il tuo albero di lavoro è in uno stato di disordine (con file nuovi, spostati e rimossi e altri frammenti disseminati) e non vuoi disturbare i tuoi progressi.
Aggiungendo un albero di lavoro, si crea un albero di lavoro temporaneo collegato per effettuare la correzione di emergenza, rimuoverlo una volta terminato e quindi riprendere la sessione di codifica precedente:
$ git worktree add -b emergency-fix ../temp master
$ pushd ../temp
# ... work work work ...
$ git commit -a -m 'emergency fix for boss'
$ popd
$ rm -rf ../temp
$ git worktree prune
NOTA: in questo esempio, la correzione si trova ancora nel ramo di emergenza. A questo punto probabilmente vorrai git merge
o git format-patch
e in seguito rimuovere il ramo di emergenza-fix.
Spostare un albero di lavoro
Attualmente (a partire dalla versione 2.11.0) non esiste alcuna funzionalità integrata per spostare un albero di lavoro già esistente. Questo è elencato come un bug ufficiale (vedi https://git-scm.com/docs/git-worktree#_bugs) .
Per ovviare a questa limitazione è possibile eseguire operazioni manuali direttamente nei file di riferimento. .git
.
In questo esempio, la copia principale del repository si trova in /home/user/project-main
e il worktree secondario si trova in /home/user/project-1
e vogliamo spostarlo in /home/user/project-2
.
Non eseguire alcun comando git tra questi passaggi, altrimenti il garbage collector potrebbe essere attivato e i riferimenti all'albero secondario possono essere persi. Esegui questi passaggi dall'inizio fino alla fine senza interruzioni:
Modifica il file
.git
del worktree in modo che punti alla nuova posizione all'interno dell'albero principale. Il file/home/user/project-1/.git
dovrebbe ora contenere quanto segue:gitdir: /home/user/project-main/.git/worktrees/project-2
Rinominare il worktree all'interno della directory
.git
del progetto principale spostando la directory del worktree esistente al suo interno:$ mv /home/user/project-main/.git/worktrees/project-1 /home/user/project-main/.git/worktrees/project-2
Cambia il riferimento all'interno di
/home/user/project-main/.git/worktrees/project-2/gitdir
per scegliere la nuova posizione. In questo esempio, il file avrebbe il seguente contenuto:/home/user/project-2/.git
Infine, sposta il tuo worktree nella nuova posizione:
$ mv /home/user/project-1 /home/user/project-2
Se hai fatto tutto correttamente, elencando i percorsi di lavoro esistenti dovresti fare riferimento alla nuova posizione:
$ git worktree list
/home/user/project-main 23f78ad [master]
/home/user/project-2 78ac3f3 [branch-name]
Ora dovrebbe anche essere sicuro eseguire git worktree prune
.