Git로 파일 복사 작업 기록
git-mv를 사용하여 파일 git을 이동하면 상태가 파일 이름이 바뀌었고 일부 부분을 변경하더라도 거의 동일한 것으로 간주됩니다(기록을 추적할 수 있어 좋습니다).
파일을 복사할 때 원본 파일에 새 복사본과 연결하려는 기록이 있습니다.
파일을 이동한 다음 원래 위치에서 다시 체크아웃하려고 시도했습니다. 한 번 이동하면 원래 위치를 체크아웃할 수 없습니다.
파일 시스템 복사를 시도한 다음 파일을 추가했습니다. git은 새 파일로 나열합니다.
기록을 원래 파일로 추적할 수 있는 파일 이름 변경/이동을 기록하는 것과 유사한 방식으로 Git 레코드가 파일 복사 작업 기록을 원래 파일로 추적할 수 있습니까?
Git는 추적 이름을 변경하거나 추적을 복사하지 않으므로 이름을 변경하거나 복사하지 않습니다.대신 이름 변경 및 복사 탐지를 수행합니다.에서 이름 변경 탐지를 요청할 수 있습니다.git diff
(및git show
)를 사용하여-M
옵션을 사용하여 변경된 파일의 추가 복사 탐지를 요청할 수 있습니다.-C
대신 옵션을 사용하여 모든 파일 중에서 더 비싼 복사 탐지를 요청할 수 있습니다.-C -C
Git-diff 맨 페이지를 참조하십시오.
-C -C
함축성이 있는-C
,그리고.-C
함축성이 있는-M
.
-M
의 바로 가기입니다.--find-renames
,-C
수단--find-copies
그리고.-C -C
다음과 같이 철자할 수도 있습니다.--find-copies-harder
.
또한 설정을 통해 항상 이름 바꾸기 탐지를 수행하도록 git를 구성할 수 있습니다.diff.renames
부울 참 값(예:true
또는1
), 그리고 당신은 그것을 설정함으로써 또한 복사 탐지를 하도록 Git를 요청할 수 있습니다.copy
또는copies
git-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
'programing' 카테고리의 다른 글
좋은 디자인을 배우기 위해 연구할 가치가 있는 오픈 소스 C 프로젝트는 무엇입니까? (0) | 2023.07.13 |
---|---|
jxl api / Apache POI를 사용하여 기존 Excel 파일 편집 (0) | 2023.07.13 |
Mariadb Docker 컨테이너, 여러 문을 실행할 수 없습니다. (0) | 2023.07.13 |
'MongoClient' 클래스를 찾을 수 없습니다. (0) | 2023.07.13 |
mongoDB 쿼리 "WHERE _id > 임계값" (0) | 2023.07.13 |