Tuesday 13 February 2018

재귀 적 전략에 의한 git 병합


재귀 적 전략에 의한 Git 병합
병합 메커니즘 (git merge 및 git pull 명령)을 사용하면 백엔드의 '병합 전략'을 - s 옵션으로 선택할 수 있습니다. 일부 전략은 자체 옵션을 취할 수도 있습니다. 이 옵션은 - X & lt; option & gt; 자식 병합 및 / 또는 자식 끌어 인수.
이렇게하면 3 방향 병합 알고리즘을 사용하여 두 개의 헤드 (즉, 현재 브랜치와 다른 브랜치)를 해결할 수 있습니다. 그것은 십자가 병합 모호성을 신중하게 탐지하려고 시도하며 일반적으로 안전하고 빠른 것으로 간주됩니다.
이 방법은 3 방향 병합 알고리즘을 사용하는 두 개의 헤드 만 해결할 수 있습니다. 3 방향 병합에 사용할 수있는 공통 조상이 둘 이상이면 공통 조상의 병합 된 트리를 만들어이를 3 방향 병합을위한 참조 트리로 사용합니다. 이는 Linux 2.6 커널 개발 이력에서 가져온 실제 병합 커밋에 대한 테스트로 인해 불일치가 발생하지 않고 병합 충돌이 줄어들 었다고보고되었습니다. 또한 이름 변경과 관련된 병합을 감지하고 처리 할 수 ​​있습니다. 하나의 분기를 가져 오거나 병합 할 때 기본 병합 전략입니다.
'재귀 적'전략은 다음과 같은 옵션을 취할 수 있습니다.
이 옵션은 '우리'버전을 선호함으로써 충돌하는 덩어리가 자동으로 자동 해결되도록합니다. 우리 쪽과 충돌하지 않는 다른 트리의 변경 사항이 병합 결과에 반영됩니다. 이진 파일의 경우 전체 내용이 우리 측에서 가져옵니다.
이것은 다른 트리가 전혀 포함하지 않는 'ours'병합 전략과 혼동되어서는 안됩니다. 그것은 다른 나무가 한 모든 것을 버리고 '우리의'역사는 그 안에 일어난 모든 것을 포함한다고 선언합니다.
이것은 '우리'의 반대입니다. "우리"와는 달리이 병합 옵션을 혼란스럽게하는 "그들의 것"병합 병합이 없다는 점에 유의하십시오.
이 옵션을 사용하면 'merge-recursive'는 중요하지 않은 일치 행 (예 : 고유 기능의 중괄호)으로 인해 때때로 발생하는 mismerges를 피하기 위해 약간의 시간을 소비합니다. 병합 할 분기가 격렬하게 갈라 졌을 때 이것을 사용하십시오. git-diff [1] --patience를 참고하십시오.
'merge-recursive'에게 다른 diff 알고리즘을 사용하도록 지시합니다. 중요하지 않은 매칭 라인 (뚜렷한 기능의 중괄호)으로 인해 발생하는 불일치를 피할 수 있습니다. git-diff [1] --diff-algorithm도 참조하십시오.
ignore-space-change ignore-all-space ignore-space-at-eol.
3 방향 병합을 위해 표시된 공백 변경 유형의 행을 변경되지 않은 것으로 처리합니다. 행에 대한 다른 변경 사항과 혼합 된 공백 변경 사항은 무시되지 않습니다. git-diff [1] - b, - w 및 --ignore-space-at-eol도 참조하십시오.
'their'버전이 라인에 공백 변경 만 도입하면 'our'버전이 사용됩니다.
'our'버전이 공백 변경을 도입했지만 'their'버전이 상당한 변경을 포함하면 'their'버전이 사용됩니다.
그렇지 않으면 병합은 일반적인 방법으로 진행됩니다.
3 방향 병합을 해결할 때 가상 체크 아웃을 실행하고 파일의 모든 3 단계를 체크인합니다. 이 옵션은 다른 깨끗한 필터 또는 줄 끝 정규화 규칙으로 분기를 병합 할 때 사용하기위한 것입니다. 자세한 내용은 gitattributes [5]의 "checkin / checkout 속성이 다른 분기를 병합"을 참조하십시오.
재 정규화 옵션을 비활성화합니다. 이것은 merge. renormalize 구성 변수를 겹쳐 씁니다.
이름 바꾸기 감지 기능을 해제하십시오. git-diff [1] --no-renames도 참조하십시오.
이름 바꾸기 감지 기능을 켜고 필요에 따라 유사도 임계 값을 설정합니다. 이것이 기본값입니다. git-diff [1] --find-renames도 참조하십시오.
find-renames = & lt; n & gt;에 대한 더 이상 사용되지 않는 동의어입니다. .
이 옵션은보다 진보 된 형태의 '하위 트리 (subtree)'전략입니다. 이 전략은 병합 할 때 두 나무를 서로 맞춰야하는 방식을 추측합니다. 대신 지정된 경로가 두 개의 트리 모양을 일치시키기 위해 접두사로 사용됩니다 (또는 처음부터 제거됩니다).
이 경우 두 개 이상의 헤드가있는 경우는 해결되지만 수동으로 해결해야하는 복잡한 병합은 수행되지 않습니다. 주제 머리말을 함께 묶는 데 주로 사용됩니다. 둘 이상의 분기를 가져 오거나 병합 할 때 기본 병합 전략입니다.
이렇게하면 여러 개의 머리가 처리되지만 병합 된 트리는 항상 현재 분기 헤드의 트리이므로 다른 모든 분기의 모든 변경 사항을 무시합니다. 그것은 사이드 브랜치의 오래된 개발 이력을 대체하기 위해 사용됩니다. 이것은 '재귀 적'병합 전략에 대한 - Xours 옵션과 다릅니다.
이는 수정 된 재귀 적 전략입니다. 나무 A와 B를 병합 할 때 B가 A의 하위 트리에 해당하면 B는 먼저 같은 레벨의 나무를 읽지 않고 A의 트리 구조와 일치하도록 조정됩니다. 이 조정은 공통 조상 트리에서도 수행됩니다.
3- 방향 병합을 사용하는 전략 (기본값, '재귀 적'포함)을 사용하면 두 분기에서 변경이 이루어 지지만 나중에 분기 중 하나에서 되돌릴 경우 변경 내용이 병합 된 결과에 나타납니다. 어떤 사람들은이 행동이 혼란 스럽다는 것을 알게됩니다. 병합을 수행 할 때 헤드 및 병합베이스 만 고려되므로 개별 커밋이 고려되지 않기 때문에 발생합니다. 따라서 병합 알고리즘은 복귀 된 변경 사항을 전혀 변경되지 않은 것으로 간주하고 대신 변경된 버전으로 대체합니다.

재귀 적 전략에 의한 Git 병합
App Store를 통해 가져 오기 우리의 응용 프로그램 에서이 게시물을 읽으십시오!
git의 병합 전략은 무엇입니까? [복제]
git이 내가 작업하고있는 파일을 병합 할 때, 다음을 볼 수있다.
재귀 전략은 정확히 무엇입니까? 거기에 다른 전략이 있다면 (있는 경우)? 그리고 다른 하나를 사용하면 어떤 이점이 있습니까? 전략에 따라 실적이 다를 수 있습니까? 아니면 두 가지 전략으로 병합 결과가 달라질 수 있습니까?
Edward Thomson, t0mm13b, KatieK, Bohemian & # 9830; , Ram kiran Jan 10 '13 at 2:55.
이 질문은 전에 질문을 받았고 이미 답변이 있습니다. 이러한 답변으로 귀하의 질문에 완전히 답변하지 못하면 새로운 질문을하십시오.

МОДЕРАТОРЫ.
Reddit에 오신 것을 환영합니다.
인터넷의 첫 페이지.
수천 개의 커뮤니티 중 하나에 가입하십시오.
Это архивированный пост. Вы не можете голосовать или комментировать.
토론에 추가하고 싶습니까?
помощь правила сайта центр поддержки вики реддикет 모드 가이드 라인 связаться с нами.
приложенияи инструменты Reddit for iPhone Reddit for Android 모바일 웹 사이트 кнопки.
회신을 보내십시오. & # 32; & # 32; Политика конфиденциальности. &부; 2017 reddit 그래픽입니다. Все права защищены.
REDDIT 및 ALIEN 로고는 reddit inc의 등록 상표입니다.
& pi; & # 32;의 PID 113284에 의해 렌더링 됨. app-397 & # 32; 2017-12-19 20 : 39 : 16.477463 + 00 : 00 9e1524e 국가 코드 : UA.

재귀 적 전략에 의한 Git 병합
App Store를 통해 가져 오기 우리의 응용 프로그램 에서이 게시물을 읽으십시오!
다른 git merge 전략은 언제 사용 하시겠습니까?
git-merge의 man 페이지에는 사용할 수있는 여러 가지 병합 전략이 있습니다.
해결 - 3 방향 병합 알고리즘을 사용하여 두 개의 헤드 (즉, 현재 브랜치와 다른 브랜치) 만 해결할 수 있습니다. 그것은 십자가 병합 모호성을 신중하게 탐지하려고 시도하며 일반적으로 안전하고 빠른 것으로 간주됩니다.
재귀 적 - 3 방향 병합 알고리즘을 사용하여 두 개의 머리를 처리 할 수 ​​있습니다. 3 방향 병합에 사용할 수있는 공통 조상이 둘 이상이면 공통 조상의 병합 된 트리를 만들어이를 3 방향 병합을위한 참조 트리로 사용합니다. 이는 Linux 2.6 커널 개발 기록에서 가져온 실제 병합 커밋에 대한 테스트를 통해 잘못된 병합을 일으키지 않고 병합 충돌이 줄어들 었다고보고되었습니다. 또한 이름 변경과 관련된 병합을 감지하고 처리 할 수 ​​있습니다. 하나의 분기를 가져 오거나 병합 할 때 기본 병합 전략입니다.
octopus - 두 개 이상의 경우를 해결하지만 수동으로 해결해야하는 복잡한 병합을 거부합니다. 주제 머리말을 함께 묶는 데 주로 사용됩니다. 두 개 이상의 분기를 가져 오거나 병합 할 때 기본 병합 전략입니다.
ours - 이것은 여러개의 머리를 해결하지만, 병합의 결과는 항상 현재 가지 머리입니다. 그것은 사이드 브랜치의 오래된 개발 이력을 대체하기 위해 사용됩니다.
subtree - 수정 된 재귀 적 전략입니다. 나무 A와 B를 병합 할 때 B가 A의 하위 트리에 해당하면 B는 먼저 같은 레벨의 나무를 읽지 않고 A의 트리 구조와 일치하도록 조정됩니다. 이 조정은 공통 조상 트리에서도 수행됩니다.
기본값과 다른 것을 언제 지정해야합니까? 각각의 시나리오에 가장 적합한 것은 무엇입니까?
나는 해결에 익숙하지 않지만 다른 사람들을 사용했다.
순방향이 아닌 병합의 경우 재귀가 기본값입니다. 우리는 모두 그 점에 익숙합니다.
나는 합병 될 필요가있는 몇 개의 나무를 가지고있을 때 낙지를 사용했습니다. 많은 지사가 독자적으로 개발 한 대규모 프로젝트에서이를 볼 수 있으며 모든 것이 단일 헤드로 모일 준비가되었습니다.
문어 분기는 깔끔하게 할 수있는 한 여러 커밋을 병합합니다.
예를 들어 마스터가있는 프로젝트가 있고 병합 할 세 가지 분기가 있다고 상상해보십시오 (a, b, c라고 함).
일련의 재귀 적 병합은 다음과 같이 보일 것입니다 (재귀를 강제하지 않았으므로 첫 번째 병합은 빨리 감기 였음에 유의하십시오).
그러나 단일 문어 병합은 다음과 같이 보입니다.
우리의 생각 == 나는 다른 머리를 끌어 들이고 싶지만, 머리가 가져 오는 모든 변화를 버리십시오.
이것은 브랜치의 효과없이 브랜치의 히스토리를 유지합니다.
(읽기 : 브랜치 간의 변경 사항을 살펴 보지 않습니다. 브랜치는 병합되고 파일에는 아무 것도 수행되지 않습니다. 다른 브랜치에서 병합하고 싶을 때마다 "우리 파일 버전 또는 버전 "을 사용하면 git merge - X ours를 사용할 수 있습니다)
서브 트리는 다른 프로젝트를 현재 프로젝트의 서브 디렉토리에 병합하려는 경우에 유용합니다. 하위 모듈로 포함시키지 않으려는 라이브러리가있는 경우 유용합니다.
실제로 당신이 선택하고 싶은 유일한 두 가지 전략은 지점에 의한 변경을 포기하고 지점을 역사에 남겨두고 자한다면 독립 프로젝트를 수퍼 프로젝트의 하위 디렉토리에 병합하는 경우 서브 트리 ( 'git-gui'in ' git '저장소).
문어 병합은 두 개 이상의 분기를 병합 할 때 자동으로 사용됩니다. 해결 방법은 주로 역사적인 이유와 재귀 적 병합 전략 모서리 사례에 부딪혔을 때 주로 발생합니다.
"Resolve"와 "Recursive"병합 전략.
재귀 적 (recursive)은 현재 기본 2 헤드 전략이지만, 일부 검색 후에 마침내 "해결"병합 전략에 대한 정보를 찾았습니다.
원래 "해결"은 Git 병합의 기본 전략이었습니다.
가능한 병합 기준이 두 가지 이상인 교차 간 병합 상황에서 해결 전략은 다음과 같이 작동합니다. 가능한 병합 기준 중 하나를 선택하고 최선의 결과를 얻으십시오. 실제로 소리가 나쁘지는 않습니다. 사용자가 코드의 다른 부분을 작업하고있는 것으로 나타났습니다. 이 경우 Git은 이미 수행중인 변경 사항을 다시 검사하고 충돌을 피하면서 중복 된 변경 사항을 건너 뜁니다. 또는, 이것이 충돌을 일으키는 경미한 변경이라면 적어도 개발자가 처리 할 수있는 충돌이 있어야합니다.
나는 기본 재귀 전략으로 실패한 "해결"을 사용하여 나무를 성공적으로 병합했습니다. 나는 치명적이었다 : git write-tree는 트리 오류를 작성하지 못했고이 블로그 게시물 (미러) 덕분에 "-s resolve"를 시도했다. 나는 아직도 정확하게 이유를 모르겠다. 하지만 나는 두 나무에서 중복 된 변화가 있었기 때문에 그것이 적절하다고 생각했다.

No comments:

Post a Comment