2014-04-20 3 views
0

간단한 프로젝트에서 버전 관리를 위해 svn을 사용하고 있습니다. 이맥스 용으로는 모드이기 때문에 하나의 파일입니다.svn의 폴더 간 개정 기록 유지

개발 및 사용자에게 공개 된 코드의 수정 내역을 유지하는 방법을 원합니다.이 모든 것은 동일한 svn 저장소에서 수행됩니다. 내 목표 중 하나는 사용자가 체크 아웃 할 수있는 일관된 URL이며, 사용자가 항상 최신 "릴리스"를 얻기 위해 svn update을 실행할 수 있도록하기 위해 출시는 매우 비공식적이지만 말입니다.

현재 "devel"폴더에서 내 개발 작업을하고 필요에 따라 변경하려면 을 변경해야합니다. 변경 사항이 출시 될 준비가되면, 작업 복사본을 새로운 변경 사항으로 덮어 쓰고, 다음 작업을 수행하기 위해 devel에서 "trunk"로 mymode.el을 복사합니다 (아마도 이름이 잘못되었습니다 - 이것은 사용자가 체크 아웃 한 폴더입니다). 트렁크.

나는이 트렁크, 의 개정 이력을 보존 것을 확신하지만 방법은 종류의 kludgey 것 같다 내가 SVN 이 의도하는 방식을 사용하지 않는 같은 느낌.

devel에서 트렁크로 변경 한 내용을 으로 가져 오거나 더 나은 방법을 사용하기 위해 내 프로젝트를 구성하는 더 좋은 방법이 있습니까?

답변

0

현재 스타일은 물론, 추한 (? 내가 제대로 이해 않았다)

어떤 SCM의 작업
  • 하나는 당신이 경우, 전체 코드의 진화 쉽게 재건,하지만 귀하의 경우 단지 WC에서 WC 로의 하나 이상의 수정본 파일에서 수정 된 사본 - 당신은 트렁크 상태와 devel-branch의 상태 사이의 관계를 잃습니다 : 트렁크는 알려진 부모없이 태그 세트로 작동합니다. "질문에 대답하려고합니다"내가 만든 브랜치 개정판에서 $ 트렁크에있는이 개정판 "- 당신은 실패 할 것입니다.)

워크 플로우 및 습관과 취향이 다를 수 있습니다. 어쨌든, I은 항상 "작업 별 분기"스타일을 선호하며 (단일 커밋 변경의 경우에도 분기 만들기) 트렁크에만 머지 세트를 포함합니다. 목표 "저장소의 다른 코드 개정판에 대한 영구 URL 제공" (다시 말하면 개인 선택) 게시 된 URL로 "부동"외부를 사용하는 것을 선호합니다 (정의에서 PEG 개정을 수시로 변경). 즉, 저장소의 루트 ("Release", fe)에 디렉토리 유형의 외부 정의가 될 수 있으며/trunk의 일부 개정판에 매핑 될 수 있습니다 (trunk 전용 개발 또는 "작업 당 분기"는 거의 동일합니다). 워크 플로 - 연결 노드 정책 일 수 있습니다. 변경).

사용자는 항상 REPOSTORY/RELEASE을 얻지 만 개발 프로세스/trunk @ 1,/trunk @ 10,/trunk @ 100 일 수 있으며 로그 만 사용하여 릴리스 기록을 볼 수 있습니다 ("release" 따라서 외부 정의를 바꾸는 것을 의미한다. 따라서 특별한 커밋을한다.)

+0

나는 이것이 추악했다고 생각했다. 그래서 내가 도움을 찾고 있어요! 외부 정의를 사용하여 트렁크의 특정 개정판을 참조하는 빈'REPOSITORY/RELEASE' 폴더와 같은 것을 추천하고 있다는 것을 정확하게 이해합니까? 릴리즈의 역사는 단지 외부 속성의 역사일까요, 아니면 한 릴리즈와 다음 릴리즈 사이에 어떤 변화가 있었는지 보여주는 diff를 수행 할 수 있습니까? – jake

+0

@jake - exteral 폴더는 ** 실제 ** "실제"폴더가 아닙니다. 그것은 repo - 브라우저 (TortoiseSVN)에서 폴더로 보이는 가상 폴더, 당신의 작업 폴더에 실제 폴더로 존재합니다 (당신이 외부의 부모를 체크 아웃 한 경우),하지만 그것은 특별히 제작 된 propset 명령을 사용한 결과 일뿐입니다. 스크린 샷과 관련 명령이 포함 된 샘플을 답변에 추가하고 싶습니까? –

+0

나는 생각을 가지고 있다고 생각한다. 아직도 내가 얻을 수있는 역사에 대해 궁금해. 외부 속성의 변경 정의 외에도 svn 로그에 아무것도 표시할까요? – jake

0

좋은 릴리스를 표시하려면 태그를 사용하십시오. 더 간단하고 깨끗합니다. 문제는 트렁크 기록을 요청하면 Subversion이 트렁크 바로 아래로 이동한다는 것입니다. devel 지점에서 흥미로운 것을 보지 못할 것입니다.

트렁크에서 모든 작업을 수행하고 필요한 경우에만 분기하는 것을 선호합니다. 이는 일반적으로 일부 개발자가 릴리스에서 작업하고 일부는 향후 작업을 수행 할 때 릴리스 직전을 의미합니다. 태그를 사용하여 출시를 표시하십시오.

이 방법을 사용하면 전체 기록을 가져올 수 있으며 계속 좋은 릴리스를 해지 할 수 있습니다.

잠시 시간이 걸릴 수있는 기능을 사용하고 있고 트렁크를 망칠 것이라고 염려 할 경우 기능 분기를 만든 다음 해당 기능을 트렁크에 병합하십시오.

+0

내 질문을 게시하기 전에 브랜칭에 관한 많은 문서를 읽었는데, 필자는 필자가 필요로하는 것을 압도했다고 생각한다. 이 프로젝트는 2 ~ 3 명 이상의 개발자가 없으며 "릴리스"는 그리 정식이 아닙니다. "릴리스 직전"시나리오는 실제로 적용되지 않습니다. 태그를 올바르게 이해하면 다른 폴더 일뿐입니다. 맞습니까? OP에서 설명한 것처럼 사용자가 URL을 업데이트하도록하지 않으려합니다. – jake

+0

@jake - 솔로 개발에서도 "작업 당 분기"를 선호합니다. –

+0

@jake 태그는 단지 _folders_이지만 의미를 부여하는 폴더입니다. 나는 당신이 만들 수 있도록 태그를 수정하지 않고 태그를 더 많이 만들 수있는 미리 커밋 된 고리를 가지고있다. 예, 작은 상점에서는 반드시 릴리스 지점을 만들 필요는 없습니다. 내가 그럴 필요가 없다면 나는 안할거야. 나에게 브랜칭은 단지 병렬 작업을 허용하는 수단 일 뿐이다. 릴리스를 _ 태그하는 경우 해당 릴리스를 패치해야 할 경우 태그를 만드는 개정에서 분기를 작성할 수 있습니다. –