Исходя из опыта SVN, одна из самых сложных вещей, к которой нужно привыкнуть при работе с системами DVCS, - это то, как все они, похоже, рассматривают любое незавершенное изменение, как бомбу замедленного действия.
В Mercurial, если вы пытаетесь получить изменения и у вас есть какие-либо незафиксированные изменения в вашей рабочей копии, вам нужно перепрыгнуть через обручи, чтобы она просто объединяла входящие изменения. Попробуйте переключать ветви? Это заставит вас отложить все на полку, и тогда вам придется немедленно отложить все это на другом конце. (У SVN нет проблем ни с одним из этих сценариев.)
Git примерно так же. Я работаю бок о бок с другим разработчиком над проектом, и я просто попытался выбрать один из его коммитов в мою форк. Он отказался позволить мне, потому что у меня были незафиксированные изменения в моей рабочей копии, в совершенно других файлах, чем те, которые были изменены в его коммите. Там даже нет варианта слияния; по-видимому, я должен сначала спрятать свои изменения!
Если бы человек относился к чему-то совершенно безвредному с такой чрезвычайной осторожностью, я бы назвал это «фобией», иррациональным страхом, который следует рассматривать как психическое расстройство. Но Git и Mercurial были разработаны двумя разными командами разумных, рациональных разработчиков, поэтому мне интересно, знают ли они что-то, о чем я не знаю.
Есть ли техническая причина, которая оправдывает такое отношение к незавершенным изменениям? И если да, то почему рассматриваемая проблема существует только на DVCS?