git lavorando su due rami contemporaneamente


168

Ho un progetto con molti rami.

Mi piacerebbe lavorare su più rami contemporaneamente senza passare avanti e indietro git checkout.

C'è un modo in cui posso farlo oltre a copiare l'intero repository da qualche altra parte?



1
Git 2.5+ (Q2 2015) supporterà ufficialmente questo con il nuovo comando git checkout --to=<path>. Vedi la mia risposta qui sotto .
VonC,

2
In realtà, il comando sarà git worktree add <path> [<branch>](Git 2.5 rc2)
VonC

Risposte:


156

Git 2.5+ (Q2 2015) supporta questa funzione!

Se hai un repository git cool-app, cd to root ( cd cool-app), esegui git worktree add ../cool-app-feature-A feature/A. Il ramo Questo controlla feature/Ain proprio nuova directory dedicata esso è, cool-app-feature-A.

Ciò sostituisce uno script più vecchio contrib/workdir/git-new-workdir, con un meccanismo più robusto in cui quegli alberi di lavoro "collegati" sono effettivamente registrati nella nuova $GIT_DIR/worktreescartella del repository principale (in modo che funzioni su qualsiasi sistema operativo, incluso Windows).

Ancora una volta, una volta clonato un repository (in una cartella simile /path/to/myrepo), è possibile aggiungere worktrees per diversi rami in diversi percorsi indipendenti ( /path/to/br1, /path/to/br2), pur avendo quegli alberi di lavoro collegati alla cronologia principale dei repository (non è più necessario utilizzare --git-dirun'opzione)

Vedi di più su " Directory di lavoro multiple con Git? ".

E una volta creato un worktree, puoi spostarlo o rimuoverlo (con Git 2.17+, Q2 2018).


2
Questa dovrebbe essere la nuova risposta accettata, poiché 2.5.X è ora la versione consigliata, anche per Windows i.imgur.com/oQvUhVl.png git-scm.com/download/win
RAnders00

40

Dai un'occhiata a $ GIT_SRC_DIR / contrib / workdir / git-new-workdir .

un semplice script per creare una directory di lavoro che utilizza collegamenti simbolici per puntare a un repository esistente. Ciò consente di avere rami diversi in directory di lavoro diverse ma tutte dallo stesso repository.



2
So che questo è vecchio, ma potresti fornire qualche spiegazione per favore.
dav_i,

@dav_i: Come questo ?
Stefan Näwe,

@ StefanNäwe Ah Ero confuso - troppo presto la mattina ... ho aggiornato la tua risposta con il link.
davi


0

Come ha detto il nostro amico VonC cinque mesi fa, ora c'è una nuova funzionalità dalla versione 2.5.x che fa il lavoro. git worktree .


Non è lo stesso di quello che ho menzionato 5 mesi fa nella mia risposta sopra ?
VonC,

Ops. Adesso mi sento male. Non ho prestato la giusta attenzione a questo. Colpa mia.

0

Git supporta più worktree contemporaneamente. Per ulteriori informazioni, vedere:

Tuttavia, è molto difficile supportare più worktree con ID. Ad esempio questa è una richiesta di miglioramento in JGet (eclipse ID) per supportare worktree.

Quindi, devi gestire il progetto manualmente (riga di comando) con molti problemi o lavorare con un singolo worktree in un IDE.


A partire da ora, questa risposta non è corretta. Si prega di aggiornare la risposta.
Narendra-Choudhary,

-2

Non proprio perché Git supporta solo una copia funzionante dei dati del repository all'interno della directory del repository.

Se si desidera eseguire il commit / pull nello stesso repository con due diverse copie di lavoro, è possibile creare un repository nudo e clonarlo su due copie di lavoro .

Ogni volta che hai finito qualcosa, devi semplicemente spingere nel repository nudo "principale" .

Alcuni suggerimenti:

man git-clone

git clone --bare


3
"Git supporta solo una copia funzionante dei dati del repository" -1 Non vero, vedi la risposta git-new-workdir.
sleske,

Questa è una bella idea. Basta clonarlo due volte.
Serge Vinogradoff,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.