2009-04-02 2 views
20

안녕하세요 SVN 서버가 바이너리이며 텍스트가 아닌 파일에 svn : needs-lock 속성을 자동으로 할당하는 방법이 있는지 궁금합니다.자동으로 svn : needs-lock을 추가하십시오.

우리는 다소 소규모의 개발자 팀을 보유하고 있지만 새로 만든 이진 파일에이 속성을 설정하는 것을 잊지 마라. 그렇게 잊어 버리기 때문에 이해가되지 않습니다.

답변

13

svn 구성 파일을 편집하고 자동 소품에 대한 항목을 추가하거나 svn:auto-props 버전 관리 속성을 사용하여 SVN 1.8 이상 클라이언트를 사용하십시오. Read SVNBook!

편집 : SVN 1.8에서

당신은 저장소의 루트 경로에 svn:auto-props 속성을 적용 할 수 있습니다. 이 release note 및 업데이트 된 SVNBook 1.8 chapter을 참조하십시오.

+3

이 조심 미리 잠금! 각 SVN 클라이언트마다 자동 소품을 개별적으로 구성해야합니다. 적어도 svn 1.7에서 서버가 자동으로 needs-lock을 적용하도록 할 방법이 없습니다. –

+2

TSVN에는 다음 용도로 사용되는 tsvn : auto-props 속성이 있습니다. http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-propertypage.html#tsvn-dug-propertypage-tsvn-props – Stefan

+0

@ Dan 그러나이 특성을 갖지 않는 2 진 파일을 거부하는 사전 확약 (pre-commit) 스크립트를 작성할 수 있습니다. – greggo

4

자동 소품 방법은 사용중인 각 SVN 클라이언트에서 구성해야합니다. 따라서 새로운 개발자 또는 새로운 컴퓨터의 기존 개발자를 구성 할 때는이 구성을 수행해야합니다.

모두 TortoiseSVN을 사용하는 경우 각 체크 아웃의 기본 폴더에 tsvn:autoprops 속성을 설정하면 모든 TortoiseSVN 클라이언트가이를 준수합니다.

네일을 실제로 사용하려면 각 저장소에 pre-commit 훅을 넣어야합니다. 이 경우 enforcer 스크립트를 쉽게 만들 수 있습니다.

python-fu를 사용하는 경우 RepoGuard (후속 SVNChecker)이 유용 할 수 있습니다.

어떤 항목을 선택하든 관계없이 저장소의 기존 파일에 속성을 소급 적용 할 수는 없습니다. 그러나 파일의 다음 커밋에서이를 적용 할 수 있습니다.

+0

이것은 중요한 포인트입니다. TFS에서와 같이 서버 측에서이 정책을 시행하는 데 익숙하다면 즉시 확인되지는 않습니다. +1 – MutantNinjaCodeMonkey

+1

오래된 것입니다. SVN 1.8의 "Repository Dictated Configuration"기능을 참조하십시오 : http://subversion.apache.org/docs/release-notes/1.8.html#repos-dictated-config – bahrep

2

Need-Lock을 자동으로 추가하는 방법과이를 설정하는 방법에 대한 모든 다른 옵션을 설명하는이 Subversion 위키 페이지가 있습니다. 이 페이지에는 예제 스크립트 및 구성 정보 제공 : SVN 1.8 클라이언트을 필요로 Repository Dictated Configuration 기능을 도입

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

+1

서버가 자동으로 요구 사항을 적용하도록하는 방법은 없습니다. 자물쇠. 이 문서에서는 자동으로 needs-lock을 적용하기 위해 각 SVN 클라이언트를 개별적으로 구성하는 방법과 needs-lock을 올바르게 사용하지 않는 커밋을 거부하도록 SVN 서버를 구성하는 방법에 대해 설명합니다. –

+2

@ DanFabulich 이제는 SVN 1.8 클라이언트가 저장소에서 자동 소품을 적용하도록 지시하는 방법이 있습니다. – bahrep

21

서브 버전 1.8을, 그러나 이것은 클라이언트 측 기능이기 때문에 1.8 서버가 필요하지 않습니다.

Subversion 1.8에서는 새로운 서브 버전 svn:auto-props inherited property을 사용하여 저장소 내에서 자동 소품 패턴을 구성 할 수 있습니다.

예를 들어, 저장소의 루트 (또는 프로젝트의 루트를 나타내는 저장소 경로)에 값을 *.exe = svn:needs-lock=* 속성으로 설정하십시오. 결과적으로 에 새로 입력 된 * .exe 파일에 svn:needs-lock=* 속성이 적용됩니다.svn:auto-props에 요구 잠금 및 MIME 패턴 : : 다음 표준 SVN을 추가 할 수 있도록

당신은 서브 버전 속성에 여러 줄의 값을 저장할 수

*.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=* 
+1

*가 와일드 카드이면 모든 파일 유형에 needs-lock을 간단하게 적용하려면 * = svn : needs-lock = *가 작동합니까? –

+1

@JonathonCowley 나는 TortoiseSVN 1.8.7 (SVN 1.8.9)과'svn : auto-props'를'* = svn : needs-lock = * '으로 설정하여 지금 테스트 해 보았습니다. 속성을 설정 한 폴더 아래의 모든 파일에 "필요"잠금을 적용합니다. – bahrep

+0

매우 빠른 응답을 보내 주셔서 감사합니다. 나는 직접 테스트 했었지만 Subversion에 대한 액세스 권한이없는 PC에 있습니다. –

1

사용 후크에게

#!/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 
+0

니스! 'svn propset' 명령을 필요한 파일과 함께 출력하기 위해'pre-commit' 훅을 수정했습니다 : https://gist.github.com/spl/0affe6cc0e06aae6cb46a45b8a9edd36 –

관련 문제