2010-06-24 5 views
2

소스 제어가 훌륭합니다. 좋은 기능 중 하나는 무언가가 엉망인 경우를 대비하여 이전 버전으로 돌아갈 수 있다는 것입니다.이전 버전을 쉽게 볼 수있는 좋은 SVN 도구가 있습니까?

그러나 필자는 더 이상 필요하지 않은 대량의 코드를 삭제하는 것이 싫지만 앞으로는 부분을 사용하려고 할 수도 있습니다. 현재 코드베이스에는 아무런 비즈니스가 없습니다. 그러나 나는 그것을 삭제하고 싶지 않습니다, 왜냐하면 나는 쉽게 내 개정 기록을 트롤링하고 그것을 찾을 수있는 방법이 없기 때문입니다. 나는 종종 "unused"와 "tmp"와 같은 설명이 포함 된 이름으로 파일에 붙여 넣기를하고 거기에 잠시 앉아있을 것입니다.

과거의 코드에 대한 저장소 기록/검색을 탐색하는 좋은 방법이 있다면이 문제는 해결 될 것입니다. 이 작업을 수행 할 수있는 GUI가 있습니까? 아니면 사용하기 쉬운 프로세스가 있습니까? TortoiseSVN으로 이것을 할 수있는 방법이 있습니까? 지금 당장 알 수있는 유일한 방법은 내가 원하는 파일이 있는지 확인하기 위해 다른 개정 번호를 체크 아웃하는 것입니다.

+1

개별 파일의 기록을 확인하여 변경된 버전과 변경된 내용을 확인할 수 있습니다. – R0MANARMY

+0

TortoiseSVN은 저장소를 통해 트롤링하기 위해 만들어졌습니다. 최근에 Mercurial 명령 도구가 큰 그림을 보여줄만큼 좋지 않았기 때문에 TortoiseHg를 사용하기 시작했습니다. http://tortoisesvn.net/big_picture – msw

+0

@ R0MANARMY : 부분적으로는 유용하지만, 그 순간 그 당시의 파일을 쉽게 볼 수 있습니다. – Claudiu

답변

4

내가하고 싶은 것은 "Codebase_before_removing_such_and_such_function"과 같은 태그를 추가하는 것입니다. 그런 다음 TortoiseSVN의 저장소 브라우저에서 해당 태그의 브라우저로 이동하여 오래된 파일을 찾으십시오. 해당 파일을 클릭하고 "열기"를 선택하여 해당 파일의 코드를 봅니다.

또한 HEAD를 가리 키지 않고 특정 수정을 가리 키도록 Repository Browser를 변경하여 (그리고 다시 원하는 특정 파일을 찾아서 열어) 동일한 작업을 수행 할 수 있지만 태그에 의미있는 이름을 부여 할 수 있습니다. 거북이 SVN의 변화를 보면 ... 그러나 ...

내가 개인적으로 Mercurial을 선호

+0

tortoisesvn에서 이름이 지정된 태그는 어떻게합니까? "복사 (지점/태그)"옵션을 보았지만 전체 저장소를 복사하는 것 같습니다. 나는 특정 리비전에 이름을 붙이기를 원한다. - 또는 단지 git에서 할 수 있는가? – Claudiu

+0

분기/태그 옵션을 사용합니다. 전체 Repo를 복사하는 것처럼 보이지만 사실은 아닙니다. 그냥 리비전에 태그를 지정하고 가리키는 것입니다. 그것을 사용하십시오. 그것은 당신이 원하는 것을 해냅니다. –

+0

굉장한, 단지 내가 원했던. – Claudiu

0

당신은 할 수 있습니다.

그룹에서 작업 할 때 원하는만큼 자주 로컬에서 커밋 할 수 있습니다. 그러면 그룹 솔루션에 커밋하려고 할 때 모든 것을 병합 할 수 있습니다. 이렇게하면 병합 중에 어떤 일이 일어나더라도 모든 사람이 하드 드라이브에 백업 저장소가 있고 사전 병합 버전을 그룹 리포지토리에서 사용할 수 있기 때문에 데이터가 손실되지 않습니다. 또한 그룹 repo에 푸시 할 때까지 다른 사람이 볼 수 없기 때문에 변경 여부와 상관없이 변경할 때마다 커밋 할 수 있음을 의미합니다. 커밋에 긴 주석을 추가하고 싶습니다. 올바른 버전을 검색 할 필요가 전혀 없기 때문입니다.

거북이 (직장에서 사용하는 것)와 조금 다르지만, 우려할만한 점은 분명 좋습니다.

+0

분산 버전 관리의 이점을 알고 있으므로 git을 사용했습니다. 그러나 당신은 다른 문제를 다루고 있습니다. Hg 또는 Git을 사용하더라도 오래된 파일을 찾아보고 (github이 꽤 좋은 일을하지만) 성가시다. – Claudiu

+0

흠 .. 항상 짜증나지만, 많이 사용하기 때문에 Mercurial을 사용하면 훨씬 쉽게 찾을 수있다. 더 자주 현지에서, 내 의견에 구체적입니다. 그렇게하면 JacobM이 제안한 태그 아이디어와 다소 비슷한 4 가지 커밋을 확인하는 것보다 올바른 개정을 찾아 올바른 클래스를 실행하기 만하면됩니다. 미안 점에 그 점들을 연결하지 않으면>< – badpanda

0

-v (자세한 경로, 변경된 경로 표시) 및 -xml 옵션과 함께 svn 명령 줄을 사용하고 결과를 XMLStarlet으로 파이프 할 수 있습니다. 이렇게하면 삭제 된 작업으로 필터링하고 파일이 삭제 된 곳의 수정 내용을 볼 수 있습니다. 그런 다음 grep을 통해 파이프를 찾고 원하는 파일을 가져올 수 있습니다.

예 :

svn log -v --xml /path/to/repo | xml sel -T -t -m "//logentry/paths/path[@action='D']" -v "concat(../../@revision,': ',.)" -n 

샘플 출력 : 분명히

103: /foo/deprecated.h 
99: /foo/bar/badfile.hpp 

, SVN 로그와 당신이 개정의 범위에 그를 제한 할 수 있습니다 (-r의 M : N), 또는 범위 날짜 (-r {date1} : {date2}) 또는 마지막 N 개정 (-l C).

유일한 단점은 SVN 이동이 실제로 copy + delete라는 사실로 인해 오탐 (false positive)이 있다는 것입니다.당신은 그것을 삭제하는 개정을 알게되면

, 당신은 다음 파일을보고 SVN 고양이 또는 svn의 수출를 사용할 수 있습니다

svn cat /path/to/repo/foo/[email protected] 

deprecated.h는 R103 삭제 된 이후, 나는 svn에게 deprecated.h에 대한 경로를 얻으라고 명령했다. r102 (삭제 전)에 존재했기 때문이다.

관련 문제