2009-11-13 7 views

답변

43

추적하지 않습니다. 그것은 그것의 아름다움입니다.

힘내 기는 전체 프로젝트 트리의 스냅 샷만을 기록합니다 : 여기에 무엇이 있습니까 모든 파일은 커밋 이전처럼 보였습니다. 어떻게 우리는 여기에서 거기에있어, 힘내 상관 없어.

이렇게하면 이후 이미 지능형 도구를 으로 작성하여 해당 커밋에서 정보를 추출 할 수 있습니다. 예를 들어 Git의 이름 바꾸기는 삭제 된 모든 파일을 모든 새 파일과 비교하고 쌍으로 된 유사성 메트릭을 비교하여 수행됩니다. 유사도 메트릭이 x보다 큰 경우 yx (y < x) 사이의 경우 이름이 바뀐 것으로 간주되며 이름 바꾸기 + 편집으로 간주되고 y 이하인 경우 독립된 것으로 간주됩니다. 멋진 점은 당신이 "고고학자를 저지른"사실로서, xy을 지정해야한다는 것입니다. 커밋이 "이 파일의 파일 이름 변경"이라고 단순히 기록한 경우에는 작동하지 않습니다.

이동 된 내용 감지는 모든 파일을 조각으로 조각하고 모든 조각 사이의 유사도 메트릭을 계산 한 다음 여기에서 삭제 된이 조각과 거기에 추가 된 매우 유사한 조각을 실제로 추측 할 수 있습니다 여기에서 저기로 옮겨진 조각.

그러나 답변에서 언급 한 tonfa처럼 매우 비싸기 때문에 정상적으로 수행되지 않습니다. 그러나 일 수 있으며 그게 핵심입니다.

은 BTW :이 꽤 많이에만 커밋 같은 내 구글 웨이브, EtherPad, Gobby, SubEthaEdit, ACE 및 (주)

+19

나는 "그 아름다움"*을 얻지 못한다. 내 말은, 당신의 설명은 * "힘내는 파일에 실제로 일어나는 일을 저장하지 않으므로 나중에 스스로 추측 할 수 있습니다!"* 아름다움은 어디에 있습니까? – Kos

+3

제 의견으로는 추적이 핵심 버전 제어 자체의 일부가되어서는 안된다는 사실을 깨달았습니다. "아웃소싱 (outsourcing)"이 기능은 예를 들어 다음과 같은 많은 합병증과 단점을 피합니다. SVN. 단순성과 융통성을 얻을 수 있습니다 (SVN 도구는 일반적으로 원래 기록 된 추적 정보를 사용하는 것으로 제한됩니다. 실제로 코드베이스에 실제로 발생한 내용을 잘 나타내지는 못했을 수도 있음). – nikow

+0

Kos, 나중에 추측 할 필요가 없습니다. 힘내는 문제가 될 때 (즉, 병합 할 때) 발견하는 방법을 가지고있다. –

2

순전히 경험적 방법입니다. 파일 간의 거리를 비교하여 일치하는 블록을 찾습니다. 그러나이 경험적 방법은 코드를 복사하거나 새 파일로 옮길 때만 구현됩니다 (그렇지 않으면 모든 파일 쌍을 검사하는 데 비용이 많이 듭니다).

+0

에 의해 사용되는 운영 변환 모델의 정확한 반대? – Thilo

+0

예, 동일한 커밋과 일치하는 파일을 찾습니다. – tonfa

+2

** git diff ** 맨 페이지에있는'-M'과'-C' 옵션에 대한 문서를 참조하십시오. –

관련 문제