2008-09-05 3 views
20

나는 어떻게 든 SVN 저장소를 나쁜 상태로 만들었습니다. 나는 디렉토리를 옮겼으므로 이제 새로운 위치에 커밋 할 수 없습니다.SVN 저장소의 "Phantom"디렉토리

까지 svn status까지는 디렉토리를 알 수 없습니다 (디렉토리 이름은 type입니다).

 
$ svn status 
?  type 

디렉토리를 추가하려고하면 서버에 이미 존재한다고 표시됩니다.

 
$ svn add type 
svn: warning: 'type' is already under version control 

디렉토리를 업데이트하려고 시도하면 다시 사라집니다.

커밋하려고하면 서버는 이전 상위 디렉토리가 존재하지 않는다고 불평합니다.

 
$ svn commit type -m "Moving type" 
svn: Commit failed (details follow): 
svn: '/prior/trunk/src/nyu/prior/cvc3/theorem_prover/expression' path not found 

미스터리에 추가하려면 디렉토리의 내용이 수정 됨으로 표시됩니다.

 
$ svn status type 
A + type 
M + type/IntegerType.java 
M + type/BooleanType.java 
M + type/Type.java 
M + type/RationalRangeType.java 
M + type/RationalType.java 
M + type/IntegerRangeType.java 

디렉토리에서 업데이트를 시도하면 알 수 있습니다. 디렉토리는 상기와 동일한 path not found 오류를 범 내에서 커밋

 
$ cd type 
$ svn update 
svn: Two top-level reports with no target 

.

어떻게 될까요? 어떻게 수정합니까?

EDIT : @Rob Oxspring이 나를 잡았습니다. Eclipse에서 너무 적극적으로 움직이는 것들이 있습니다.

업데이트 : @ RoC Oxspring의 대답은 "하지 마라/그냥 다시 시작하라"고 받아 들여 조언을 듣고 있습니다. 아무도 나에게 말할 수 있다면 여전히 관심이있을 것이다. (a) 위의 오류 메시지는 무엇입니까? 은 정확하게을 의미하고 (b) 실제로는 을 수정하면 문제가 발생합니다.

답변

14

type은 Subversion을 인식하는 복사 명령으로 만든 다음 Subversion 인식되지 않은 복사본을 사용하여 현재 디렉토리로 이동했습니다. 내 경험에 비추어 볼 때 일반적으로 패키지 리팩토링 작업이 이클립스에서 커밋되지 않고 함께 연결될 때 이런 일이 발생한다. 일반적으로 Subversion은 로컬로 복사/이동 된 파일이나 폴더를 복사/이동할 때 버전 1.5가 더 잘 처리 할 수 ​​있다고 생각하지만 잘 처리하지 못합니다.

향후이 문제를 방지하려면 이러한 단계를 수행하십시오. 개입 커밋을 숨기려면 분기에서 다중 단계 리팩토링을 수행 한 다음 변경 사항을 메인 라인으로 다시 병합하는 것이 좋을 것입니다.

너무 많은 작업이 아니라면 깨끗한 작업 복사본으로 돌아가서 변경 사항을 다시 실행하고 각 단계 후에 커밋하는 것이 좋습니다. 일부 임시 위치로 변경된 파일을 이동

  • 을 : 당신은 즉, 역사, 새로운 IntegerType.java가 이전 IntegerType.java에 전혀 연결되지 않을 수 잃을 행복 경우에, 당신은 BCS에 의해 제안 된 접근 방식을 취할 수 어떤 .svn 디렉토리를 제거하여 작업이
  • 다시 당신이 원하는 위치로 변경 사항을 복사 깨끗한 작업 상태로 복사
  • 업데이트 그들을
  • 이 결과 작업 복사본
,691을 커밋 할 수
3

OS 명령으로 디렉토리를 복사/이동하거나 SVN으로 시작 했습니까? OS를 통해 파일을 복사 한 경우 여전히 이전 위치를 가리키는 SVN 정보가 들어있는 숨겨진 폴더가 있습니다.

+2

감사합니다. 이 대답은 방금 내가 한 일을 실현하게 만들었지 만 (이클립스를 사용하여 디렉토리를 옮기더라도 이클립스가 올바르게 작동 할 것이라고 생각할 수 있습니다.) 깨끗하게 정리하는 것이 엉망이지만 올바른 방향으로 가고 있습니다. 생명 (삶). – Marvo

9

많은 SVN 오류를 수정하는 쉬운 방법은 OS를 통해 전체 디렉토리를 이동하고, 다른 복사본을 가져오고 다른 도구, WinMerge 등으로 변경 한 내용을 병합하는 것입니다.

그 후에는 무엇을 하든지 할 수 있지만 제대로 수행하십시오.

0

가끔 내 로컬 사본이 저장소와 동기화되지 않는 경우가 있습니다. 나는 보통 문제가있는 디렉토리에서 시작하여 로컬 디렉토리 트리로 가서 이것을 해결하고 각 단계마다 정리 및 업데이트를 시도합니다.

1

나는 (위의 rm 또는 유사 subversionso 외부), 테스트 위의 디렉토리를 삭제하고, 거기에 svn update를 실행하는 것이 좋습니다.

즉, 가장 새로운 작업 복사본을 얻고 싶지 않은 경우 다른 사람이 제안한 것처럼 가장 안전한 방법 일 수 있습니다.

0

어떤 일이 발생했는지는 폴더를 체크 아웃 한 다음이 폴더에서 로컬로 svn add'ed 및/또는 modify something을했지만 변경 사항을 커밋하기 전에 원래 폴더가 이동되었거나 삭제되었습니다) SVN 저장소에서.

당신이해야 할 일은 현재 체크 아웃을 SVN 저장소의 새 위치로 전환하기 만하면됩니다. 그래서, 당신은에가/폴더 1/foo는/경로에서 foo는 폴더의 체크 아웃을 가정하면, 그 foo는이 경로/foo는 /로 이동했다, 당신은 단지 실행해야합니다 : 그것은

$ svn switch path/to/foo 

의 그 ... ;-)

+0

합리적인 것 같아요. 불행히도, 지금 당장 테스트를 위해 작업 복사본을 묶어 두지는 않았습니다 ... ;-) –

1

방금 ​​같은 문제가있었습니다. 영향을받는 폴더에서 .svn 폴더를 삭제하여 문제를 해결했습니다.

관련 문제