programing

Git로 파일 복사 작업 기록

stoneblock 2023. 7. 13. 20:21

Git로 파일 복사 작업 기록

git-mv를 사용하여 파일 git을 이동하면 상태가 파일 이름이 바뀌었고 일부 부분을 변경하더라도 거의 동일한 것으로 간주됩니다(기록을 추적할 수 있어 좋습니다).

파일을 복사할 때 원본 파일에 새 복사본과 연결하려는 기록이 있습니다.

파일을 이동한 다음 원래 위치에서 다시 체크아웃하려고 시도했습니다. 한 번 이동하면 원래 위치를 체크아웃할 수 없습니다.

파일 시스템 복사를 시도한 다음 파일을 추가했습니다. git은 새 파일로 나열합니다.

기록을 원래 파일로 추적할 수 있는 파일 이름 변경/이동을 기록하는 것과 유사한 방식으로 Git 레코드가 파일 복사 작업 기록을 원래 파일로 추적할 수 있습니까?

Git는 추적 이름을 변경하거나 추적을 복사하지 않으므로 이름을 변경하거나 복사하지 않습니다.대신 이름 변경 및 복사 탐지를 수행합니다.에서 이름 변경 탐지를 요청할 수 있습니다.git diff(및git show)를 사용하여-M옵션을 사용하여 변경된 파일의 추가 복사 탐지를 요청할 수 있습니다.-C대신 옵션을 사용하여 모든 파일 중에서 더 비싼 복사 탐지를 요청할 수 있습니다.-C -CGit-diff 맨 페이지를 참조하십시오.

-C -C함축성이 있는-C,그리고.-C함축성이 있는-M.

-M의 바로 가기입니다.--find-renames,-C수단--find-copies그리고.-C -C다음과 같이 철자할 수도 있습니다.--find-copies-harder.

또한 설정을 통해 항상 이름 바꾸기 탐지를 수행하도록 git를 구성할 수 있습니다.diff.renames부울 참 값(예:true또는1), 그리고 당신은 그것을 설정함으로써 또한 복사 탐지를 하도록 Git를 요청할 수 있습니다.copy또는copiesgit-config 메뉴 페이지를 참조하십시오.

다음 항목도 확인하십시오.-l에 대한 선택권.git diff및 관련 구성 변수diff.renameLimit.


참고:git log <pathspec>Git: 여기에서 다르게 작동합니다.<pathspec>경로 구분 기호 집합입니다. 여기서 경로는 (하위) 디렉토리 이름일 수 있습니다.이름 변경 및 복사 탐지가 실행되기 전에 기록을 필터링하고 단순화합니다.이름 및 복사본을 따르려면 다음을 사용합니다.git log --follow <filename>(현재는 약간 제한적이며 단일 파일에만 작동합니다.)

어떤 이유로 Jakub Narębski의 답변처럼 복사 탐지를 설정할 수 없는 경우 Git가 복사된 파일의 기록을 세 번의 커밋으로 탐지하도록 할 수 있습니다.

  • 복사하는 대신 새 분기로 전환하고 파일을 해당 분기의 새 위치로 이동합니다.
  • 거기에 원본 파일을 다시 추가합니다.
  • 옵션을 하여 새 합니다.--no-ff.

Raymond Chen에게 크레딧을 드립니다.다음은 그의 절차입니다.파일 이름을 지정했다고 합니다.SomeFile.cpp그리고 당신은 사본의 이름이 지어지기를 원합니다.SomeOtherFile.cpp:

origFile=SomeFile.cpp
copyName=SomeOtherFile.cpp
branchName=duplicate-SomeFile

git checkout -b $branchName # create and switch to branch

git mv $origFile $copyName # make the duplicate
git commit -m "duplicate $origFile to $copyName"

git checkout HEAD~ $origFile # bring back the original
git commit -m "restore duplicated $origFile"

git checkout - # switch back to source branch
git merge --no-ff $branchName -m "Merge branch $branchName" # merge dup into source branch

이 작업은 Git Bash의 Windows에서 실행할 수 있습니다.


2020-05-19:위의 솔루션은 원본 파일의 로그를 변경하지 않고, 병합 충돌을 일으키지 않으며, 더 짧다는 장점이 있습니다.이전 솔루션에는 4가지 커밋이 있었습니다.

  • 복사하는 대신 새 분기로 전환하고 파일을 해당 분기의 새 위치로 이동합니다.
  • 원래 분기로 전환하고 파일 이름을 변경합니다.
  • 새 분기를 원래 분기로 병합하여 두 파일을 모두 유지하여 사소한 충돌을 해결합니다.
  • 원래 파일 이름을 별도의 커밋으로 복원합니다.

(솔루션은 https://stackoverflow.com/a/44036771/1389680.) 에서 제공합니다.

언급URL : https://stackoverflow.com/questions/1043388/record-file-copy-operation-with-git