2012-04-03 4 views
0

내 SVN 폴더에 누군가가 프로젝트 소스 코드를 삭제했습니다. SVN 기록을 사용하여 해당 파일을 삭제 한 사람을 식별 할 수 없습니다. 프로젝트는 역사 아래 표시된 활동과 관련이 없습니다.SVN에서 지운 폴더를 복원

  1. 로그인 기록없이 SVN에서 폴더를 삭제할 수있는 옵션이 있습니까?
  2. SVN 서버에서 이러한 파일을 복구 할 수있는 옵션이 있습니까?

감사

답변

4

리포가 심각하게 엉망이 아닌 한 모든 삭제 내용이 로그에 표시됩니다. 내 생각 엔 작업 경로에서 svn log을 발급하여 잘못된 경로를 쿼리하고있는 것일 수 있습니다. 이 하위 명령은 URL을 허용 당신은 단순히 수 :

svn log https://example.com/svn/project/ 

대신

svn log 

의 ...나 : 당신이 디렉토리 경로를 알고 여전히 존재 어디 개정 번호를 알고있는 경우

물론
svn log https://example.com/svn/project/trunk/ 

는, 당신은 간단하게 할 수 있습니다

svn log https://example.com/svn/project/trunk/foo/[email protected] --revision 314:HEAD 

업데이트 :에도 불구하고 게으른 오소리의 놀라운 소유권 주장, 개정 내역은 Subversion의 핵심 기능이며 저장소 액세스 방법에 종속되지 않습니다.

E:\test>svnadmin create myrepo 

E:\test>svn checkout file:///E:/test/myrepo mywc 
Checked out revision 0. 

E:\test>svn mkdir mywc\mydirectory 
A   mywc\mydirectory 

E:\test>svn commit -m "Add a directory" mywc 
Adding   mywc\mydirectory 

Committed revision 1. 

E:\test>svn delete mywc\mydirectory 
D   mywc\mydirectory 

E:\test>svn commit -m "Remove the directory" mywc 
Deleting  mywc\mydirectory 

Committed revision 2. 

E:\test>svn log -r2 -v file:///E:/test/myrepo/ 
------------------------------------------------------------------------ 
r2 | ALVARO.GONZALEZ | 2012-04-03 17:00:34 +0200 (mar, 03 abr 2012) | 1 line 
Changed paths: 
    D /mydirectory 

Remove the directory 
------------------------------------------------------------------------ 

E:\test> 

변경 내용을 추적 할 수 없으면 Subversion이 버전 제어 도구로 전혀 쓸모 없게됩니다. 주석 기자는 아마도 svn log에있는 로그를 아파치가 유지 관리하는 액세스 로그와 혼동 할 것입니다. 이는 완전히 다른 것으로서 Subversion 명령을 통해서도 읽을 수 없습니다.

리포지토리에 커밋 된 삭제는 리포지토리 자체가 손상되지 않은 한 커밋 된 방법과 상관없이 개정 로그에 표시됩니다 (이미 지적했듯이).

+0

"repo가 ​​심각하게 엉망이되지 않는 한 모든 삭제 내용이 로그에 표시됩니다."- 잘못된 것 ... http : // **는 repo에 액세스하기위한 단일 프로토콜이 아닙니다. –

+0

예, 몇 가지 액세스 권한이 있습니다. 프로토콜과 관련이 있습니까? –

+1

@LazyBadger - 대부분 스택 오버플로에 대한 답변은 버전 제어 관련 도구이므로 심각하게 말해야합니다 ... 그러나 이해하지 못합니다. 늦은 April Fool의 농담이나 뭐야? –

1

예를 들어, 누군가가 서버에 로그인하고 삭제 나는 (삭제가 SVN 서비스의 뒤에서 일어난 경우 로그에 표시하지 않고 SVN에서 삭제 생각할 수있는 유일한 방법 명령 셸의 파일/디렉토리).

이 경우 서버를 백업했다고 가정 할 때 서버에 만들어진 백업에서 파일/디렉토리를 복원 할 수 있습니다. 이 경우 가장 최근에 해당 디렉토리에 커밋 된 사람에 따라 원본 소스의 이전 버전에 액세스 할 가능성이 높습니다. 삭제 앞으로 일어날이 전술 한 바와 같이 경우 문제가 투입해야 할 수도 있으므로,이 mostr 가능성의 SVN 부기를 엉망 물론

는 ...

1
  1. 아니, 폴더를 삭제하는 방법은 없습니다 SVN 로그에 반영되지 않습니다. SVN 서버에 대한 액세스 권한이있는 관리자가 SVNADMIN DUMP/SVNADMIN LOAD을 수행하고 SVNDUMPFILTER을 사용하여 변경 집합을 제거 할 수는 있지만 사용자가 요청한 것이 아닌 것으로 생각됩니다. 또는 그 일이 일어 났을 수 있습니까?

  2. SVN 저장소를 이전 버전으로 롤백 할 수 있으므로 취소 할 수없는 변경 사항이 없습니다. 특정 폴더가 SVN 로그에 반영되지 않고 삭제 된 것이 확실한 경우 누군가가 여전히 폴더가 포함 된 작업 복사본을 가지고있을 수 있습니다.

1

내 2 센트 :

  1. 번호
  2. 그냥 삭제하기 전에 저장소에 상태를 다시 복사합니다. 아래의 예를보십시오. 다음 명령을 수행 할 경우, 삭제 된 폴더 /trunk/src/my/proj/client 복원해야합니다 svn copy http://my.company.com/svn/repo/trunk/src/my/proj/[email protected] http://my.company.com/svn/repo/trunk/src/my/proj/

예 저장소 파일 구조 :

Repo: http://my.company.com/svn/repo/ 
    /trunk 
     /src 
     /my 
      /proj 
       /server 
       /client (is deleted on revision 4711) 
-2

로그없이 SVN에서 폴더를 삭제할 수있는 옵션이 있습니다 에 역사?

슬프게도, 예 - 파일 사용 : 모든 인증

없이 REPO에 액세스 /// 프로토콜은 해당 파일을 복구 할 수 SVN 서버에서 어떤 옵션이?

예. 액세스 할 수있는 svn-tools를 사용하여 최신 개정판을 찾으십시오.이 폴더는 여전히 존재합니다이 수정본의 로컬 작업 사본에만으로 복사하십시오 ("스파 스 작업 결과로 복사). (다음 사건이 다시 발생하지 않지만)

주 새로운 버전으로 화장실의 상태를 커밋하고 모두가 후에 고정해야합니다 svn copy 솔루션은 또한 가능한 것은

0

당신은 SVN 로그로 확인할 수의 다른 활동을 볼 수 svn repo에.

서버에서 제거한 서버가 있으면 서버를 백업해야합니다. 물론 문제는 아니지만 팀원 중 일부는 서버에서 업데이트하지 않으므로 삭제 된 파일이있을 수 있습니다.

당신은

svn up -r <with-older-version>. 

는 개인적으로 내가 CVCS 시스템을 증오로, 내가 DVCS를 사용하는 것을 선호 복구 할 수 있습니다.

하지만 내 조직에서는 CVCS를 사용해야합니다. :(

관련 문제