Есть ли способ принудительно обновить файл SVN перед блокировкой этого файла?

#svn #version-control #tortoisesvn

Вопрос:

Вопрос: Есть ли в SVN способ принудительно обновить файл, когда двоичный файл заблокирован? Это, по-видимому, решит проблему, с которой мы сталкиваемся ниже, путем принудительного действия блокировки для обновления файла до последней версии перед редактированием.

Предыстория: Я использую SVN (TortoiseSVN) на работе для контроля версий в качестве инженера-электрика. Многие файлы, которые у нас есть в SVN, являются двоичными файлами дизайна, которые не могут быть объединены в случае конфликта. В этих двоичных файлах дизайна у нас есть набор свойств «svn:требуется блокировка».

Проблема: У нас было несколько случаев, когда два инженера (Eng A и Eng B) проверяли двоичный файл (файл 1) в одной и той же редакции (редакция 1000). Eng A блокирует файл 1, вносит изменения, а затем фиксирует файл 1, что означает, что у Eng A теперь есть файл 1 с версией 1001.

Теперь Eng B хочет внести изменения в файл 1. Тем не менее, он все еще находится на версии 1000, хотя последние изменения в репозитории SVN относятся к версии 1001. Eng B блокирует файл 1, редактирует его, а затем фиксирует изменения и теперь находится в редакции 1002.

Проблема здесь в том, что, когда Eng B совершил коммит, его правка была основана не на изменениях Eng A в редакции 1001, а на его «устаревшей» редакции 1000. Это приводит к тому, что изменения Eng A в редакции 1001 стираются.

Ответ №1:

К сожалению, простое использование svn:needs-lock свойства не сработает в большинстве случаев. Это связано с тем, что svn попытается использовать разрешения на уровне файловой системы, чтобы сделать файл доступным только для чтения. Затем приложение двоичного файла должно сообщить пользователю, находится ли файл в состоянии только для чтения. Но большинство современных приложений просто удаляет тег «Только для чтения» и начинает перезаписывать. Вы можете прочитать больше о том, почему это не реализовано жестким способом, здесь. Информация здесь показывает «более мягкий» подход subversion к политике блокировки.

Я попытался внедрить более строгую политику блокировки, используя сценарии pre-lock и post-lock хук. Но становилось слишком много времени, чтобы поддерживать его с административной точки зрения.

Что творило чудеса без головной боли администратора, по крайней мере для небольших команд(10-15) pre-lock , post-lock так это уведомление и. Всякий раз,когда кто-то блокирует путь, людям в группе отправляется уведомление о том, что файл заблокирован, с именем пользователя, заблокировавшего путь, предупреждая пользователей не блокировать их или обновлять их. Когда блокировка снимается, группе отправляется другое уведомление, информирующее о том, что блокировка доступна для снятия.

Эта очень простая связь блокировки и разблокировки снизила скорость перезаписи работы почти до 0. Все еще были некоторые новички, которые просто начали работать, не проверяя, заблокирован файл или нет.