git travaillant sur deux branches simultanément


168

J'ai un projet avec de nombreuses branches.

Je souhaite travailler sur plusieurs branches simultanément sans basculer d'avant en arrière avec git checkout.

Existe-t-il un moyen de le faire en plus de copier tout le référentiel ailleurs?



1
Git 2.5+ (Q2 2015) le supportera officiellement avec la nouvelle commande git checkout --to=<path>. Voir ma réponse ci-dessous .
VonC

2
En fait, la commande sera git worktree add <path> [<branch>](Git 2.5 rc2)
VonC

Réponses:


156

Git 2.5+ (Q2 2015) prend en charge cette fonctionnalité!

Si vous avez un dépôt git cool-app, cd vers root ( cd cool-app), exécutez git worktree add ../cool-app-feature-A feature/A. Ce contrôle sur la branche feature/Adans son propre répertoire dédié, cool-app-feature-A.

Cela remplace un script plus ancien contrib/workdir/git-new-workdir, avec un mécanisme plus robuste où ces arbres de travail «liés» sont en fait enregistrés dans le nouveau $GIT_DIR/worktreesdossier principal du référentiel (afin de fonctionner sur n'importe quel système d'exploitation, y compris Windows).

Encore une fois, une fois que vous avez cloné un dépôt (dans un dossier comme /path/to/myrepo), vous pouvez ajouter des arbres de travail pour différentes branches dans différents chemins indépendants ( /path/to/br1, /path/to/br2), tout en ayant ces arbres de travail liés à l'historique du dépôt principal (plus besoin d'utiliser une --git-diroption)

Pour en savoir plus, consultez " Plusieurs répertoires de travail avec Git? ".

Et une fois que vous avez créé un arbre de travail, vous pouvez le déplacer ou le supprimer (avec Git 2.17+, Q2 2018).


2
Cela devrait être la nouvelle réponse acceptée, puisque 2.5.X est maintenant la version recommandée, même pour Windows i.imgur.com/oQvUhVl.png git-scm.com/download/win
RAnders00

40

Jetez un œil à $ GIT_SRC_DIR / contrib / workdir / git-new-workdir .

un script simple pour créer un répertoire de travail qui utilise des liens symboliques pour pointer vers un référentiel existant. Cela permet d'avoir différentes branches dans différents répertoires de travail mais tous à partir du même référentiel.



2
Je sais que c'est vieux, mais pourriez-vous donner quelques explications s'il vous plaît.
dav_i

@dav_i: Comme ça ?
Stefan Näwe

@ StefanNäwe Ah j'étais confus - trop tôt le matin ... mis à jour votre réponse avec un lien.
dav_i


0

Comme notre ami VonC l'a dit il y a cinq mois, il y a maintenant une nouvelle fonctionnalité depuis la version 2.5.x qui fait le travail. git worktree .


N'est-ce pas la même chose que ce que j'ai mentionné il y a 5 mois dans ma réponse ci - dessus ?
VonC

Ops. Maintenant, je me sens mal. Je n'ai pas prêté attention à cela. Ma faute.

0

Git prend en charge plusieurs arbres de travail en même temps. Pour plus d'informations, consultez:

Cependant, il est très difficile de prendre en charge plusieurs arbres de travail avec des ID. Par exemple, il s'agit d'une demande d'amélioration dans JGet (eclipse ID) pour prendre en charge worktree.

Donc, vous devez gérer le projet manuellement (ligne de commande) avec beaucoup de problèmes ou travailler avec un seul arbre de travail dans un IDE.


Pour l'instant, cette réponse n'est pas correcte. Veuillez mettre à jour la réponse.
narendra-choudhary

-2

Pas vraiment car Git ne prend en charge qu'une copie de travail des données du référentiel dans le répertoire du référentiel.

Si vous souhaitez valider / extraire le même référentiel avec deux copies de travail différentes, vous pouvez créer un référentiel nu et le cloner en deux copies de travail .

Chaque fois que vous avez terminé quelque chose, vous poussez simplement vers le référentiel nu "principal" .

Quelques indices:

man git-clone

git clone --bare


3
"Git ne prend en charge qu'une copie de travail des données du référentiel" -1 Non vrai, voir la réponse à propos de git-new-workdir.
sleske

C'est une bonne idée. Clonez-le simplement deux fois.
Serge Vinogradoff
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.