Вопрос

Привет, мне интересно, есть ли у сервера SVN способ автоматически назначать свойство svn:needs-lock любому двоичному, а не текстовому файлу.

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

Это было полезно?

Решение

Отредактируйте файл конфигурации svn и добавьте запись для автоматических реквизитов или используйте svn:auto-props свойство с поддержкой версий для клиентов SVN 1.8 и более поздних версий. Читать SVNBook!

РЕДАКТИРОВАТЬ:

Начиная с SVN 1.8, вы можете применить svn:auto-props в корневой путь вашего репозитория.Видеть это Release Note и обновлен Глава SVNBook 1.8.

Другие советы

Apache Subversion 1.8 представил Конфигурация, продиктованная репозиторием функция, требующая Клиент SVN 1.8, но сервер 1.8 не обязателен, поскольку это функция на стороне клиента.

В Subversion 1.8 вы можете настраивать шаблоны автоматических реквизитов в репозитории, используя новую Subversion. svn:auto-props унаследованное имущество.

Например, установите svn:auto-props значение для *.exe = svn:needs-lock=* свойство в корне вашего репозитория (или пути к репозиторию, который представляет корень проекта).Это приведет к каждый вновь добавленный *.exe-файл, имеющий svn:needs-lock=* примененное свойство.

Вы можете хранить многострочные значения в свойствах Subversion, поэтому вы можете добавить следующий стандартный шаблон svn:needs-lock и MIME в svn:auto-props:

*.bmp = svn:mime-type=image/bmp;svn:needs-lock=*
*.gif = svn:mime-type=image/gif;svn:needs-lock=*
*.ico = svn:mime-type=image/x-icon;svn:needs-lock=*
*.jpeg = svn:mime-type=image/jpeg;svn:needs-lock=*
*.jpg = svn:mime-type=image/jpeg;svn:needs-lock=*
*.png = svn:mime-type=image/png;svn:needs-lock=*
*.tif = svn:mime-type=image/tiff;svn:needs-lock=*
*.tiff = svn:mime-type=image/tiff;svn:needs-lock=*    
*.doc = svn:mime-type=application/x-msword;svn:needs-lock=*
*.docx = svn:mime-type=application/x-msword;svn:needs-lock=*
*.jar = svn:mime-type=application/octet-stream;svn:needs-lock=*
*.odc = svn:mime-type=application/vnd.oasis.opendocument.chart;svn:needs-lock=*
*.odf = svn:mime-type=application/vnd.oasis.opendocument.formula;svn:needs-lock=*
*.odg = svn:mime-type=application/vnd.oasis.opendocument.graphics;svn:needs-lock=*
*.odi = svn:mime-type=application/vnd.oasis.opendocument.image;svn:needs-lock=*
*.odp = svn:mime-type=application/vnd.oasis.opendocument.presentation;svn:needs-lock=*
*.ods = svn:mime-type=application/vnd.oasis.opendocument.spreadsheet;svn:needs-lock=*
*.odt = svn:mime-type=application/vnd.oasis.opendocument.text;svn:needs-lock=*
*.pdf = svn:mime-type=application/pdf;svn:needs-lock=*
*.ppt = svn:mime-type=application/vnd.ms-powerpoint;svn:needs-lock=*
*.ser = svn:mime-type=application/octet-stream;svn:needs-lock=*
*.swf = svn:mime-type=application/x-shockwave-flash;svn:needs-lock=*
*.vsd = svn:mime-type=application/x-visio;svn:needs-lock=*
*.xls = svn:mime-type=application/vnd.ms-excel;svn:needs-lock=*
*.zip = svn:mime-type=application/zip;svn:needs-lock=*

Следует отметить, что метод auto props необходимо настроить на каждом используемом клиенте SVN.Поэтому, когда вы настраиваете нового разработчика или существующего разработчика на новом компьютере, вы должны не забыть выполнить эту настройку.

Если вы все используете ЧерепахаSVN, вы можете установить тсвн: автопропс в базовой папке каждого оформления заказа, и оно будет учитываться всеми клиентами TortoiseSVN.

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

Если у вас есть питон-фу, РепоГард (преемник СВНЧекер), похоже, это тоже может быть полезно.

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

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

http://www.orcaware.com/svn/wiki/Automatic_lock-modify-unlock

Используйте хук предварительной фиксации

#!/bin/bash

REPOS="$1"
TXN="$2"

SVNLOOK=/usr/bin/svnlook
ICONV=/usr/bin/iconv

SVNLOOKOK=1

# Check files for svn:needs-lock property
# Exit on all errors.
set -e

echo "`$SVNLOOK changed -t "$TXN" "$REPOS"`" | while read REPOS_PATH
do
 if [[ $REPOS_PATH =~ (A|M|U)[[:blank:]]{3}(.*)\.(.*) ]]
 then
  if [ ${#BASH_REMATCH[*]} -ge 2 ]
    then
  FILENAME=${BASH_REMATCH[2]}.${BASH_REMATCH[3]};

  # Make sure every file has the svn:needs-lock property set
   if [ "" == "`$SVNLOOK propget -t \"$TXN\" \"$REPOS\" svn:needs-lock \"$FILENAME\" 2> /dev/null`" ]
    then
    ERROR=1;
    echo "" >&2
    echo "svn:needs-lock property has to be set on \"$FILENAME\"" >&2
    echo "" >&2
   fi
  fi
 fi
 test -z $ERROR || (exit 1)
done

# All checks passed, so allow the commit.
exit 0

и крючок предварительной блокировки

#!/bin/bash

REPOS="$1"
PATH="$2"
USER="$3"

# If a lock exists and is owned by a different person, don't allow it
# to be stolen (e.g., with 'svn lock --force ...').

# (Maybe this script could send email to the lock owner?)
SVNLOOK=/usr/bin/svnlook
GREP=/bin/grep
SED=/bin/sed

LOCK_OWNER=`$SVNLOOK lock "$REPOS" "$PATH" | \
            $GREP '^Owner: ' | $SED 's/Owner: //'`

# If we get no result from svnlook, there's no lock, allow the lock to
# happen:
if [ "$LOCK_OWNER" = "" ]; then
  exit 0
fi

# If the person locking matches the lock's owner, allow the lock to
# happen:
if [ "$LOCK_OWNER" = "$USER" ]; then
  exit 0
fi
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top