2011-10-04 3 views
21

이 질문의 변형이 이전에 요청되었지만 다른 팀 구성원을 방해하는 문제는 언급되지 않은 것처럼 보입니다. 기존 게시물 (How to "unversion" a file in either svn and/or git 참조)에서 대답은 일반적으로 svn rm FILE 또는 svn rm --keep-local FILE으로 실행 한 다음 원할 경우 svn:ignore 속성을 설정합니다. 지난 20 분 동안이 작업을하면서 놀았습니다 (한 곳에서 파일을 삭제 한 다음 다른 곳에서 파일을 삭제하는 등). 다음은 내가 찾은 것입니다 (SVN 1.6.16을 사용하고 있습니다) :SVN에서 파일을 정상적으로 해제하는 방법 (팀 구성원을 방해하지 않고)?

우선 --keep-local 플래그는 업데이트하려는 다른 모든 사람들에게 어떤 영향을 미치지 않습니다. 나중에 저장소. 그 (것)들에게 당신이 방금 svn delete 정규식을했을 때와 똑같이 보입니다. (내가 본 subversion 문서 중 아무 것도 이것을 명시 적으로 언급하지 않았습니다. 당신이 여전히 svn delete 작업을하고 있고 "로컬 유지"가 현지 측에 영향을 미치지 만, 필자에게 분명하지는 않다).

그래서 이가지 경우가 있습니다 - 1. 팀 구성원 A는 팀 구성원 B 팀 멤버 A는 파일 가에서 커밋되지 않은 로컬 변경 사항이 한 팀 멤버 B를 삭제 또는 2. 로컬 수정 없었다 파일을 삭제

.

1에서 삭제가 발생한 후 B의 파일이 삭제되었습니다. 그는 이제 스스로 복구해야합니다 (예 : svn merge -rHEAD:XXX FILE; svn revert FILE). FILE 버전 XXX을 작업 디렉토리에 다시 가져 와서 다음 커밋에서 다시 커밋하지 않아야합니다.

2에서 B는 업데이트시 트리 충돌을보고, FILE의 상태가 A + C이고 그 아래에 "로컬 편집, 업데이트시 수신 삭제"메시지가 있습니다. 이 시점에서 권장 솔루션이 무엇인지 정확히 알지 못합니다. 내가 한 것은 파일을 다른 곳으로 복사하는 것 뿐이므로 안전성을 위해 svn revert FILE을 실행했습니다. FILE이 작업 디렉토리 에 아직 버전 화되어 있지 않고의 모든 로컬 수정 사항을 그대로 유지하기 때문에 불필요한 결과가 발생했습니다. 그러나 다른 시나리오에서는 내 커밋되지 않은 변경 사항이 svn revert에 의해 지워졌 기 때문에이 사실을 얼마나 신뢰할 수 있는지 알 수 없습니다.

TL; DR : 그것은 정말되지 않은 버전의 유일한 방법 SVN에서 파일이 팀에 다른 사람의 작업 디렉토리에서 삭제하고이 스스로를 검색 할 수 있도록하는 것입니다 경우? --keep-local을 잘못 사용하고 있습니까? 아니면 다른 유사한 옵션이 없습니까? (-> 사용이 삭제 목록 옵션을 무시하는 추가 TortoiseSVN을 쉽게) 그 커밋

+0

워크 플로우가 문제 일 수 있다고 생각합니다. 왜 파일을 "해제"하시겠습니까? 정의에 따르면, 버전 제어 시스템은 알고있는 파일의 버전 만 추적 할 수 있습니다. 그 파일을 repo에서 제거하면 논리 복사본은 작업 복사본에서도 제거됩니다. 이 작업을 수행 할 수있는 다른 VCS의 예가 있습니까? – richo

+0

구성 파일은 어떻게됩니까? (즉, Eclipse .project 파일). 팀원 모두가 필요하지만 기계마다 약간 다릅니다. 따라서 버전 관리가되어서는 안되지만 우연히 발생합니다. – danny

+0

나는'svn mv'ing하고 그 경우에 메모를 전달할 것이다. – richo

답변

9

당신은 당신이 무시 목록에 삭제 된 모든 파일을 추가해야합니다.

이제 삭제하십시오. 파일이 Subversion 저장소에 How do I remove a file from svn versioning without deleting it from every working copy?

+4

실제로 목록을 무시하고 삭제하려면 추가 작업을 수행 했습니까? 나는 그것을 시도하고 그것은 여전히 ​​파일을 삭제했습니다. 수동으로 이전 위치로 복사 한 후에는 무시 된 파일로 표시됩니다. 정말 작동하는 경우 단계 설명으로 더 많은 단계가 필요해 보입니다. – peter

1

되면,이 완전히 제거 될 수 없다 : 여기에 언급 한 바와 같이

또 다른 옵션은 svndumpfilter에 작업을 수행하는 것입니다. 물론 svn rm을 수행하고 해당 분기의 가장 최근 사본에서 파일을 제거 하겠지만 파일은 여전히 ​​존재합니다. 파일을 삭제하기 전에 수정본을 체크 아웃하면 누구나 파일을 볼 수 있습니다. 디렉토리 트리에서 svn log을 실행하여 삭제 된 파일을 쉽게 찾을 수 있습니다.

당신이 실수로 독점 정보가 포함 된 파일을 추가 한 경우 (예 : 고객의 로그인 및 암호와 같은) 할 또는 부적절입니다 수 많은이 아니라, (우리는 하나의 개발자가 실수로 그는 자신의 작업 공간에 있던 지프에서 확인했다 나중에 비자발적 행위가되기 전에 자발적으로 회사를 떠나게했습니다.).

당신의 선택은 다음과 같습니다

  • 는 다음 svnadmin dump를 수행 저장소를 내려. svnfilter을 사용하여 덤프를 svnadmin load으로 파이프하여 새 버전의 저장소를 작성하십시오.
  • svn obliterate 명령이 있다고 약속하는 Subversion 1.8을 기다립니다. (실제로, 로드맵을 점검하면 더 이상 버전 1.8에 있지 않습니다. 아마도 1.9일까요?).

--keep-local 플래그는 svn delete 다음에 파일의 로컬 복사본을 유지합니다. 기본값은 svn delete에 작업 영역에서 로컬로 파일을 제거하는 것입니다.

+0

어쩌면 내 말씨가 더 분명했을 수 있습니다. 나는 현재와 이후의 개정판에서 그 증거를 삭제하는 것에 신경 쓰지 않습니다. 흥미로운 예제와 해결 방법, +1 – danny

+0

@ 대니 : 그런 다음'svn delete'와'svn commit'을해야합니다. 일단 커밋되면 더 이상 저장소에 없습니다. '--keep-local'은 파일을 삭제 한 후에 작업 디렉토리에 파일의 복사본을 보관합니다. 다른 사람들의 작업 사본은 어떻게됩니까? 그들이'svn update'를 할 때, 삭제 파일은 작업 복사본에서도 사라질 것입니다. 업데이트를 수행하지 않고 파일을 수정하고 커밋하려고하면 충돌이 발생할 수 있습니다. 그러나, 그것은 매우 간단하게 고칠 수 있습니다. –

관련 문제