2010-02-19 7 views
5

J'ai essayé d'utiliser Git sur mes projets personnels pendant presque un mois maintenant. J'ai une très bonne compréhension de l'ensemble des commandes de base et bien que son expérience utilisateur ne soit pas géniale, je continue à aimer Git plus que les autres VCS que j'ai utilisés dans le passé.Comment le concept Git de l'index améliore-t-il ou modifie-t-il votre flux de travail?

Cependant, un concept que je ne pense toujours pas avoir "obtenu" est le vrai but de l'Index. J'ai ce sentiment que je ne profite pas d'un avantage qu'il est destiné à donner.

Quel est le but d'avoir une zone de transit? Venant du pays SVN, je suis tellement habitué à traiter ma copie de travail comme ma zone de transit et mes instantanés pour mes engagements pris de cela.

Alors, ma question est:

Qu'est-ce niveau supplémentaire d'indirection vous donner? Comment l'index a-t-il amélioré ou modifié votre flux de travail normal? Pouvez-vous fournir des scénarios où avoir l'index vous a permis de faire quelque chose qui aurait été gênant de le faire?

+0

Voir aussi http://stackoverflow.com/questions/1836801/git-should-i-ignore-the-index-or-is-there-a-killer-application-for-it –

+0

+1 pour formuler le question de titre si bien. – WinWin

Répondre

7

Il ya certainement des moments où je commence à travailler sur une fonctionnalité ou une correction de bogue, et puis remarquez une faute de frappe rapide ou une autre petite chose (peut-être une ligne) à corriger. Au lieu de laisser tomber tout mon travail, ou même en utilisant git stash, je peux juste commettre que juste ce minuscule changement via l'index; tout mon autre travail est toujours là, mais maintenant le commit est plus spécifique: il montre seulement ce petit correctif, au lieu de se faire enterrer dans des dizaines d'autres lignes de changements. Il est conçu pour un historique beaucoup plus propre, ce qui facilite la recherche de modifications dans les journaux, car elles ne sont pas mélangées avec d'autres validations.

En cas de conflits de fusion (compliqués, volumineux), il est également intéressant de pouvoir ajouter chaque modification apportée à l'index, donc je sais quels conflits j'ai corrigés et lesquels sont restés à traiter.

3

En parlant personnellement, je suis en train de subir un énorme conflit de fusion en ce moment, et je dois réparer les éléments un par un. Dans ce cas, je peux effectuer un 'git add' sur les fichiers que j'ai fusionnés, tout en gardant une trace séparée de ceux que j'ai besoin de corriger. Une fois que je suis passé par là, je peux exécuter des compilations de test, puis rajouter toutes les modifications supplémentaires nécessaires, avant de valider dans le référentiel.

1

Parfois, je vais faire un 'git cherry-pick -n' ou 'git merge --squash' pour tirer un tas de changements d'une branche étrangère, puis je débloquer tous ces changements et utiliser git interactive ajouter (git add -i) pour mettre en scène seulement les morceaux que je veux. Vous pouvez même sélectionner les "mecs" d'un diff et laisser le reste dans un état modifié (idéal pour désassembler des choses qui auraient dû être séparées).

Aussi utile lorsque vous éditez un tas de fichiers mais vous décidez que vous devriez vraiment valider tous les fichiers liés à X comme un seul commit avant d'aller plus loin, donc vous n'avez qu'à les mettre en scène, les valider et continuer à travailler les autres fichiers.

J'aime aussi la façon dont la zone de transit fonctionne avec les fusions pour vous montrer ce qui n'a pas été mis en scène automatiquement. Bien sûr, la zone d'index n'est pas strictement nécessaire pour cela mais je trouve le comportement par défaut de diff qui vous montre une différence de seulement les éléments non-index pour être utile donc vous n'êtes pas dérangé de voir les trucs de scène sauf si vous utilisez diff - -cache