Venant d'un arrière-plan SVN, l'une des choses les plus difficiles à s'habituer lorsque vous travaillez avec des systèmes DVCS est la façon dont ils semblent tous considérer tout changement non engagé, comme une bombe à retardement.
Dans Mercurial, si vous essayez de récupérer des modifications et que vous avez des modifications non validées dans votre copie de travail, vous devez sauter à travers des cadres pour obtenir simplement la fusion des modifications entrantes. Essayez de changer de branche? Cela vous obligera à tout ranger et ensuite vous devrez immédiatement tout ranger à l'autre bout. (SVN n'a aucun problème avec l'un ou l'autre de ces scénarios.)
Git est à peu près la même chose. Je travaille côte à côte avec un autre développeur sur un projet, et j'ai juste essayé de choisir l'un de ses commits dans ma fourchette. Il a refusé de me laisser car j'ai des modifications non validées dans ma copie de travail, sur des fichiers complètement différents de ceux modifiés dans son commit. Il n'y a même pas d'option de fusion; apparemment, je dois d'abord cacher mes modifications!
Si une personne devait traiter quelque chose de complètement inoffensif avec une extrême prudence, je l'appellerais une "phobie", une peur irrationnelle qui devrait être considérée comme un trouble mental. Mais Git et Mercurial ont été conçus par deux équipes différentes de développeurs intelligents et rationnels, je dois donc me demander s'ils savent quelque chose que je ne connais pas.
Y a-t-il une raison technique qui justifie cette attitude vis-à-vis des changements non engagés? Et si oui, pourquoi le problème en question ne semble-t-il exister que sur les DVCS?