문제

우리는 SVN을 사용합니다 : 라이브러리의 특정 수정에 대한 외부.

xyzlib -r12345 https://asdf.asdf.local/xyzlib/trunk/

작업 사본을 이러한 체크 아웃 외부로 수정하면 외부가 헤드가 아닌 특정 개정판에 대한 외부 링크를 커밋 할 수 있습니다.

당신이 달릴 때 svn update 커밋 후, 전복이 모든 것을 개정 12345로 되돌리기 때문에 작업 사본에서 변경 될 것입니다. 따라서 실제로 변경 사항을 직접 볼 수는 없지만 여전히 머리 속에 있습니다.

외부가 헤드 개정을 가리키지 않을 때만 커밋을 금지하는 것이 가능합니까?

도움이 되었습니까?

해결책

이러한 종류의 검증의 경우 사전 커밋 후크를 추천하지만 쉽게 이해할 수없는 스크립트를 작성하는 대신 SVNKIT와 같은 라이브러리를 사용하는 것이 좋습니다. http://svnkit.com/ (자바를 알고 있다면).

이 라이브러리를 사용하여 몇 가지 사전 커밋 후크를 작성했으며 작업하기가 매우 쉽습니다. 당신은 전복에 의해 사전 커밋 후크에서 호출되는 작은 런닝 가능한 Java 프로그램을 작성합니다. 그런 다음 유효성 검사를 수행하기 위해 URL의 속성이나 일부를 추출하고 "규칙"에 적용되지 않으면 커밋을 거부 할 수 있습니다.

svnlookclient 및 svnchangeentry 클래스를 살펴보십시오. 가장 일반적인 사례를위한 방법이 있습니다 (예 : 진행중인 커밋에 대한 정보 추출).

다른 팁

You could try something like this: use a pre-commit script to check if the commit is going to a tag. If so, then fail out and provide a message. Read some more about subversion hooks. You'll have to re-write the regex so that it fails out if its not HEAD rather than failing if is a tag.

$SVNLOOK changed -t “$TXN” “$REPOS” | egrep -v “^[AD][[:space:]]+(.*/)?tags/[^/]+/$” | egrep “^[^[:space:]]+[[:space:]]+tags/[^/]+/.+”
if [ $? -eq 0 ] ; then
echo >&2 “***************************************”
echo >&2 “* Modification of tags is not allowed *”
echo >&2 “***************************************”
exit 1
fi

당신이 https를 사용하고 있기 때문에 나는 당신이 mod_dav_svn. 라이브러리 저장소에 추가 URL을 설정하고 읽기 전용 액세스 권한 만 부여 할 수 있습니다. 이렇게하면 일반적으로 도서관에 헌신 할 수있는 개발자조차도 SVN : 외부를 통해 커밋 할 수 없습니다.

외부를 트렁크의 개정으로 정의하기 위해 최선을 다하지 않으면 해당 개정을 기반으로 새 태그를 만들지 마십시오. 그런 다음 SVN : 외부 포인트를 태그로 가질 수 있고 문서화 된 액세스 제어 방법 중 하나를 사용하여 태그 디렉토리로의 커밋을 제한합니다 (또는 태그를 다른 리포지션에 넣고 Repo를 읽습니다).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top