Почему svn позволяет перезаписывать предыдущие коммиты?

Если над одним файлом работают два пользователя, и user A совершает до user B, user Aкоммиты перезаписываются без предупреждения.

Почему это так и есть ли способ предотвратить это?

Это только что произошло здесь, и я должен был исправить это, исправляя изменения user A сделал после user Bкоммит.

Это кажется опасным, разве svn не может сказать, что база определенного файла не была обновлена?

1 ответ

SVN не просто перезаписать userAs совершает, если userB явно просит это. Это не то, что может случиться случайно.

когда userB пытается зафиксировать свой файл, SVN покажет ошибку

Сейчас userB нужно будет сделать обновление SVN. В зависимости от типа файла это можно сделать двумя способами:

ASCII

SVN действительно предназначен для работы с текстовыми (ascii) файлами. Если вы выполните обновление SVN, оно "объединит" изменения из userA в userBс файлом. Это означает, что любые строки изменены userA будет изменен в userBрабочая копия. userB действительно следует рассмотреть слияние, чтобы убедиться, что изменения не нарушают то, что userB пытался сделать. Если оба пользователя изменили одни и те же строки, конфликт будет помечен. userB нужно будет пересмотреть конфликт, выяснить, что userA пытался выполнить, а затем вручную решить, что делать, чтобы сохранить изменения обоих пользователей.

двоичный

SVN не предназначен для объединения бинарных файлов. Когда слияние применимо, вам нужно полагаться на инструменты, которые действительно созданы специально для этого конкретного двоичного файла. когда userB выполняет обновление, возникнет конфликт и userB не сможет рассмотреть различия и объединить файлы. Если нет доступных инструментов слияния для этого конкретного двоичного типа, userB нужно будет принять userAверсии, а затем повторно внесите изменения в двоичный файл, используя любой инструмент, производящий этот двоичный файл.

userB может обойти этот рабочий процесс, сохранив копию своей рабочей копии, выполнив svn updateзатем восстановление копии и фиксация. Это вернет все userAизменения. Особенно в этом случае ASCII, это известно как чертов ход. В двоичном случае два пользователя должны по-настоящему общаться и решать, кому из них нужно будет повторить свою работу.

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

Если userB просто уничтожил большой объем работы, отказавшись от слияния, тогда вы всегда можете вернуться userB, и попросите их попробовать еще раз.

Другие вопросы по тегам