31 votes

Qu'est-ce qu'une cache?

J'ai fait des recherches sur Google et divers endroits pendant un certain temps, mais je n'ai pas trouvé de bonne réponse. Qu'est-ce qu'un stash et à quoi sert-il?

(Source de confusion : en utilisant Fuel avec Fossil, j'ai cliqué sur le bouton "Stash changes", j'ai vu des fichiers avec des points d'interrogation à l'intérieur, et je ne sais pas quoi en faire...)

45voto

jsexpert Points 704

Tout d'abord: comprenons pourquoi nous devons utiliser stash?

Pour comprendre ce qu'est stash, nous devons d'abord comprendre les 3 états. Git a un modèle intégré nommé 3 états qui est la structure interne de git pour travailler avec le dépôt local.

Diagramme des 3 états

Le "problème" avec les 3 états est qu'il y en a un par dépôt et non un par branche. Donc lorsque nous changeons de branche, la seule chose qui est modifiée est le HEAD qui pointe vers un commit différent.

Dans git, une branche n'est qu'un alias vers un commit donné, donc en changeant de branche comme expliqué précédemment, cela ne change que le HEAD tout en laissant le répertoire de travail et la zone de staging inchangés et en laissant toutes les modifications en l'état. [Le répertoire de travail est mis à jour avec les fichiers requis que la nouvelle branche possède, mais ce n'est pas partie de notre explication.]

Donc si nous ajoutons de nouveaux fichiers, en modifions d'autres et que maintenant nous voulons passer à une autre branche, nous aurons de la saleté laissée dans notre répertoire de travail et notre zone de staging comme le montre ci-dessous.

Nous avons un peu de travail sale nous suivant peu importe la branche sur laquelle nous travaillons maintenant.

insérer la description de l'image ici

Comment pouvons-nous travailler sur plusieurs branches?

La plupart des utilisateurs de git utilisent stash pour pouvoir travailler simultanément sur plusieurs branches. git stash est la manière basique d'y parvenir puisque git stash sauvegarde notre travail dans une zone distincte nommée stash.

Ensuite, nous pouvons vérifier le code à tout moment pour n'importe quelle branche donnée. insérer la description de l'image ici


Jusqu'ici tout va bien.

Où est le problème et pourquoi ne pas utiliser stash en premier lieu?

Le problème est que lorsque nous utilisons stash, nous n'avons pas la capacité de vraiment travailler sur plusieurs branches puisque nous devrons stasher à chaque fois que nous voulons changer de branche.

Un autre problème est que nous pouvons rapatrier le code stash dans la mauvaise branche et alors nous devons déterminer quels fichiers sont les bons, si nous avons fait une erreur.

Comment pouvons-nous vraiment travailler sur plusieurs branches?

Git avait cette capacité depuis 2007. Sous le dossier contrib il y avait une commande cachée nommée 'new-workdir' qui a été ensuite ajoutée à git dans la version 2.5 et a été renommée en git worktree.

git worktree

git worktree créera un nouveau dossier de travail nous permettant de travailler sur plusieurs branches en même temps. Chaque copie pointera vers le dépôt d'origine tandis que les 3 états sont une copie nouvelle et fraîche. Cela nous évite d'utiliser git stash ou même de cloner un nouveau dépôt, puisque ces worktrees partagent le même dépôt, nous pouvons vérifier n'importe quelle branche sur n'importe quel worktree, nous pouvons faire un cherry-pick ou un merge et tout se fera localement sur notre machine.

Utilisation:

git worktree add 

créera un autre dossier sur votre ordinateur vous permettant de travailler sur une branche différente simultanément.

Cela vous permettra de faire des expériences sur le nouveau worktree sans avoir aucun effet sur le dépôt lui-même. Dans l'image ci-jointe, vous pouvez voir qu'il y a 2 dossiers de travail séparés mais tous les deux utilisent un seul dépôt et partagent le contenu.

insérer la description de l'image ici

16voto

CodeGnome Points 25402

Fossil, Git et éventuellement d'autres systèmes de contrôle de révision partagent l'idée d'une stash. Pro Git a une section sur le stockage. Il dit, en partie :

Le stockage prend l'état sale de votre répertoire de travail - c'est-à-dire vos fichiers suivis modifiés et les changements mis en scène - et le sauvegarde sur une pile de changements inachevés que vous pouvez réappliquer à tout moment

En d'autres termes, c'est une façon de sauvegarder votre travail actuel tout en faisant autre chose, sans faire un "vrai" commit ou affecter l'historique de votre dépôt.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X