2009-05-15 3 views
2

스크립트를 사용하여 기존 프로젝트에서 새 프로젝트를 만드는 과정을 자동화하려고합니다. 내 첫 번째 아이디어는 두 스크립트가 있어야한다는 것입니다 :내 스크립트가 svn 서버를 업데이트해야합니까?

1 : 기존 프로젝트를 svn 저장소에서 체크 아웃 한 다음 이름 바꾸기 (예 : 모든 파일에서 ExistingProjectName => NewProjectName에서 검색 및 바꾸기, 모든 "svn rename"all 문자열 ExistingProjectName)

이 포함 된 파일과 디렉토리 :은 "SVN 스위치"명령을 사용하여 사용자가 편집 등을 확인 후, 저장소에 새 프로젝트를 만들 (예)

아이디어는 것이 었습니다 사용자가 수표를 발행 할 기회가있을 때까지 저장소를 변경하면 안됩니다.

그러나 잠재적 인 위험이 내게 지적되었습니다. # 1이 실행 된 후 로컬 작업 복사본은 여전히 ​​기존 프로젝트와 연결됩니다. 부주의하게이 단계에서 저지르는 누군가가 기존 프로젝트를 엉망으로 만들 것입니다.

아무도 # 1 후에 커밋을 막을 수있는 몇 가지 svn 트릭을 생각할 수 있습니까? 나는 문서를 읽은 후에도 아무 것도 생각할 수 없다.

감사합니다.

앤디

(가 투입 중지 할 수없는 경우, 우리는이 저장소를 업데이트 할 수 있도록 사용자가 기회를하기 전에 두 악마의 낮은으로 이동하여 스크립트를 작성해야합니다 확인).

답변

1

아마도 상태를 나타 내기 위해 변경된 파일에 특수 값을 쓸 수 있습니다. 그런 다음 svn 커밋 훅을 사용하여 누군가 잘못된 저장소에 커밋하려고했는지 확인하십시오.

1

아마도 svn 내보내기를 원할 수 있습니다.

+0

불행히도 svn export를 사용하면 프로젝트의 모든 기록을 가져올 수 없습니다. svn은 커밋 할 때 효과적으로 새로운 프로젝트로 취급합니다 (이전 프로젝트의 모든 변경 사항에 대한 정보는 제공되지 않음). – Andy

0

커밋을 중지하는 트릭은 첫 번째 단계에서 svn export을 사용하는 것입니다. 그런 다음 변경 사항이 준비되면 svn import을 사용하십시오.

+0

불행히도 svn export를 사용하면 프로젝트의 모든 기록을 가져올 수 없습니다. svn은 커밋 할 때 효과적으로 새로운 프로젝트로 취급합니다 (이전 프로젝트의 모든 변경 사항에 대한 정보는 제공되지 않음). – Andy

1

svn에 새 분기를 만들려면 svn copy 명령을 사용합니다. 완료되면 저장소에 2 개의 프로젝트가 있으며 여가 시간에 둘 중 하나를 수정할 수 있습니다.

그래서 svn에서 프로젝트의 이름을 바꾸려면 분기를 만든 다음 파일의 이름을 바꾸고 내용을 업데이트하십시오. 작업 완료!

대체 방법은 기존 프로젝트를 체크 아웃하고 이름을 바꾸고 편집 한 다음 svn에 작업 복사본을 추가하는 것입니다. 그것은 '원 자성 (atomic)'이며, 로그에 이름 바꾸기가 나타나지 않도록합니다.

새로운 브랜치를 추가하는 것은 svn의 '값싼 복사본'의 이점을 얻지 못한다는 점을 제외하면 복사와 마찬가지로 효과적입니다. 그러나 중요한 편집 (및 이름 바꾸기)을 할 때 더 좋지는 않을 것입니다 처음부터 접근?

+0

스크립트는 컴파일에 실패한 경우 (즉, 체크 아웃하고 이름을 바꾼 후) 작업 복사본을 제거하는 경우에만 "원자 적"으로 설명 할 수 있습니다. 작업 복사본이 남아 있으면 사용자는 여전히 프로젝트를 커밋하고 망칠 수 있습니다. 반면에, 사용자는 디버깅하기를 원할 것입니다. 그래서 작업 카피를 제거하는 것은 인기가 없습니다! 두 개의 프로젝트를 생성하기 위해 저장소의 복사본으로 시작하는 것이 우리가 원하는 해결책입니다. 더 많이 생각하면할수록 그것이 모든 악마 중 가장 작다고 확신합니다. – Andy

+0

프로세스가 실패하면 서버에서 분기를 삭제하십시오. 분기를 더 이상 존재하지 않으므로 체크인 시도가 실패하므로 작업 복사본을 삭제할 필요가 없습니다. – Don

관련 문제