git에서 서로 다른 디렉토리 계층을 가진 두 가지 분기를 병합하는 방법은 무엇입니까?
웹 애플리케이션 프로젝트와 함께 Maven을 사용하기 시작했기 때문에 디렉토리 계층이 변경되었습니다. Maven 통합을위한 새 분기를 만들었습니다. 이제 두 개의 분기가 이전 디렉토리 계층 구조와 Maven 디렉토리 계층 구조를 가진 분기가 있습니다. 두 가지 모두 새로운 커밋 (버그 수정 및 새로운 기능)이 있습니다.
이전 분기를 제거하고 Maven 분기의 변경 사항을 병합하고 싶습니다. Git 병합은 해결할 수없는 것처럼 느껴지는 수많은 충돌을 제공합니다. 파일 경로가 변경 되었기 때문이라고 생각합니다.
이 병합에 접근하는 가장 좋은 방법은 무엇입니까?
merge.renameLimit
이 병합을 위해 높게 설정하십시오 . git은 이름 변경을 감지하려고 시도하지만 O (n ^ 2) 처리 시간이 필요하기 때문에 파일 수가이 제한 미만인 경우에만 :
git config merge.renameLimit 999999
그런 다음 완료되면 :
git config --unset merge.renameLimit
블로그 게시물 " Confluence, git, rename, merge oh my… "는 Robie 의 답변 을 설명하는 흥미로운 정보를 추가합니다 (upvoted) :
이름 바꾸기를 감지하려고 할 때 git은 다음을 사용하여 정확한 이름과 부정확 한 이름 을 구분합니다 .
- 전자는 파일의 내용을 변경하지 않고 이름을 변경하고
- 후자는 파일 내용에 대한 변경을 포함 할 수있는 이름 바꾸기 (예 : Java 클래스 이름 변경 / 이동)입니다.
정확한 이름 변경을 감지하는 알고리즘은 선형이고 정확하지 않은 이름 변경 감지 알고리즘이 2 차 (
O(n^2)
)이고 변경된 파일 수가 특정 임계 값 (1000 x 1000)을 초과하는 경우 git은이를 수행하지 않기 때문에 이러한 구별이 중요 합니다. 기본).명시 적으로 설정되지 않은 경우
merge.renameLimit
기본값은 1000 개 파일로 설정되거나diff.renameLimit
설정된 경우 값을 사용합니다 .
(가)diff.renameLimit
에 영향을git diff
,git show
그리고git log
동안은merge.renameLimit
병합 시도에 적용 (git merge
,git cherry-pick
) 만.git이 출력을 보는 것과 같은 일반적인 작업 중에 이름 바꾸기를 찾지 않도록
merge.renameLimit
변경하는 대신를 변경하는 것이 좋습니다 .diff.renameLimit
git diff
이름 바꾸기를 표시하려면 이름 바꾸기 감지를 켜는 옵션 과 함께
git show
또는 같은 명령을git log
사용할 수 있습니다-M
.
예, 커널의 경우
[diff]
renamelimit=0
기본 제한이 실제로 매우 낮기 때문에 제한을 완전히 비활성화합니다. 힘내는 이름 바꾸기 감지에 아주 능숙합니다.
그러나 기본값이 낮은 이유는 충분하지 않기 때문이 아니라 메모리를 많이 사용하게 될 수 있기 때문입니다 (메모리가 부족한 경우 스와핑은 "매우 깔끔함"에서 "당밀처럼 느리다"-그러나 여전히 CPU 제한이 없으며 미친 듯이 페이징입니다.)
'Nice programing' 카테고리의 다른 글
srand를 초기화하는 권장 방법? (0) | 2020.11.29 |
---|---|
HTTP 406 및 415 오류 코드 (0) | 2020.11.29 |
PHP에서 세션과 쿠키의 차이점은 무엇입니까? (0) | 2020.11.29 |
Django post_save () 신호 구현 (0) | 2020.11.29 |
부울이 null인지 Java 확인 (0) | 2020.11.29 |