한 소스 코드 파일에서 다른 소스 코드로 함수를 옮기면 git 리비전 로그 (새 파일 용)가 코드 조각이 원래 어디서 왔는지를 알 수 있습니다 (예 : 이력보기 섹션보기 this tutorial 참조).git 추적 소스 코드는 파일간에 어떻게 이동합니까?
어떻게 작동합니까?
한 소스 코드 파일에서 다른 소스 코드로 함수를 옮기면 git 리비전 로그 (새 파일 용)가 코드 조각이 원래 어디서 왔는지를 알 수 있습니다 (예 : 이력보기 섹션보기 this tutorial 참조).git 추적 소스 코드는 파일간에 어떻게 이동합니까?
어떻게 작동합니까?
추적하지 않습니다. 그것은 그것의 아름다움입니다.
힘내 기는 전체 프로젝트 트리의 스냅 샷만을 기록합니다 : 여기에 무엇이 있습니까 모든 파일은 커밋 이전처럼 보였습니다. 어떻게 우리는 여기에서 거기에있어, 힘내 상관 없어.
이렇게하면 이후 이미 지능형 도구를 으로 작성하여 해당 커밋에서 정보를 추출 할 수 있습니다. 예를 들어 Git의 이름 바꾸기는 삭제 된 모든 파일을 모든 새 파일과 비교하고 쌍으로 된 유사성 메트릭을 비교하여 수행됩니다. 유사도 메트릭이 x
보다 큰 경우 y
과 x
(y < x
) 사이의 경우 이름이 바뀐 것으로 간주되며 이름 바꾸기 + 편집으로 간주되고 y
이하인 경우 독립된 것으로 간주됩니다. 멋진 점은 당신이 "고고학자를 저지른"사실로서, x
과 y
을 지정해야한다는 것입니다. 커밋이 "이 파일의 파일 이름 변경"이라고 단순히 기록한 경우에는 작동하지 않습니다.
이동 된 내용 감지는 모든 파일을 조각으로 조각하고 모든 조각 사이의 유사도 메트릭을 계산 한 다음 여기에서 삭제 된이 조각과 거기에 추가 된 매우 유사한 조각을 실제로 추측 할 수 있습니다 여기에서 저기로 옮겨진 조각.
그러나 답변에서 언급 한 tonfa처럼 매우 비싸기 때문에 정상적으로 수행되지 않습니다. 그러나 은 일 수 있으며 그게 핵심입니다.
은 BTW :이 꽤 많이에만 커밋 같은 내 구글 웨이브, EtherPad, Gobby, SubEthaEdit, ACE 및 (주)
나는 "그 아름다움"*을 얻지 못한다. 내 말은, 당신의 설명은 * "힘내는 파일에 실제로 일어나는 일을 저장하지 않으므로 나중에 스스로 추측 할 수 있습니다!"* 아름다움은 어디에 있습니까? – Kos
제 의견으로는 추적이 핵심 버전 제어 자체의 일부가되어서는 안된다는 사실을 깨달았습니다. "아웃소싱 (outsourcing)"이 기능은 예를 들어 다음과 같은 많은 합병증과 단점을 피합니다. SVN. 단순성과 융통성을 얻을 수 있습니다 (SVN 도구는 일반적으로 원래 기록 된 추적 정보를 사용하는 것으로 제한됩니다. 실제로 코드베이스에 실제로 발생한 내용을 잘 나타내지는 못했을 수도 있음). – nikow
Kos, 나중에 추측 할 필요가 없습니다. 힘내는 문제가 될 때 (즉, 병합 할 때) 발견하는 방법을 가지고있다. –