2013-07-22 3 views
1

VisualSVN Server 및 TortoiseSVN을 사용하고 있으며 특정 파일의 여러 버전에서 특정 줄이 나타나는 위치를 찾으려고합니다.코드 줄을 옮긴 파일의 개정판을 찾는 방법은 무엇입니까?

이전 수정본에서 save(12);이 나타나는 곳과 수정본이 옮겨진 곳을 내 작업 복사본과 비교하려고합니다.

r1과 내 작업 복사본 간의 통합 된 차이는 초기 위치 만 보여줍니다. 차이점을 개별적으로 보려고했지만 수백 건의 수정이있었습니다.

이렇게 할 방법이 있습니까?

답변

0

파일의 현재 개정판에서 TortoiseSVN 비난 도구를 실행하면 해당 줄이 현재의 개정판을 볼 수 있습니다 (누가 그랬는지).

+0

당신은 역사적 측면의 요구 사항 그리워 (이전 그렙 비교) 소스 개정 –

+0

마지막으로 변경 한 행이 이동 일 경우 비난 도구가 마지막 rev 행 형식을 표시합니다. –

+0

안녕하세요 스티브, 고마워요.하지만 내가 뭘하고 있는지 보여주지는 않습니다. 현재 개정판을 기준으로 한 번 표시된 행만 표시합니다. 나는 @LazyBadger가 올바르게 해냈다고 생각한다. –

0

이 수동으로 또는 자동으로 스크립트를 사용하고 단계로 작동하지만 당신은 얼마나 빨리 놀랄 것입니다 수 있습니다

  1. 이 라인에있는 경우 전달하는 grep 명령을 쓰기 한 위치에서 실패 다른 - 예 grep -n "줄의 텍스트"filename.ext| 그렙CurrentLineNo:
  2. 1000 개정 가능성을 가지고 있다고 가정이 1000에 통과해야 500 레브하고 다시 실행 0
  3. 업데이트를 하나 개의 파일에 실패 - 통과되는 경우 당신이 가서 당신이 갈 실패 어떤 경우 든 이전의 절반의 차이를 사용하고이 과정의 끝에서 250, 125, 62, 31, 15, 7, 4, 2, 1 같은 작업을 계속 수행합니다 (바이너리 검색) - 파일 1의 인접한 두 개의 개정판이 실패 할 것입니다. 1000 개정판의 경우 10 단계에서 1 백만 건당 20 건입니다.
+0

BTW 분산 형 VCS (git 및 mercurial)는 자동으로이 작업을 수행 할 수 있습니다. –

0

머리말

  • 제 DIFF 환산」하는 수정에 이동의 '
  • DIFF 출력에 "+ 문자열"로 표시된다 DIFF의 관점에서 "첫 번째 문자열의 표시" (기존 라인의 diff/context/3 행을 감안한 새로운 라인은 diff-context/3 라인을 벗어난다.) 같은 diff에 "- string"과 "+ string"이 나타난다.

하지 즉시 사용 가능한 코드,하지만 더러운 초안 아이디어

순수 서브 방법

(적어도) 두 가지 방법이있다이 방법 : 비난과 함께하고 아래에서 위에서 아래로 역사를 탐구하는 것은 상단으로 with blip-file string "save (12)", 문자열 번호 (어떤 방식 으로든) 및 최종 수정본 (첫 번째 열)을 찾음 (블럭 방법 1) svn blame FILE > BLAMED-FILE, REV 3) 역사에서 뒤로 이동 svn blame -r REV FILE > BLAMED-FILE

단계 2, 3을 반복합니다 .wh ile a) 문자열의 "save (12)"를 변경하면 "Movement revision"이 표시되지 않습니다 (현재의 것보다 이전 버전입니다). b) 파일의 REV가 현재와 동일합니다 - "save (12) "

로그 + DIFF-방법 1) svn log -q -v FILE은 (어떠한 형태의 파일에 영향 버전의 목록을 얻기) 2)에서의 모든 개정에 상관 버전을 찾기) 3 최신 개정 방향 오래된에서 svn diff -c REV | grep save(12) > FILE-REV 수행위한 서문에서 둘째 주, 검사 FILE-REV 로컬 재료에서 테스트

의욕 + hgsubversion 방법

. 나는 파일에 Region=-MA 문자열은 문자열 (26)의 개정 598 문자열에서 (SVN 번호가 1, 598입니다) 개정 597에 출연 "대답과

>hg grep --all -n Region Charter.ini 
Charter.ini:599:28:+:Region=-NE 
Charter.ini:598:23:-:Region= 
Charter.ini:598:26:-:Region=-MA 
Charter.ini:598:24:+:Region=-MA 
Charter.ini:597:13:+:Region=-MI 
Charter.ini:597:16:+:Region=-GA 
Charter.ini:597:19:+:Region=-CA 
Charter.ini:597:23:+:Region= 
Charter.ini:597:26:+:Region=-MA 

한 명령을 라인"지역 = -MA "의 역사를보고 싶어 문자열 24 "로 옮겨졌고 diffs가이를 확인했습니다.

597 (파일 추가)

>hg diff -c 598 Charter.ini 
diff -r 25efa70e5350 -r 5665435f74b4 Charter.ini 
--- a/Charter.ini  Tue Dec 29 08:27:48 2009 +0000 
+++ b/Charter.ini  Tue Dec 29 13:09:58 2009 +0000 
... 
-//CHARTER-NET-5BLK 
66.188.0.0-66.191.255.255 
+71.80.0.0-71.95.255.255 
+75.128.0.0-75.143.255.255 
... 
- 
-//NETBLK-CHARTER-NET 
-Region= 
-75.128.0.0-75.143.255.255 
+71.84.32.0-71.84.63.255 

Region=-MA 
75.130.96.0-75.130.111.255 

>hg diff -c 597 Charter.ini 
diff -r 7e3dfc891358 -r 25efa70e5350 Charter.ini 
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 
+++ b/Charter.ini  Tue Dec 29 08:27:48 2009 +0000 
... 
+Region=-MA 
+75.130.96.0-75.130.111.255 

598 내가 대신 전체 문자열의 하위 문자열 사용하는 이유는 무엇입니까? 따라서 사이클에 수행해야합니다 비난, 문자열 -에 - 질문 새 등의 버전을 사용 - 전체 문자열의 경우 내가 이상하고 예상치 못한 결과를 얻었다해서

>hg grep --all -n Region=-MA Charter.ini 
Charter.ini:597:26:+:Region=-MA 
관련 문제