SVN : Needs-Lock을 자동으로 추가하십시오
-
22-08-2019 - |
문제
안녕하세요, SVN 서버가 텍스트가 아닌 이진이 아닌 파일에 SVN : Need-Lock 속성을 자동으로 할당하는 방법이 있는지 궁금합니다.
우리는 다소 소규모 개발자 팀을 보유하고 있지만 새로 생성 된 이진 파일 에이 속성을 설정하는 것을 기억하기를 기억하는 것은 모든 사람들에게 휴식을 취하고 있습니다.
해결책
SVN 구성 파일 편집 및 자동 소품 또는 사용에 대한 항목 추가 svn:auto-props
SVN 1.8 및 새로운 클라이언트를 갖춘 버전의 부동산. svnbook을 읽으십시오!
편집하다:
SVN 1.8에서 신청할 수 있습니다 svn:auto-props
저장소의 루트 경로에 대한 속성. 이것 좀 봐 릴리스 노트 그리고 업데이트되었습니다 SVNBOOK 1.8 장.
다른 팁
아파치 파괴 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=*
속성 적용.
멀티 라인 값을 전복 속성에 저장할 수 있으므로 다음 표준 SVN을 추가 할 수 있습니다 : Needs-Lock 및 Mime Pattern 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 클라이언트에서 구성되어야합니다. 따라서 새로운 개발자 또는 새 시스템에서 기존 개발자를 설정할 때는이 구성을 수행해야합니다.
모두 사용중인 경우 거북이, 당신은 그것을 설정할 수 있습니다 TSVN : 오토 프롭 각 체크 아웃의 기본 폴더에있는 속성은 모든 TortoisesVN 클라이언트가 영예 롭게됩니다.
정말로 그것을 못 박고 싶다면 사전 커밋 각 저장소에 훅. 그만큼 집행자 스크립트는이를 위해 쉽게 도구 될 수 있습니다.
Python-fu가 있다면 리포드 (후계자 svnchecker)도 유용 할 수있는 것 같습니다.
선택하더라도 리포지토리의 기존 파일에 속성을 소급 적으로 적용 할 수있는 방법이 없습니다. 그러나 파일의 다음 커밋에서 시행 할 수 있습니다.
이 Subversion Wiki에는 Needs-Lock을 자동으로 추가하는 방법과 설정을 보장하는 방법에 대한 다양한 옵션을 설명하는 페이지가 있습니다. 이 페이지는 또한 예제 스크립트 및 구성 세부 정보를 제공합니다.
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