Meld를 git difftool로 어떻게 설정하고 사용합니까?
git difftool 은 터미널에 diff 출력을 표시하는 대신 GUI diff 프로그램 (예 : Meld)을 사용하여 diff를 표시합니다.
명령 행에서 GUI 프로그램을 설정할 수 있지만 파일 -t <tool> / --tool=<tool>
에서 구성하는 것이 더 합리적 .gitconfig
입니다. [참고 : 하단의 따옴표와 Windows 경로 탈출에 대한 섹션을 참조하십시오.]
# Add the following to your .gitconfig file.
[diff]
tool = meld
[difftool]
prompt = false
[difftool "meld"]
cmd = meld "$LOCAL" "$REMOTE"
[참고 :이 설정은 git diff
평소와 같이 계속 작동하는 동작을 변경하지 않습니다 .]
사용 git difftool
하는 것과 똑같은 방식으로 사용 git diff
합니다. 예 :
git difftool <COMMIT_HASH> file_name
git difftool <BRANCH_NAME> file_name
git difftool <COMMIT_HASH_1> <COMMIT_HASH_2> file_name
올바르게 구성된 경우 GUI 인터페이스를 사용하여 diff를 표시하는 Meld 창이 열립니다.
융합 GUI 윈도우 창의 순서는 순서에 의해 제어 될 수 $LOCAL
와 $REMOTE
의 cmd
오른쪽 창에서 왼쪽 창 및있는 표시되는 파일 말을하는 것입니다. 다른 방법으로 원한다면 다음과 같이 바꾸십시오.
cmd = meld "$REMOTE" "$LOCAL"
마지막으로 prompt = false
라인은 단순히 git이 Meld를 시작할 것인지 묻는 메시지를 표시하지 않습니다. 기본적으로 git은 프롬프트를 발행합니다.
Meld를 git mergetool로 어떻게 설정하고 사용합니까?
git mergetool 을 사용하면 GUI 병합 프로그램 (예 : Meld)을 사용하여 병합 중에 발생한 병합 충돌을 해결할 수 있습니다.
difftool과 마찬가지로 GUI를 사용하여 명령 행에서 GUI 프로그램을 설정할 수 -t <tool> / --tool=<tool>
있지만 이전과 마찬가지로 .gitconfig
파일 에서 구성하는 것이 더 합리적 입니다. [참고 : 하단의 따옴표 및 Windows 경로 탈출에 대한 섹션을 참조하십시오.]
# Add the following to your .gitconfig file.
[merge]
tool = meld
[mergetool "meld"]
# Choose one of these 2 lines (not both!) explained below.
cmd = meld "$LOCAL" "$MERGED" "$REMOTE" --output "$MERGED"
cmd = meld "$LOCAL" "$BASE" "$REMOTE" --output "$MERGED"
git mergetool
실제 병합을 수행하는 데 사용하지 않습니다 . 사용하기 전에 git mergetool
git과 일반적인 방법으로 병합을 수행하십시오. 예 :
git checkout master
git merge branch_name
병합 충돌이 있으면 git은 다음과 같이 표시됩니다.
$ git merge branch_name
Auto-merging file_name
CONFLICT (content): Merge conflict in file_name
Automatic merge failed; fix conflicts and then commit the result.
이 시점 file_name
에서 부분적으로 병합 된 파일과 병합 충돌 정보 (모든 >>>>>>>
및 <<<<<<<
항목 이 포함 된 파일)가 포함됩니다 .
Mergetool을 사용하여 병합 충돌을 해결할 수 있습니다. 다음과 같이 쉽게 시작할 수 있습니다.
git mergetool
올바르게 구성된 경우 3 개의 파일을 표시하는 Meld 창이 열립니다. 각 파일은 GUI 인터페이스의 별도 창에 포함됩니다.
위의 예제 .gitconfig
항목에서 두 줄이 줄로 제안됩니다 [mergetool "meld"]
cmd
. 실제로 고급 사용자가 cmd
회선 을 구성 할 수있는 모든 방법이 있지만 이는이 답변의 범위를 벗어납니다.
이 답변에는 두 가지 대안 cmd
이 있는데 그 중 대부분의 사용자를 수용 할 수 있으며 도구를 한 단계 더 복잡하게 만들고자하는 고급 사용자에게는 좋은 출발점이 될 것입니다.
먼저 매개 변수의 의미는 다음과 같습니다.
$LOCAL
현재 분기에있는 파일입니다 (예 : 마스터).
$REMOTE
병합 할 분기의 파일입니다 (예 : branch_name).
$MERGED
병합 충돌 정보가 포함 된 부분적으로 병합 된 파일입니다.
$BASE
는의 공유 커밋 조상 $LOCAL
이며 $REMOTE
, 포함하는 브랜치를 $REMOTE
처음 만들 때와 같이 파일을 말합니다 .
다음 중 하나를 사용하는 것이 좋습니다.
[mergetool "meld"]
cmd = meld "$LOCAL" "$MERGED" "$REMOTE" --output "$MERGED"
또는:
[mergetool "meld"]
cmd = meld "$LOCAL" "$BASE" "$REMOTE" --output "$MERGED"
# See 'Note On Output File' which explains --output "$MERGED".
선택 여부는 ~ 사이 $MERGED
또는 $BASE
사이 $LOCAL
에 $REMOTE
있습니다.
어느 쪽이든 융합은 3 개 창 표시 $LOCAL
하고 $REMOTE
왼쪽과 오른쪽 창 및 하나 $MERGED
또는 $BASE
가운데 창에 있습니다.
두 경우 모두 가운데 창은 병합 충돌을 해결하기 위해 편집해야하는 파일입니다. 차이점은 원하는 시작 편집 위치에 있습니다. $MERGED
병합 충돌 정보 또는 부분적으로 병합 된 파일이 들어있는 파일 $BASE
공유가의 조상 커밋에 $LOCAL
와 $REMOTE
. [두 cmd
줄 모두 유용 할 수 있기 때문에 둘 다 내 .gitconfig
파일 에 보관합니다 . 대부분의 경우 $MERGED
회선을 사용하고 회선을 $BASE
주석 처리하지만 $BASE
대신 회선 을 사용하려면 주석 처리를 교체 할 수 있습니다 .]
출력 파일에 대한 참고 사항 :하지 걱정 --output "$MERGED"
에 사용 cmd
여부에 관계없이의 $MERGED
또는 $BASE
에서 이전에 사용 된 cmd
라인. 이 --output
옵션은 단순히 Meld에게 git이 충돌 해결 파일을 저장하기를 원하는 파일 이름을 알려줍니다. Meld는 사용 $MERGED
또는 $BASE
시작 편집 점에 상관없이 해당 파일에 충돌 편집 내용을 저장합니다 .
병합 충돌을 해결하기 위해 가운데 창을 편집 한 후 파일을 저장하고 Meld 창을 닫으십시오. Git은 자동으로 업데이트를 수행하고 현재 브랜치 (예 : 마스터)의 파일에 중간 창에있는 모든 것이 포함됩니다.
git은 .orig
원래 파일 이름 에 추가하여 부분적으로 병합 된 파일을 병합 충돌 정보로 백업합니다 . 예 file_name.orig
. 병합에 만족하는지 확인하고 원하는 테스트를 실행 한 후 .orig
파일을 삭제할 수 있습니다.
이제 변경 사항을 커밋하기 위해 커밋을 수행 할 수 있습니다.
Meld에서 병합 충돌을 편집하는 동안 Meld 사용을 포기하려면 중간 분할 창에 병합 분석 파일을 저장하지 않고 Meld를 종료하십시오. git은 메시지로 응답 file_name seems unchanged
한 다음 묻습니다 Was the merge successful? [y/n]
. 응답 n
하면 병합 충돌 해결이 중단되고 파일은 변경되지 않습니다. 언제라도 Meld에 파일을 저장했다면 git으로부터 경고와 프롬프트를받지 못할 것입니다. [물론 파일을 삭제하고 .orig
git이 만든 백업 파일로 바꿀 수 있습니다.]
병합 충돌이있는 파일이 두 개 이상인 경우 git은 모두 완료 될 때까지 하나씩 새 Meld 창을 엽니 다. 모두 동시에 열리지는 않지만 충돌 편집을 마치고 Meld를 닫으면 git은 다음 충돌을 열고 모든 병합 충돌이 해결 될 때까지 계속 진행합니다.
실제 프로젝트 git mergetool
에서 사용하기 전에 더미 프로젝트를 작성하여 사용을 테스트하는 것이 합리적 입니다. OS에서 줄 에서 따옴표를 이스케이프 처리해야하는 경우 테스트에서 공백이 포함 된 파일 이름을 사용해야합니다 ( 아래 참조).cmd
이스케이프 따옴표
일부 운영 체제는 따옴표를 cmd
이스케이프 해야 할 수도 있습니다 . 경험이 부족한 사용자는 공백이 포함 된 파일 이름으로 config 명령 줄을 테스트해야하며 공백이 포함 된 파일 이름으로 cmd
줄이 작동하지 않으면 따옴표를 이스케이프 처리하십시오. 예 :
cmd = meld \"$LOCAL\" \"$REMOTE\"
경우에 따라 더 복잡한 견적 이스케이프가 필요할 수 있습니다. 아래의 Windows 경로 링크 중 첫 번째에는 각 따옴표를 세 번 이스케이프하는 예가 포함되어 있습니다. 그것은 구멍이지만 때로는 필요합니다. 예 :
cmd = meld \\\"$LOCAL\\\" \\\"$REMOTE\\\"
Windows 경로
Windows 사용자는 Meld cmd
라인에 추가 구성을 추가해야합니다 . meldc
명령 줄에서 Windows로 호출되도록 설계된 전체 경로를 사용해야 할 수도 있고 래퍼를 사용해야하거나 사용할 수도 있습니다. 아래에 링크 된 StackOverflow 페이지를 읽어야합니다 cmd
. 저는 Linux 사용자이기 때문에 다양한 Windows cmd
라인 을 테스트 할 수 없으며 Meld에 대한 전체 경로를 meldc
추가하거나 Meld 프로그램 폴더를 추가하는 예제를 사용하는 것 외에는 주제에 대한 추가 정보가 없습니다 path
.
Meld로 후행 공백 무시
Meld에는 GUI에서 구성 할 수있는 여러 가지 기본 설정이 있습니다.
환경 설정 Text Filters
탭에는 diff를 수행 할 때 주석과 같은 것을 무시하는 몇 가지 유용한 필터가 있습니다. 가 있지만 필터는 무시할 수 없습니다 All whitespace
및 Leading whitespace
무시할 수없는 존재, Trailing whitespace
(이것은 융합 메일 링리스트에 추가로 제안하지만 내 버전에서 사용할 수 없습니다 된) 필터를.
후행 공백을 무시하는 것은 특히 협업 할 때 매우 유용하며, Meld 환경 설정 Text Filters
탭 에서 간단한 정규식으로 쉽게 수동으로 추가 할 수 있습니다 .
# Use either of these regexes depending on how comprehensive you want it to be.
[ \t]*$
[ \t\r\f\v]*$
이것이 모두에게 도움이되기를 바랍니다.