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:

  1. 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
    
  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
    
  3. 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
    
  4. 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 .



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow