문제

내 웹 응용 프로그램에는 $Rev$를 통해 현재 개정 번호를 저장하는 파일이 있습니다.해당 파일을 변경하지 않으면 커밋되지 않는다는 점을 제외하면 잘 작동합니다.

어쨌든 단일 파일이 항상 SVN 서버에 커밋되도록 강제할 수 있나요?

저는 Windows용 TortoiseSVN을 사용하고 있으므로 모든 코드나 단계별 지침이 도움이 될 것입니다.

도움이 되었습니까?

해결책

TortoiseSVN이 설치되어 있으면 SubWCRev 도구도 사용할 수 있습니다.$REV$ 키워드를 잘못 사용하는 대신 해당 도구를 사용하여 개정판을 얻으십시오.

  1. 정의한 내용을 포함하는 템플릿 파일을 만듭니다.

    const long WC_REV = $WCREV$;

    version.h.tmpl이라는 파일에

  2. 모든 빌드에서 SubWCRev를 호출하여 애플리케이션에서 사용할 수 있는 '실제' 파일을 만듭니다.

    SubWCRev 경로 o\workingcopy 경로 o\version.h.tmpl 경로 o\version.h

그러면 version.h.tmpl에서 version.h 파일이 생성되고 $WCREV$ 텍스트는 현재 작업 복사본의 개정판으로 대체됩니다.

그만큼 SubWCRev에 대한 문서 도움이 될 수도 있습니다.

다른 팁

기본적으로, 당신은 svnversion 파일에서 명령.

이러한 파일은 일반적으로 저장소 외부에 보관되며 빌드 스크립트에 의해 자동으로 생성됩니다.나는 당신도 똑같이 할 것을 제안합니다.구축하지 않고 단지 svn up 서버 측에서는 그냥 전화하세요 svnversion ~ 후에 svn up 또는 두 작업을 모두 수행하는 쉘 스크립트를 작성하십시오.

만약 너라면 가지다 반면에 저장소에 보관하려면 다음을 호출하세요. svnversion 사전 커밋 후크를 사용하는 것이 최선의 방법입니다.

$Rev$ 플래그가 어떻게 작동하는지 이해하지 못하는 것 같습니다.Rev 플래그의 목표는 이 개정판이 항상 Subversion 저장소에 커밋되도록 하는 것이 아닙니다.목표는 업데이트 시 Rev 플래그가 항상 개정판이 되는 것입니다. 개정판이 포함된 Subversion에 코드를 넣을 필요는 없습니다. Subversion은 해당 정보를 추적하는 데 매우 능숙합니다.

아마도 놓친 부분은 Revision 키워드가 제대로 처리되도록 파일에 속성을 설정해야 한다는 것입니다.

svn propset svn:keywords "Revision" file.txt

이렇게 하면 업데이트를 수행할 때마다 $Rev가 다음과 같이 됩니다.xxx$ 플래그는 현재 개정판으로 업데이트됩니다.저장소에 어떻게 커밋되는지 걱정할 필요가 없습니다.

@게이트킬러:TortoiseSVN이 지원하는 것 같습니다 클라이언트 측 후크.

해당 파일을 변경하지 않으면 커밋되지 않는다는 점을 제외하면 잘 작동합니다.

파일이 절대 변경되지 않는 경우 매번 커밋해야 하는 이유는 무엇입니까?

편집] @sean = 그가하려는 일을 이해하지만 파일이 후크 나 다른 프로세스를 통해 업데이트되지 않으므로 결코 변경하지 않으면 SVN은 결코 그것을 선택하지 않습니다.

접근 방식을 변경하는 것이 좋습니다. 매번 파일을 커밋하는 것은 암시적으로 해당 파일에 전역 개정 번호를 유지하는 것을 의미합니다.사용자에게 다른 키워드가 필요할 수 있습니다. 글로벌키, 그의 존재하지 않음이 설명됩니다. 여기 나는 실제로 언급을 사용하지 않았습니다 svnversion 그러나 해결책을 찾을 수도 있습니다.

SVN에서 웹 서버로 웹 사이트를 배포하는 스크립트에 의해 개정 번호 파일이 변경될 수 있습니까?

Windows에서는 확실하지 않지만 bash 스크립트를 사용하면 다음과 같은 작업을 수행할 수 있습니다.

$ version=$(svnversion)
$ svn export . /tmp/staging/
Export complete.
$ echo "Revision: ${version}" > /tmp/staging/version.txt

그 다음에 /tmp/staging/version.txt "개정:1"(또는 가장 높은 개정 번호).

물론 다음과 같이 파일의 일부 식별자를 바꿀 수 있습니다. $Rev$ (만드는 대신 version.txt 위의 예처럼)

클라이언트에 따라 이들 중 일부는 단순히 파일에 "접촉"하고 변경된 것으로 플래그를 지정하는 것을 구현할 수 있는 사전 커밋 후크를 제공합니다.Visual Studio와 같은 것을 사용하는 경우 파일을 "접촉"하는 빌드 후 작업을 만들 수 있지만 변경 사항을 커밋하기 전에 빌드를 수행해야 합니다.

@gradonmantank:왜냐하면 그는 해당 파일이 최신 개정 번호로 업데이트되기를 원하기 때문입니다.그의 질문을 완전히 읽었습니까?

사전 커밋 후크가 작동할 수 있습니다.

나는 그것을 수동으로 수행하는 방법을 사용했습니다.나는 sed를 사용하여 $Rev$ 파일의 현재 타임스탬프로 주석을 바꾸는 스크립트를 실행했습니다.그렇게 하면 파일 내용이 변경되고 Subversion이 이를 커밋합니다.

내가 하지 않은 것은 다음 단계로 넘어가는 것이었습니다.사용하여 Subversion의 저장소 후크 프로세스를 자동화합니다.문제는 후크에서 파일 내용을 변경할 수 있는지 확실하지 않다는 것입니다.문서에 따르면 그렇게 할 수 없다고 제안하는 것 같습니다.

대신에 실행하는 작은 스크립트가 필요할 것 같습니다. svn commit 먼저 타임스탬프를 업데이트한 다음 일반 커밋을 실행하는 명령입니다.

파일을 커밋해도 아무 소용이 없습니다.파일은 내부에 정식 버전으로 커밋되지 않고 키워드로만 대체됩니다.저장소 안의 파일을 보면 이것을 볼 수 있습니다.

따라서 대신 어떤 방식으로든 파일을 강제로 업데이트해야 합니다.

Windows 플랫폼을 사용하는 경우 TortoiseSVN과 함께 배포되는 SubWCRev 도구를 사용할 수 있습니다.선적 서류 비치 여기.

svn pre-commit-hooks를 사용하여 이를 수행할 수 있습니다.
내가 염두에 두고 있는 일반적인 아이디어는 커밋하기 전에 파일에 새 개정 번호를 넣거나(svnlook을 사용하여 가져오기) 파일의 가짜 속성을 변경하는 것입니다(변경해야 하며 그렇지 않으면 SVN이 이를 무시합니다).

내가 찾은 사전 커밋 후크에 대한 자세한 내용은 이 페이지 유용한.

웹 애플리케이션에 SVN 개정 번호가 있는 파일이 있는지 확인하는 가장 좋은 방법은 커밋하는 파일을 두지 않고 빌드 스크립트의 일부로 추출하는 것입니다.

Maven을 사용하는 경우 maven-buildnumber-plugin을 사용하여 이 작업을 수행할 수 있습니다.

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