programing

이동/이름 변경된 파일에 대해 Git Diff를 수행하는 방법은 무엇입니까?

newsource 2023. 8. 28. 21:03

이동/이름 변경된 파일에 대해 Git Diff를 수행하는 방법은 무엇입니까?

다음을 사용하여 파일을 이동했습니다.git mv이제 새 파일을 이전 파일(이전 이름, 현재 존재하지 않는 이름)과 비교해 보겠습니다.

이거 어떻게 하는 거지?

Git가 diffing 시 이동된 파일을 자동으로 감지하도록 하려면 -M을 사용해야 합니다.just 사용git diff언급된 뜨개질은 저에게 효과가 없습니다.

간단히 말하면:git diff -M해야 합니다.

이 스위치에 대한 설명서는 다음과 같습니다.

-M[<n>], --find-renames[=<n>]
       Detect renames. If n is specified, it is a threshold on the similarity index 
       (i.e. amount of addition/deletions compared to the file’s size). For example, 
       -M90% means git should consider a delete/add pair to be a rename if more than
       90% of the file hasn’t changed.

knittl이 작성한 내용 외에도 항상 다음을 사용할 수 있습니다.

git diff HEAD:./oldfilename newfilename

어디에HEAD:./oldfilename현재 디렉터리를 기준으로 마지막 커밋(HEAD)에 있는 이전 파일 이름을 의미합니다.

새 깃이 충분하지 않으면 대신 다음을 사용해야 합니다.

git diff HEAD:path/to/oldfilename newfilename

git 2.9(2016년 6월)를 사용하면 추가할 필요가 없습니다.-M더이상.git diff 용도-M결석으로

커밋 5404c11, 커밋 9501d19, 커밋 a9276a6, 커밋 f07fc9e, 62df1e6(2016년 2월 25일)을 Mattieu Moy()moy의 커밋을 참조하십시오.
(주니오 C 하마노에 의해 합병 -- -- 커밋 5d2a30d, 2016년 4월 3일)

diff활성화시키다diff.renames부전승으로

이름 바꾸기 탐지 기능은 매우 편리한 기능이며, 새 사용자가 이 기능을 활용하기 위해 설명서를 찾을 필요가 없습니다.

이름 바꾸기 탐지 활성화에 대한 잠재적인 반대 의견은 이름 바꾸기 탐지가 실패할 수도 있고 속도가 느릴 수도 있다는 것입니다.그러나 "와 같은 여러 경우에는 이름 바꾸기 탐지가 이미 기본적으로 활성화되어 있습니다.git status그리고 "git merge그래서 활성화되는diff.renames상황이 근본적으로 바뀌지는 않습니다.이름 바꾸기 탐지가 실패하면 " 사이에서 일관되게 실패합니다.git diff그리고 "git status".

이 설정은 배관 명령에 영향을 주지 않으므로 잘 작성된 스크립트는 영향을 받지 않습니다.

이 기능에 대한테스트가 여기에 있습니다.

사용하는 이유가 무엇이든 간에HEAD:./oldfilename(혹은 절대적인 길은) 나에게 효과가 없었지만,HEAD:oldfilename했습니다(고마워 cmn):

git diff HEAD:oldfilename newfilename
git diff 2a80f45:oldfilename f65f3b3:newfilename

HTH

git diff -M는 다른 사용자가 말한 대로 이름 바꾸기 탐지를 활성화합니다(@VonC가 지적한 대로 Git 2.9에서 기본적으로 활성화됨).그러나 큰 변경사항 집합이 있는 경우에도 부정확한 이름 바꾸기 탐지가 다시 해제될 수 있습니다.Git에는 다음과 같은 경고가 표시됩니다. 이 경고는 현재 보고 있는 디프에서 놓치기 쉽습니다.

warning: inexact rename detection was skipped due to too many files.
warning: you may want to set your diff.renameLimit variable to at least 450 and retry the command.

이 경우 git에서 제안하는 대로 구성 옵션을 설정합니다. 예를 들어

git config diff.renamelimit 450

diff 명령을 다시 실행합니다.

간단히 실행되는git diff아무런 논쟁 없이, 또는git diff -- newfilenameGit는 올바른 파일/파일을 비교할 수 있을 정도로 똑똑합니다(즉, 이름을 바꾼 후 변경된 내용으로 이름을 바꾸기 전의 원본 콘텐츠).

언급URL : https://stackoverflow.com/questions/5730460/how-to-do-a-git-diff-on-moved-renamed-file