Почему svn позволяет перезаписывать предыдущие коммиты?
Если над одним файлом работают два пользователя, и user A
совершает до user B
, user A
коммиты перезаписываются без предупреждения.
Почему это так и есть ли способ предотвратить это?
Это только что произошло здесь, и я должен был исправить это, исправляя изменения user A
сделал после user B
коммит.
Это кажется опасным, разве svn не может сказать, что база определенного файла не была обновлена?
1 ответ
SVN не просто перезаписать userA
s совершает, если 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
, и попросите их попробовать еще раз.