SVN을 사용하고 있습니다. 커밋 메시지를 작성할 때 때때로 뭔가를 놓칩니다. 그러나 일단 커밋되면 되돌릴 수 없으며 메시지를 편집 할 수도 없습니다. 편집 기능을 넣지 않은 이유는 무엇입니까?
git-svn
하고 아무도 더 현명 하지 않습니다 .
SVN을 사용하고 있습니다. 커밋 메시지를 작성할 때 때때로 뭔가를 놓칩니다. 그러나 일단 커밋되면 되돌릴 수 없으며 메시지를 편집 할 수도 없습니다. 편집 기능을 넣지 않은 이유는 무엇입니까?
git-svn
하고 아무도 더 현명 하지 않습니다 .
답변:
SVN FAQ에 따르면 리포지토리 관리자가 활성화 한 경우 또는 리포지토리에 대한 로컬 관리 액세스 권한이있는 경우 가능합니다 .
그러나이 작업을 수행하는 것은 좋지 않습니다. 당신은 사실상 역사를 바꾸고 있습니다. 버전 관리의 요점 중 하나는 프로젝트의 기록 및 감사 내역을 유지하는 것입니다. 기록을 임의로 변경하면 감사 내역이 무효화됩니다. 대신 작은 커밋을 수행하고 간결하면서도 명시적인 커밋 메시지를 작성하고 이러한 오류를 방지하기 위해 개인 작업 흐름을 개선하는 것이 좋습니다.
이를 위해서는 저장소에 대한 관리자 권한 (직접 또는 간접)이 있어야합니다. 모든 사용자가이를 수행 할 수 있도록 저장소를 구성하거나 서버에서 직접 로그 메시지를 수정할 수 있습니다.
여기 에서 SVN FAQ를 확인 하십시오.
로그 메시지는 각 개정에 첨부 된 특성으로 저장소에 보관됩니다. 기본적으로, 로그 메시지 특성 (svn : log)은 커밋 된 후에 편집 할 수 없습니다. 이는 svn : log가 1 인 개정 속성을 변경하면 속성의 이전 값이 영구적으로 삭제되고 Subversion이 실수로이를 수행하지 못하게하기 때문입니다. 그러나 Subversion이 개정 속성을 변경하도록하는 방법에는 두 가지가 있습니다.
첫 번째 방법은 저장소 관리자가 개정 특성 수정을 사용하는 것입니다. 이것은 "pre-revprop-change"라는 후크를 작성하여 수행됩니다 (이 작업을 수행하는 방법에 대한 자세한 내용은 Subversion 책의이 섹션 참조). "pre-revprop-change"후크는 이전 로그 메시지가 변경되기 전에 액세스 할 수 있으므로 어떤 방식 으로든 (예 : 이메일 전송) 보존 할 수 있습니다. 개정 속성 수정이 활성화되면 --revprop 스위치를 다음 중 하나와 같이 svn propedit 또는 svn propset에 전달하여 개정의 로그 메시지를 변경할 수 있습니다.
$svn propedit -r N --revprop svn:log URL $svn propset -r N --revprop svn:log "new log message" URL
여기서 N은 로그 메시지를 변경하려는 개정 번호이고 URL은 리포지토리의 위치입니다. 작업 복사본 내에서이 명령을 실행하면 URL을 생략 할 수 있습니다.
로그 메시지를 변경하는 두 번째 방법은 svnadmin setlog를 사용하는 것입니다. 파일 시스템에서 저장소의 위치를 참조하여 수행해야합니다. 이 명령을 사용하여 원격 저장소를 수정할 수 없습니다.
$ svnadmin setlog REPOS_PATH -r N FILE
여기서 REPOS_PATH는 저장소 위치이고, N은 로그 메시지를 변경하려는 개정 번호이고, FILE은 새 로그 메시지를 포함하는 파일입니다. "pre-revprop-change"훅이 제자리에 있지 않은 경우 (또는 어떤 이유로 훅 스크립트를 생략하려는 경우) --bypass-hooks 옵션을 사용할 수도 있습니다. 그러나이 옵션을 사용하기로 결정한 경우 매우주의하십시오. 변경 사항에 대한 이메일 알림 또는 개정판 특성을 추적하는 백업 시스템과 같은 것을 무시할 수 있습니다.
Stack Overflow에 대한 비슷한 질문에 대한 답변으로 Kamil Kisiel 이 답변했습니다 .
중앙 집중식 버전 제어 시스템 이기 때문에 변경 사항을 커밋하면 (그리고 커밋 메시지는 커밋에 바인딩 된 규칙에 따라) 리포지토리에 대한 읽기 권한이있는 모든 사람이 해당 정보를 볼 수 있습니다. 사람들이 "현실"에 대한 의견이 다르기 때문에 정보가 보급 된 후에 정보를 변경하는 것은 나쁜 생각 입니다.
Git과 같은 분산 버전 제어 시스템은 다른 사람이 정보를 사용할 수있게하는 행위가 원자 적이며 커밋 메시지와 같은 추가 정보 없이도이 문제를 완화합니다. 그러나 동일한 원칙이 여기에 적용됩니다. 다른 사람이 이미 사용할 수있는 것을 현지에서 변경하지 않는 것이 좋습니다.