svn Какая разница между HEAD, BASE и COMMITTED - отличия и уточнения смысла, сравнение с предыдущим svn diff -r

Официальная документация не слишком внятно проясняет ситуацию:

HEAD
    Последняя (или «самая новая») правка хранилища

BASE
    Номер правки элемента в рабочей копии. Если элемент редактировался, то «BASE версия» соответствует тому, как выглядел этот элемент до внесения локальных изменений.

COMMITTED
    Правка, в которой элемент последний раз изменялся (предшествующая либо равная BASE).

PREV
    Правка, непосредственно предшествующая той правке, в которой элемент был последний раз изменен. (То есть, фактически, COMMITTED - 1.)

Чем всё таки они отличаются

  • HEAD -- последняя зафиксированная правка (/номер) в репозитории (центральном хранилище) -- новейшее его состояние
  • BASE -- последняя правка (/номер) в вашей локальной рабочей копии (может отличаться от HEAD, если кто-то другой выполнил фиксацию commit, а вы ещё не обновляли свою рабочую копию)
  • COMMITTED -- последняя правка в ходе которой изменялся именно данный файл или указанная директория -- либо совпадает с BASE, если объект (файл или папка) изменялся при последнем коммите, о котором известно локальной рабочей копии, или же имеет номер меньший, чем BASE, (более ранниий) в случае если в последнем зафиксированном изменении (коммите) данный объект не затрагивался.

    То есть -- если при последнем коммите данный объект не изменился, что номер правки COMMITTED дял него будет отличным от его же номера, соответствующего BASE.

О командах сравнения с COMMITTED (svn diff -r)

Команда типа:

svn diff -r BASE:COMMITTED core/someobj.php

никогда не покажет разницы между изменениями -- так как BASE и COMMITTED либо совпадают (как написано выше), тогда разницы, ясное дело, нет. Либо не совпадают - но это значит что файл с последнего коммита (как раз его номер и "хранит" COMMITTED) не изменился.

Обычно используют сравнение версии COMMITTED с предыдущим коммитом:

svn diff -r PREV:COMMITTED core/someobj.php

По материалам:

  • stackoverflow.com/questions/742772/when-does-svn-base-become-equal-to-the-head
  • stackoverflow.com/questions/39077644/svn-difference-betwenn-base-committed#