2013-09-04 1 views
2

Хорошо, я знаю, что эта команда работает, но у меня есть глупый вопрос, на который я не мог ответить.Что такое поток для обновления svn в этом сценарии?

Предположим, у меня есть репозиторий svn с файлом с именем a.txt, и у него есть номер в слова X, User A проверяет его и локально меняет его на Y в a.txt. Теперь он хочет зафиксируйте его, поэтому, прежде чем делать это, он обновляет SVN. Поэтому в идеале должно произойти, что обновление SVN должно вызвать конфликт, потому что оба этих файла отличаются друг от друга. Но в моем случае выполняется обновление SVN и не сообщается о текущих изменениях между репозиторием и рабочей копией.

Может ли кто-нибудь сказать мне, что мои рассуждения верны? По-моему, этот сценарий в точности похож на стандартный конфликт svn между двумя пользователями.

Редактировать: Глядя на ответ sharptooth, Понятно, что мои аргументы неверны, Так кто может предоставить обзор потока обновления svn ? Т.е. если у меня есть рабочая копия R repo и W, что делает svn update при вычислении diff?

ответ

2

Ваша местная рабочая копия содержит все файлы в исходном состоянии для текущей версии. Эти исходные файлы хранятся в папке .svn. Размер папки .svn по существу равен размеру ваших файлов проекта. При выпуске обновления SVN-клиент обновит эту .svn-папку до последней версии, а затем попытается обновить все ваши рабочие файлы. Если какой-то файл изменен, он попытается объединить изменения в рабочий файл. Если он не сможет слиться, он будет жаловаться на конфликт. Это происходит, если и новая редакция, и рабочий файл изменили одну и ту же строку в файле. Затем вам нужно решить конфликт, имея в виду, что было старым, что появилось из хранилища, и ваши собственные изменения.

После того, как вы выдаете фиксацию, клиент SVN сначала проверяет, имеет ли ваша рабочая копия самую последнюю ревизию, и если она отправляет серверу все различия между вашими рабочими файлами и файлами в папке .svn. Если все идет хорошо, то он копирует все разные рабочие файлы в папку .svn, поэтому папка .svn синхронизируется с репозиторием на сервере.

2

В SVN «checkout» - это операция только с клиентом, а изменение рабочей копии - это операция только для клиента, и репозиторий никогда не знает о них. Поскольку никто не изменил репозитарную копию файла, нет никаких оснований для конфликта. Был бы конфликт, если бы какой-либо пользователь B совершил изменение в том же файле между моментом пользователя. Последний обновленный (или вычеркнутый) файл и момент, когда пользователь A выполняет данное обновление.

0

'svn update' не показывает конфликт из-за того, что сначала он позволяет пользователю переопределить свои локальные изменения по умолчанию. Это означает, что он будет конфликтовать в случае, когда какой-либо другой пользователь совершил другое дело в том же месте, где вы изменили файл локально, иначе он не найдет конфликт. Возможно, вам хорошо известно, что вы можете увидеть свои изменения, запустив «svn diff» даже после обновления.

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