Git School · FluxGit

Git worktree o submodule: come scegliere

FluxGit ·

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.

SceltaWorktreeSubmodule
StoriaStesso repository; oggetti e riferimenti condivisiRepository figlio separato; il padre registra un commit
FileHEAD, indice e directory propriCheckout figlio e pin confermato/preparato possono differire
VersioneBranch o commit dello stesso repositoryCommit figlio scelto, non solo .gitmodules
AggiornamentoEsaminare e integrare il branch sceltoCheckout del pin registrato; --remote è un’altra scelta
LimiteDi norma un checkout per branch; non isola permessiSupporto 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 list

Conserva 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-current

Primo 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 --short

Limiti 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 list

Verifica 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/library

Domande 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.

Riferimenti ufficiali Git

Percorsi correlati

Scarica FluxGit