2009-04-13 2 views
25

У меня возник вопрос о версии BASE в svn. Я знаю, что это первоначальная версия элемента с момента последнего обновления, и svn diff и статус в основном работают против этой версии. Когда обновляется BASE? Обновляется ли он в HEAD при запуске обновления? Всегда ли это верно, даже если во время обновления произошел конфликт? Что BASE имеет конфликт? Есть ли у него версия от моего последнего обновления (до самого последнего обновления, вызвавшего конфликт) или будет ли она обновлена ​​до HEAD, даже если есть конфликт?
Также, когда выполняется svn commit, я предполагаю, что BASE обновляется с моими локальными изменениями, и на данный момент BASE, HEAD и моя локальная копия все одинаковы? Если фиксация прошла успешно.Когда svn BASE становится равным HEAD

ответ

38

ГОЛОВА является последней ревизии в хранилище. BASE - это последняя ревизия, которую вы получили в репозитории. Они одинаковы после успешной фиксации или обновления.

При внесении изменений ваши файлы отличаются от BASE-копий. Когда вы вернетесь, они вернутся к соответствию версии BASE. Когда вы получаете конфликт, вы не обновляете репозиторий. Скорее, ваши файлы считаются «редактируемыми», как если бы вы вносили изменения. После того, как вы разрешите конфликты, вы, по сути, решили, как будут выглядеть финальные файлы, и тогда вы их совершите, как обычно. Итак, конфликты похожи на случай специального редактирования.

+3

Они те же, хотя и ненадолго, после обновления, хотя и не обязательно после фиксации. Рассмотрим каталоги и «смешанные ревизионные рабочие копии». – bendin

+0

Очевидно, что создание этих «смешанных ревизионных рабочих копий», что означает, что вы можете создать фиксацию без полного знания того, что происходит, является следствием одного из «основных правил Subversion». –

7

BASE - это ревизия вашей рабочей копии, как она существует в репозитории. Другими словами, ваша ревизия без внесенных вами изменений. Итак, если вы svn update файл или папку для HEAD, то BASE и HEAD равны.

Когда есть конфликт, BASE становится ревизией перед фиксацией, которая противоречила вашей рабочей копии.

Запустить svn info по вопросу о пересмотре базы данных.

Revision Specifiers

0

Теория: После успешного рекурсивного обновления или переключения базовой версии всех ваших файлов становится головкой. После фиксации или частичного обновления некоторые файлы могут быть в редакции HEAD, но только после обновления, которое не пропускает файлы, вы можете быть уверены, что все файлы находятся в одной и той же версии. (Причины для пропуска - это неверующие препятствия или конфликты).

Но, зачем вам это нужно знать. Subversion должен знать это внутренне, но это знание не должно иметь большого значения для пользователя в большинстве случаев. (Subversion автоматически предупреждает вас, когда файлы устарели).

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

+1

Я просто хотел выяснить, как работает svn и его детали реализации. Спасибо за ваш ответ. – HeretoLearn

3

Это важно, когда вы просматриваете журналы, потому что журнал svn без url показывает ваш журнал BASE, но с URL-адресом вашего журнала HEAD, поэтому я всегда использую «svn log -rHEAD: 1», чтобы увидеть все изменения.

Смежные вопросы