[svn] Subversion의 특정 코드 줄에 대한 변경 내역

Subversion 저장소에서 특정 코드 줄에 대한 변경 내역을 볼 수 있습니까?

예를 들어 특정 문이 추가 된시기 또는 해당 문이 변경된시기를 볼 수 있기를 원합니다. 해당 줄 번호가 더 이상 동일하지 않더라도 말입니다.



답변

Subversion에서 시간을 통해 진술을 추적하는 방법을 모릅니다.

그러나 파일의 특정 행이를 사용하여 마지막으로 변경된시기를 확인하는 것은 간단 svn blame합니다. SVNBook 확인 : svn blame참조 :

개요

svn blame TARGET[@REV]...

기술

지정된 파일 또는 URL에 대한 작성자 및 개정 정보를 인라인으로 표시합니다. 텍스트의 각 줄은 처음에 작성자 (사용자 이름)와 해당 줄의 마지막 변경에 대한 개정 번호로 주석 처리됩니다.


답변

에서 TortoiseSVN을의 클라이언트를 할 수있는 아주 좋은 기능이있다 :

  • 파일 비난, 각 줄의 마지막 변경 사항 표시 (표준)
  • 위의보기에서 특정 행을 클릭 한 후 “이전 개정을 비난합니다”(이것이 좋은 것입니다)

두 번째 기능은 행에 대한 마지막 수정 이전에 주석이 달린 개정판을 표시합니다. 이 기능을 반복적으로 사용하면 특정 라인의 기록을 추적 할 수 있습니다.


답변

나는 보통 :

  1. svn blame FILE먼저 실행하십시오 .
  2. 특정 행의 마지막 개정을 기록하십시오.
  3. -r인수를 사용하여 다른 쿼리를 수행하십시오 .

    svn blame FILE -r 1:REV
    
  4. 거기에서 수동으로 추적하십시오.


답변

이는 두 단계로 수행 할 수 있습니다.

  1. svn blame /path/to/your/file > blame.tmp
  2. grep "your_line_of_text" blame.tmp

blame.tmp 파일이 필요하지 않은 경우 나중에 삭제할 수 있습니다.

원칙적으로 간단한 스크립트는 거의 동일한 스크립트 언어로 작성할 수 있습니다.


답변

여기서 핵심은 얼마나 많은 역사가 필요한지입니다. 다른 사람들이 지적했듯이 짧은 대답은 다음과 같습니다 svn blame(자세한 내용 svn help blame은 참조). 역사상 먼 옛날에 이르렀거나 중요한 변화를 다루고 있다면이 명령 하나 이상이 필요할 것입니다.

나는 이것을 직접해야했고, 여기에서 (ye ole) 스레드를 찾았습니다. CLI특히 API가 변경된 경우 (예 : 다른 사람의 매우 오래된 작업 (브랜치가 아님)을 최신 버전을 기반으로 기능 브랜치로 다시 포팅하는 동안) 을 사용하여 해결하기 위해 제가 한 작업은 다음과 같습니다 . 날짜 트렁크). 예를 들어 함수 이름이 어떤 함수를 호출해야하는지 명확하지 않은 곳으로 충분히 변경되었습니다.

1 단계

다음 명령을 사용하면 “fileName.h”파일에서 변경된 내용이있는 커밋을 페이지로 이동하고 해당 개정 번호를 볼 수 있습니다 (참고 : svn 로그 텍스트에 따라 다소 컨텍스트에 대해 ’10’을 변경해야 할 수 있습니다. ).

svn log | grep -C 10 "fileName.h" | less

이 파일이 수정 된 개정 목록이 생성됩니다.

2 단계

그런 다음 관심있는 수정 사항으로 범위를 좁히기 위해 blame(또는 다른 사람들이 지적했듯이) 사용하는 간단한 문제였습니다 annotate.

cd trunk
svn blame fileName.h@r35948 | less

예를 들어 관심있는 개정판이 35948임을 발견했습니다.

3 단계

비난을 통해 관심있는 개정판을 찾았 으면 SVN 도구를 활용하기 위해 diff를 생성 할 수 있습니다.

svn diff -r35948:PREV fileName.h

결론

시각적 차이가 있으면 최신 / 업데이트 된 API 이름으로 이전 API 이름을 훨씬 쉽게 식별 할 수 있습니다.


답변

Eclipse 에서는 SVN 주석보기를 사용하여 코드의 각 줄이 언제 커밋되었는지 알 수 있습니다. 또는 파일 → 주석 표시 …를 마우스 오른쪽 버튼으로 클릭합니다 .


답변

svn annotate

AKA SVN의 비난 에서 TortoiseSVN을 .