2010-01-19 4 views
7

저는 기존 프로젝트에서 엄청난 파일을 이동하려고합니다. 이 작업을 수행하기 전에 다중 파일 기록이있는 코드를 분석하는 데 사용되는 몇 가지 기술을 회사에서 파악하고 싶습니다.힘내 : 다중 파일 기록이있는 코드를 분석하는 방법?

어떻게해야합니까? "이 코드 줄은 어디에서 유래 되었습니까?" 콘텐츠가 여러 파일을 통해 이동 한 경우 수명이 다 되었습니까?

나는 자식에게 명시 적으로 이름 바꾸기를하지 않는다는 것을 알기 때문에 (좋은 이유로)이 질문을 할 수 있어야한다. 이것을 시각화하는 방법이 있다면 그것도 알아두면 좋을 것입니다.

답변

5

git 도구 상자에서 3 가지 도구를 살펴볼 것을 권합니다. 첫 번째 것은 비난입니다. 이것은 cvs와 매우 흡사합니다. 그것은 파일의 각 줄을 마지막으로 건 드린 커밋을 보여줍니다. 이전에 무엇이 있었는지 살펴보고 싶다면, 줄을 만진 커밋을 가져 와서 이전 커밋을 살펴볼 수 있습니다.

git show <sha1_of_interesting_commit>^ -- file/path 

그 전에 무슨 일이 일어 났는지 비난을 반복 할 수 있습니다.

git blame <sha1_of_interesting_commit>^ -- file/path 

두 번째 도구는 과거의 이름을 변경 파일을 추적 할 수 --follow을 사용하고 있습니다.

git log --follow -- file/path 

셋째, 아마도 가장 유용한 도구는 기록 할 선택 옵션입니다. 이렇게하면 지정된 텍스트 비트가 포함 된 제거, 변경 또는 변경된 행에 대한 기록이 검색됩니다. 이것은 함수 이름 같은 것을 추적하는데 특히 유용합니다. 그것은 특정 커밋에서 새로운 파일 일지 모르지만 다른 소스 파일에서 나온 것입니까? 같은 시간에 추가되었거나 이동하기 전에 호출이 추가 되었습니까?

git log -S"Interesting_Function" 

당신이 패치 또는 합계 옵션 (예를 들어, -p 또는 --stat) 출력이 그 변경 당신은 또한 전체 변경 사항이 표시됩니다 --pickaxe-all를 사용하지 않는 한 실제로 검색 문자열을 포함하는 파일로 제한됩니다를 사용하는 경우.

문자열의 모든 현재 발생 위치를 표시하기 위해 git grep과 결합하여 곡괭이는 매우 유용한 기록 마이닝 도구입니다.

0

git blame "이 코드 줄은 어디에서 왔습니까?" 내가 이름 바꾸기를 처리하는지 모르겠다. 아마 그렇 겠지.

+1

git blame은 (특히 코드를 리팩터링 할 때) 라인 움직임을 감지하는 데는 좋지 않습니다. 내 말은 하나의 개발자가 라인을 썼다면 다음 개발자가 어떤 이유로 라인을 위아래로 움직 였다는 뜻이다. – Eimantas

+0

1)'git blame'은 코드의 특정 부분이 어디서 왔는지 알려주지 않기 때문에이 답변이 도움이된다고 생각하지 않습니다. 이것이'git log '의 목적입니다. 'git blame'은 파일의 각 기존 코드 행을 편집하는 마지막 사람을 알려줍니다. 2)'- git blame'은 파일명이 합쳐진 답안에 따라 --follow 매개 변수를 추가하지 않는 한 파일명이 변경되지 않습니다. –

관련 문제