LOCAL, BASE 또는 REMOTE 중 최종적으로 사용될 Git 파일의 버전은 무엇입니까?
다음 기간 동안 충돌이 발생할 때git merge
저는 멜드라고 불리는 머저 도구를 엽니다.LOCAL, BASE, REMOTE 세 개의 파일이 열립니다.LOCAL이 나의 로컬 브랜치라고 읽었는데, BASE는 공통 조상이고 REMOTE는 병합할 브랜치입니다.
이제 제 질문에 대해 말씀드리겠습니다. 어떤 버전의 파일이 최종적으로 사용될 것인가요?리모트야?그렇다면 예를 들어 BASE 분기에 있는 내용과 상관없이 원하는 대로 편집할 수 있습니까?
가데에있것입니다는운것.BASE
.
실은.BASE
조상이 입니다.>>>>
그리고.<<<<
.
Mold 편집 창의 맨 위에 파일 이름을 볼 수 있습니다.
편할수다니있을 할 수 .BASE
commands.meld를 하지 않고 .
또한 멜드를 제거하고 좋아하는 텍스트 편집기로 파일을 편집할 수도 있습니다.
- 사이의
<<<< HEAD
그리고.=====
마커는 병합 전 로컬 파일 중 하나입니다. - 사이의
====
그리고.>>>> <branch name>
원격 파일 중 하나입니다.
Meld에는 4번째 매개 변수를 전달하여 활성화된 숨겨진 3방향 병합 기능이 있습니다.
meld $LOCAL $BASE $REMOTE $MERGED
오른쪽 및 왼쪽 창은 읽기 전용 모드로 열리므로 실수로 잘못된 방향으로 병합할 수 없습니다.가운데 창에는 병합 결과가 표시됩니다.충돌의 경우 기본 버전이 표시되어 중간에 있는 원본 텍스트와 양쪽에서 충돌하는 수정 사항 등 모든 중요한 비트를 볼 수 있습니다.마지막으로, "저장" 버튼을 누르면 $Merged 파일이 작성됩니다. 정확히 git가 예상한 대로입니다.
내가 사용하는 ~/.gitconfig 파일에는 다음 설정이 포함되어 있습니다.
[merge]
tool = mymeld
conflictstyle = diff3
[mergetool "mymeld"]
cmd = meld --diff $BASE $LOCAL --diff $BASE $REMOTE --diff $LOCAL $BASE $REMOTE $MERGED
이 탭은 3개의 탭, 즉 내가 병합하려는 단순한 차이가 포함된 첫 번째 및 두 번째 탭과 함께 열리며, 기본적으로 열려 있는 세 번째 탭에는 3방향 병합 보기가 표시됩니다.
기능이 숨겨져 있는 이유는 아직 충분히 연마되지 않았기 때문입니다.지금처럼 매우 유용하지만, 멜드 작가인 카이 윌라드센은 다림질이 필요한 주름은 거의 없다고 지적했습니다.예를 들어 3방향 병합 모드를 시작할 수 있는 GUI가 없고 명령줄 구문이 약간 난해합니다.만약 당신이 파이썬을 말하고 여유가 있다면 - 당신은 무엇을 해야 할지 알고 있습니다.
편집: Meld의 새로운 버전에서는 시낙스가 약간 변경되었습니다.이것은 댓글에 있었지만, 그것은 답에 속합니다.
이제 meld 명령어는 --output 옵션을 사용하므로 위의 스니펫의 마지막 줄은 다음과 같아야 합니다.
cmd = meld --diff $BASE $LOCAL --diff $BASE $REMOTE --diff $LOCAL $BASE $REMOTE --output $MERGED
관련된 파일은 4개입니다.
$LOCAL
병합할 분기의 파일. 표시될 때 병합 프로세스에 의해 변경되지 않습니다.$REMOTE
병합할 분기의 파일로, 표시될 때 병합 프로세스에 의해 변경되지 않습니다.$BASE
$LOCAL 및 $REMOTE의 공통 조상. 즉, 두 분기가 고려된 파일을 전환하기 시작한 지점. 표시된 경우 병합 프로세스에 의해 변경되지 않습니다.$MERGED
충돌이 있는 부분적으로 병합된 파일. 병합 프로세스에 의해 처리되는 유일한 파일이며 실제로는 에 표시되지 않습니다.
그$MERGED
은 파은다포파일다니입는함이 입니다.<<<<<<
,>>>>>>
,=====
(그리고, 아마도,||||||
(충돌을 구분하는) 마커입니다.이 파일은 충돌을 해결하기 위해 수동으로 편집하는 파일입니다.
수동 충돌 편집과 시각적 충돌 편집은 서로 다른 파일에서 수행되고 서로 다른 정보를 제공합니다.
병합 도구를 사용하는 경우(가정)meld
은 다음과 같습니다.$LOCAL
,$BASE
,$REMOTE
▁the가 표시되지 $MERGED
되지만 (으)로 전달됩니다.meld
거기에 편집 결과를 적는 것.
즉에서는meld
당신은 중간에 파일을 편집하고 있습니다.$BASE
모든 변경 사항을 수동으로 선택할 수 있습니다.병합 프로세스에서 건드리지 않은 깨끗한 파일입니다.유일한 결함은 저장할 때 저장하지 않는다는 것입니다.$BASE
파일, 하지만 네 번째 숨겨진 매개 변수에서meld
은 그이바로것입니다.$MERGED
파일(보이지도 않는 파일). 그$BASE
파일이 아니므로 파일에 충돌 또는 부분적으로 성공한 병합이 없습니다.
시각적 편집에서, 당신에게 제시할 때.$BASE
의 일부)$MERGED
file) ()git
기본적으로 병합을 수행하려는 모든 시도를 무시하고(원하는 경우 $MERGED 파일에서 해당 시도를 볼 수 있음) 처음부터 완전히 병합할 수 있습니다.
및 파일을 에 기록됩니다(즉, 결은수및시병즉충동서돌에파보최않일결다동파기니일종과됩는한록에일지만지일을한론합동각적즉, ▁the▁you▁is▁(▁merging▁conflicts파기▁in▁in(that니다,▁written).$MERGED
파일).
충돌의 수동 수정은 다음 날짜에 수행됩니다.$MERGED
왜냐면git
세 개의 파일을 제공할 수 있는 수단이 없으므로 세 개의 파일에서 정보를 압축합니다.$LOCAL
,$BASE
,$REMOTE
그에.$MERGED
java.
그러나 시각적 도구는 세 개의 파일을 보여줄 수 있습니다: 그것들은 당신에게 그것들을 보여줍니다.$LOCAL
,$BASE
,$REMOTE
. 변경 사항을 선택하고 있습니다.$LOCAL
그리고.$REMOTE
파일과 당신은 그것들을 그것들로 가져올 것입니다.$BASE
파일, 완전히 재구축하고 심지어 병합의 실패한 시도를 덮어씁니다.$MERGED
java.
Cosmin의 솔루션은 작동하지만 $MERGED가 아닌 $BASE 파일이 업데이트됩니다.$Merged 파일이 업데이트됩니다.
멜드:v1.8.4
[merge]
conflictstyle = diff3
tool = mymeld
[mergetool "mymeld"]
cmd = meld --auto-merge --output $MERGED $LOCAL $BASE $REMOTE --diff $BASE $LOCAL --diff $BASE $REMOTE
Meld 1.7에서는 Tomek Bury의 솔루션이 더 이상 작동하지 않습니다.
기본 설정이 충족되지 않았습니다.
Meld >=1.7 대신 다른 두 가지 솔루션 중 하나를 제안합니다.
첫 번째 솔루션:
meld $LOCAL $BASE $REMOTE --auto-merge
두 번째 솔루션:
meld $LOCAL $MERGED $REMOTE
.gitconfig
해서 당신의 에 .gitconfig
위에서 설명한 대로 솔루션을 가져오는 파일:
[merge]
tool = meld16
[mergetool "meld17"]
# use this for Meld >=1.7
# see http://stackoverflow.com/a/22911793/859591
# second solution:
cmd = meld $LOCAL $MERGED $REMOTE
# first solution:
#cmd = meld $LOCAL $BASE $REMOTE --auto-merge
[mergetool "meld16"]
cmd = meld --diff $BASE $LOCAL --diff $BASE $REMOTE --diff $LOCAL $BASE $REMOTE --output $MERGED
[include]
# requires git v1.7.10+
path = .gitconfig.local
에 .gitconfig.local
여러 시스템에서 .gitconfig를 사용하는 경우에만 이 시스템에 대해 meld17 또는 meld16을 설정하는 파일:
# This is a host specific config file!
# Note that git 1.7.10+ is needed
# http://stackoverflow.com/a/9733277/859591
[merge]
tool = meld17
. 는 표된기파중없파.meld를 표시하고 .$LOCAL
,$REMOTE
그리고.$BASE
ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜ$MERGED
에 $BASE
을 제 이을내 안넣것에 넣는 것.~/.gitconfig
나를 위해 그것을 고쳤습니다.
[merge]
tool = mymeld
[mergetool "mymeld"]
cmd = meld "$LOCAL" "$MERGED" "$REMOTE"
Arch를 사용하고 있습니다.
$ git --version
git version 1.8.2
$ meld --version
meld 1.7.1
어떤 이유에서인지 최신 버전의 meld는 충돌을 위해 추가된 마커 라인을 표시하지 않습니다(<<<<, =======, >>>>>). 이러한 라인을 보려면 meld v 1.3.3 또는 이전 버전을 설치해야 합니다.
정답은 사드의 답변을 참고하시기 바랍니다.
Ubuntu에서 Mold 1.8.1을 사용하여
--diff에 제공된 인수의 수가 잘못되었습니다.
$Merged가 수정하기 전에 --output을 추가했습니다.
[mergetool "mymeld"]
cmd = meld --diff $BASE $LOCAL --diff $BASE $REMOTE --diff $LOCAL $BASE $REMOTE --output $MERGED
언급URL : https://stackoverflow.com/questions/11133290/which-version-of-the-git-file-will-be-finally-used-local-base-or-remote
'programing' 카테고리의 다른 글
iOS 10.0 런타임 충돌에서 NSCameraUsageDescription? (0) | 2023.07.19 |
---|---|
다른 최적화 수준이 기능적으로 다른 코드로 이어질 수 있습니까? (0) | 2023.07.19 |
루비: 루비의 라운딩 플로트 (0) | 2023.07.14 |
MongoDB 스토리지 크기 제한? (0) | 2023.07.14 |
하위 프로세스가 종료될 때까지 기다리는 방법 (0) | 2023.07.14 |