Git worktree o submodule: come scegliere
I blocchi sono casi diversi, non un unico script. Scegli il caso del tuo repository. Sostituisci branch, percorsi e VERIFIED_COMMIT prima dell’uso. I comandi di annullamento valgono solo per la propria operazione attiva; non eseguire entrambe le alternative.
Risposta breve
Usa worktree per un altro checkout dello stesso repository in parallelo o per rivedere un branch. Usa submodule quando il padre deve registrare un commit specifico di un altro repository come dipendenza. Uno aggiunge una directory alla storia condivisa; l’altro incorpora storia versionata separatamente con una selezione nel padre.
| Scelta | Worktree | Submodule |
|---|---|---|
| Storia | Stesso repository; oggetti e riferimenti condivisi | Repository figlio separato; il padre registra un commit |
| File | HEAD, indice e directory propri | Checkout figlio e pin confermato/preparato possono differire |
| Versione | Branch o commit dello stesso repository | Commit figlio scelto, non solo .gitmodules |
| Aggiornamento | Esaminare e integrare il branch scelto | Checkout del pin registrato; --remote è un’altra scelta |
| Limite | Di norma un checkout per branch; non isola permessi | Supporto incompleto in più worktrees; lavoro figlio separato |
Esempio e condizioni
Determina prima chi gestisce la storia. Due agenti con correzioni alternative a un’applicazione normalmente richiedono branch e alberi separati. Una libreria con propri rilasci può richiedere un pin. Nessuno è un sandbox di permessi: accesso ai file e agli agenti necessita di controlli separati.
Controlla prima di modificare
Un worktree collegato ha HEAD, indice e file propri, ma condivide oggetti e molti riferimenti. Permette di esaminare un altro branch senza sostituire il checkout attuale. Git normalmente impedisce lo stesso branch in due worktree. Gli oggetti condivisi non trasferiscono automaticamente modifiche non preparate.
git status --short
git branch --show-current
git worktree listConserva un riferimento o checkout separato
Esamina lo stato e crea review/worktree in ../topic-review. Usa git -C per quel checkout e confronta commit prima dell’integrazione scelta. Directory separate riducono la confusione tra attività, senza rendere compatibili le modifiche. Verifica l’integrazione ed evita due strumenti che cambiano contemporaneamente lo stesso checkout.
git worktree add -b review/worktree ../topic-review HEAD
git -C ../topic-review status --short
git -C ../topic-review branch --show-currentPrimo percorso
Submodule è un repository separato in un percorso del padre. L’albero confermato del padre registra un gitlink, normalmente modo 160000, a un commit figlio. Indice e checkout figlio possono indicare altri commit. .gitmodules descrive percorso e URL; il commit registrato seleziona la versione.
Scegli consapevolmente l’altro risultato
Per deps/library, controlla separatamente submodule status, gitlink di HEAD del padre, gitlink preparato e HEAD del figlio. Pull nel padre può cambiare il pin senza muovere il figlio. Submodule update usa la selezione registrata; --remote segue una scelta remota deliberata, diversa decisione di versione e non semplice pulizia dello stato.
git submodule status -- deps/library
git ls-tree HEAD -- deps/library
git ls-files --stage -- deps/library
git -C deps/library rev-parse HEAD
git --no-optional-locks -C deps/library status --shortLimiti ed eccezioni
Git documenta supporto incompleto dei submodule in più worktree. --recursive non rende ogni combinazione un ambiente isolato supportato. Controlla limiti e flusso reale di checkout e aggiornamento; valuta clone separato per stato indipendente. Questo confronto non è una ricetta universale per automatizzare la combinazione.
Conflitti e pulizia
Prima di rimuovere un worktree, controlla file locali e branch, poi usa worktree remove senza cancellare la cartella alla cieca. Mantieni branch utile o merge verificato. Prima di cambiare un pin, conferma e pubblica la modifica figlia nel suo processo affinché altri clone la ottengano; poi registra il pin nel padre.
git -C ../topic-review status --short
git worktree remove ../topic-review
git worktree listVerifica il risultato
Per worktree verifica branch, stato e integrazione. Per submodule confronta i tre stati e conferma che il pubblico previsto può scaricare l’oggetto figlio. Padre pulito non garantisce figli puliti. Nessuno conserva backup permanenti dei file senza commit; la verifica segue la relazione delle storie.
git worktree list
git submodule status -- deps/libraryDomande frequenti
Perché worktree? Altro branch senza sostituire il checkout. Quando submodule? Dipendenza versionata a parte e fissata nel padre. Perché evitarli? Regole separate di aggiornamento aggiungono coordinamento. Package manager, vendoring, subtree o clone distinto sono alternative per proprietà e consegna, senza un vincitore universale.
Esamina l’operazione in FluxGit
Usa la storia visiva e la vista delle modifiche di FluxGit per esaminare l’operazione e i commit pertinenti. Mantieni le verifiche di branch, condivisione e file locali dell’esempio. La pagina di download mostra build e piattaforme disponibili.