Gitdiff 도구 및 병합 도구로 Meld 설정 및 사용
이 질의응답의 많은 정보는 StackOverflow에서 사용할 수 있지만, 이 정보는 많은 페이지와 잘못되었거나 오해의 소지가 있는 다른 답변에 걸쳐 있습니다.제가 알고 싶은 모든 것을 정리하는 데 시간이 좀 걸렸습니다.
Gitdiff 툴과 Merge 툴로 사용할 수 있는 다양한 프로그램이 있으며, 어느 것이 최선인지에 대한 합의는 확실히 없습니다(의견, 요구사항 및 OS는 분명히 다를 것입니다).
Meld는 인기 있는 자유, 오픈 소스 및 크로스 플랫폼(UNIX/Linux, OSX, Windows) 선택입니다. StackOverflow 질문인 "Git에 가장 적합한 시각적 병합 도구는 무엇입니까?"에서 볼 수 있듯이, Meld를 제안하는 답변은 다른 도구보다 3배 이상의 표를 얻었습니다.
아래 제 답변에는 다음 2가지 질문이 답변될 예정입니다.
- 어떻게 멜드를 내 기트디프 도구로 설정하고 사용합니까?
- Meld를 내 선물 도구로 어떻게 설정하고 사용합니까?
참고: diff 툴과 merge 툴 모두에서 동일한 프로그램을 사용할 필요는 없으며, 두 프로그램 모두에 대해 다른 프로그램을 설정할 수 있습니다.
어떻게 멜드를 내 기트디프 도구로 설정하고 사용합니까?
git diff 도구는 단말기에 diff 출력을 표시하는 대신 GUI diff 프로그램(즉, Meld)을 사용하여 diff를 표시합니다.
할 수 에도 GUI를 사용할 수 .-t <tool> / --tool=<tool>
▁it▁in다▁it니▁▁sense▁more로 구성하는 것이 더 가 있습니다..gitconfig
파일. [참고: 및 아래에 있는 이스케이프 따옴표 및 윈도우즈 경로에 대한 섹션을 참조하십시오.]
# 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
적절하게 구성된 경우 Meld 창이 열리고 GUI 인터페이스를 사용하여 diff가 표시됩니다.
Meld GUI 창의 순서는 다음 순서로 제어할 수 있습니다.$LOCAL
그리고.$REMOTE
cmd
즉, 왼쪽 창에 표시되는 파일과 오른쪽 창에 표시되는 파일을 말합니다.반대로 원하는 경우 다음과 같이 교체하면 됩니다.
cmd = meld "$REMOTE" "$LOCAL"
마침내prompt = false
하지 않도록 . line을 합니다. 기본적으로 Git는 프롬프트를 표시합니다.
Meld를 내 선물 도구로 어떻게 설정하고 사용합니까?
gitmerge 도구를 사용하면 GUI 병합 프로그램(예: Meld)을 사용하여 병합 중에 발생한 병합 충돌을 해결할 수 있습니다.
처럼 diff 툴을 사용하여 할 수 .-t <tool> / --tool=<tool>
하지만, 이전과 마찬가지로, 그것을 구성하는 것이 더 말이 됩니다..gitconfig
파일. [참고: 및 아래에 있는 이스케이프 따옴표 및 윈도우즈 경로에 대한 섹션을 참조하십시오.]
# 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.
시점에서 이시점서에▁at.file_name
정보를 "" "라는 입니다." ("라는 뜻).>>>>>>>
그리고.<<<<<<<
항목을 입력합니다.
병합 도구를 사용하여 병합 충돌을 해결할 수 있습니다.다음을 통해 매우 쉽게 시작할 수 있습니다.
git mergetool
적절하게 구성된 경우 Meld 창이 열리고 3개의 파일이 표시됩니다.각 파일은 GUI 인터페이스의 별도 창에 포함됩니다.
.gitconfig
이 위의항목, 2행개제라로 됩니다.[mergetool "meld"]
cmd
line.가 인라를 할 수 합니다. 사실 고급 사용자들이 구성할 수 있는 모든 종류의 방법이 있습니다.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개의 과 함께 멜드 3개의 합니다.$LOCAL
그리고.$REMOTE
과 왼과오른창그둘리중하나고에서쪽쪽▁in▁the▁and하나▁either중.$MERGED
또는$BASE
가운데 창에
두 경우 모두 가운데 창은 병합 충돌을 해결하기 위해 편집해야 하는 파일입니다.당신이 을 시작하는을 선호하는지에 있습니다.$MERGED
부분적으로 병합된 정보가 있는 파일 또는 " Conflict "이 $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는 해당 파일이 모두 완료될 때까지 각 파일에 대해 차례로 새 Meld 창을 엽니다.모든 항목이 동시에 열리지는 않지만, 하나의 충돌 편집을 완료하고 Meld를 닫으면 Git가 다음 항목을 열고 모든 병합 충돌이 해결될 때까지 계속됩니다.
의 사용을 테스트하기 위해 더미 프로젝트를 만드는 것이 현명할 것입니다.git mergetool
실시간 프로젝트에 사용하기 전에.OS에서 따옴표를 이스케이프해야 하는 경우 테스트에 공백이 포함된 파일 이름을 사용해야 합니다.cmd
선, 아래를 참조하십시오.
따옴표 문자를 이스케이트
를 따옴표로 할 수도 .cmd
명령줄을 공백이 . 그리고 만약 "component "이 공백이 포함된 파일 이름이라면.cmd
줄은 공백이 포함된 파일 이름에서 작동하지 않습니다. 그런 다음 따옴표를 이스케이프하십시오.
cmd = meld \"$LOCAL\" \"$REMOTE\"
경우에 따라 더 복잡한 견적 이스케이프가 필요할 수 있습니다.아래의 Windows 경로 링크 중 첫 번째 링크에는 각 따옴표를 세 번 이스케이프하는 예제가 포함되어 있습니다.지루하지만 때로는 필요합니다. 예를 예로 들 수 있습니다.
cmd = meld \\\"$LOCAL\\\" \\\"$REMOTE\\\"
윈도우즈 경로
Windows에 할 수 .cmd
인라에 대한 해야 할 수도 . 그들은 아마도 전체 경로를 사용해야 할 것입니다.meldc
명령행에서 Windows로 호출되도록 설계되었거나 래퍼가 필요하거나 사용하기를 원할 수 있습니다.올바른 Meld 설정에 관한 아래 링크된 StackOverflow 페이지를 읽어야 합니다.cmd
Windows용 줄입니다.에 다양한 Linux를 할 수 .cmd
및 이 또는 행 주 대 및 에 제 한 추 정 멜 에 르 도 대 전 는 한 경 추 사 것 없 니 다 습 것 외 는 에 는 권 하 을 장 할 용 를 예 가 와 로▁with▁to▁▁examples▁using▁and▁other▁have▁subject▁my▁me▁the▁no▁to행▁inform▁of▁path▁than▁furtheration▁on▁recommend니다습없▁addition▁the▁ald▁full외는것에및는하제▁or주권meldc
를 멜드 프로그램 폴더에 합니다.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]*$
다른 답변이 맞긴 하지만, 다음은 Meld를 시각적 디프 도구로 구성하는 가장 빠른 방법입니다.복사/붙여넣기:
git config --global diff.tool meld
git config --global difftool.prompt false
지금실을 실행합니다.git difftool
디렉터리에 있으면 각 다른 파일에 대해 멜드가 실행됩니다.
참고 사항:Meld는 CSV 파일을 비교하는 속도가 놀라울 정도로 느리며 Compare It!(2010년 마지막 업데이트)이라는 Windows 도구보다 빠른 Linux diff 도구는 없습니다.
Windows의 경우.Git Bash에서 다음 명령을 실행합니다.
git config --global diff.tool meld
git config --global difftool.meld.path "C:\Program Files (x86)\Meld\Meld.exe"
git config --global difftool.prompt false
git config --global merge.tool meld
git config --global mergetool.meld.path "C:\Program Files (x86)\Meld\Meld.exe"
git config --global mergetool.prompt false
(파일 경로가 다른 경우 Meld.exe의 파일 경로를 업데이트합니다.)
Linux의 경우.Git Bash에서 다음 명령을 실행합니다.
git config --global diff.tool meld
git config --global difftool.meld.path "/usr/bin/meld"
git config --global difftool.prompt false
git config --global merge.tool meld
git config --global mergetool.meld.path "/usr/bin/meld"
git config --global mergetool.prompt false
다음 명령을 사용하여 Meld의 경로를 확인할 수 있습니다.
which meld
다음과 같이 별도의 명령어로 meld를 설정하는 것을 선호합니다.
git config --global alias.meld '!git difftool -t meld --dir-diff'
따라서 https://github.com/wmanley/git-meld 스크립트와 유사합니다. git-meld.pl
그러면 그냥 도망칠 수 있습니다.
git meld
Windows 10의 경우 이를 .gitconfig에 넣어야 했습니다.
[merge]
tool = meld
[mergetool "meld"]
cmd = 'C:/Program Files (x86)/Meld/Meld.exe' $LOCAL $BASE $REMOTE --output=$MERGED
[mergetool]
prompt = false
당신이 알아야 할 다른 모든 것들은 위의 매트에 의해 쓰여진 이 멋진 대답에 쓰여져 있습니다.
PS: 어떤 이유에서인지 이것은 Meld 3.18.x에서만 작동했지만 일부 Meld 3.20.x 버전에서는 오류가 발생합니다.Tomas Molina가 아래 코멘트에서 언급한 대로 Meld 3.20.4와 함께 작동해야 합니다.
저는 이 간단한 설정을 멜드로 따릅니다.Meld는 무료이며 오픈 소스 diff 도구입니다.코드 변경 사항에 대한 파일 및 디렉터리의 멋진 비교를 볼 수 있습니다.
- yum/apt를 사용하여 Linux에 meld를 설치합니다.
- ~/.gitconfig 파일에 다음 행 추가
[diff] tool = meld
- 코드 repo로 이동하고 다음 명령을 입력하여 마지막으로 커밋된 변경사항과 현재 작업 디렉토리(준비되지 않은 커밋된 변경사항) 간의 차이를 확인합니다.
git diff tool --get-diff./
- 마지막 커밋된 코드와 준비된 코드 간의 차이를 보려면 다음 명령을 사용합니다.
git diff tool --gets --gets --gets-diff./
diff 도구의 경로 구문이 다른 플랫폼과 다르기 때문에 주로 Windows를 사용하는 개발자를 대상으로 한 답변입니다.
Gitmerge 도구로 Kdiff3를 사용하지만 Gitdiff 도구를 Meld로 설정하기 위해 먼저 Meldmerge.org 에서 최신 버전의 Meld를 설치한 다음 다음을 사용하여 글로벌 .gitconfig에 추가했습니다.
git config --global -e
기본 Vim을 코어 편집기로 사용하는 대신 Sublime Text 3을 사용하려면 .gitconfig 파일에 추가할 수 있습니다.
[core]
editor = 'c:/Program Files/Sublime Text 3/sublime_text.exe'
그런 다음 inn Meld를 diff 툴로 추가합니다.
[diff]
tool = meld
guitool = meld
[difftool "meld"]
cmd = \"C:/Program Files (x86)/Meld/Meld.exe\" \"$LOCAL\" \"$REMOTE\" --label \"DIFF
(ORIGINAL MY)\"
prompt = false
path = C:\\Program Files (x86)\\Meld\\Meld.exe
위의 cmd에서 선행 슬래시를 확인하십시오. 윈도우즈에서는 이를 수행해야 합니다.
--dir-diff 옵션을 사용하여 현재 Gitdiff를 표시하도록 별칭을 설정할 수도 있습니다.이렇게 하면 Meld 내부의 변경된 파일이 나열되며, 이는 여러 파일을 변경했을 때 유용합니다(매우 일반적인 시나리오).
별칭은 .gitconfig 파일의 [alias] 섹션 아래에 있는 다음과 같습니다.
showchanges = difftool --dir-diff
코드에 대한 변경 내용을 표시하려면 다음 명령을 입력합니다.
git showchanges
다음 이미지는 이 --dir-diff 옵션이 변경된 파일 목록(예)을 표시하는 방법을 보여줍니다.
그런 다음 각 파일을 클릭하여 Meld 내부의 변경 사항을 표시할 수 있습니다.
$Merged의 다른 섹션과 당신의 머릿속의 차이를 계산하고 그것을 적용하는 것은 복잡할 수 있습니다.내 설정에서 Meld는 다음을 사용하여 이러한 차이를 시각적으로 보여줍니다.
[merge]
tool = mymeld
conflictstyle = diff3
[mergetool "mymeld"]
cmd = meld --diff $BASE $REMOTE --diff $REMOTE $LOCAL --diff $LOCAL --output $MERGED
모양은 이상하지만 세 개의 탭을 사용하여 매우 편리한 워크플로우를 제공합니다.
탭 1에는 병합 충돌을 해결하기 위해 탭 2에서 수행해야 하는 변경 사항이 왼쪽에서 오른쪽으로 표시됩니다.
탭 2의 오른쪽에서 "해야 할 변경"을 적용하고 전체 파일 내용을 클립보드에 복사합니다(ctrl-a 및 ctrl-c 사용).
탭 3에서 오른쪽을 클립보드 내용으로 바꿉니다.모든 것이 올바르면 이제 왼쪽에서 오른쪽으로 탭 1에 표시된 것과 동일한 변경 사항이 표시됩니다(단, 상황에 따라 다름).이 탭에서 변경한 내용을 저장합니다.
주의:
- 탭 1에서 아무것도 편집하지 않음
- 탭 2에 아무것도 저장하지 마십시오. 탭 3에 성가신 팝업이 표시됩니다.
@mattest의 훌륭한 답변에는 이것을 제외하고는 별로 추가할 것이 없습니다.WSL2(Windows Subsystem for Linux)를 사용하는 사용자의 경우 Linux에서 개발할 수 있지만 Windows용 Meld를 사용할 수 있습니다.
cmd = "/mnt/c/Program Files (x86)/Meld/Meld.exe" "$LOCAL" "$REMOTE"
한 가지 주의할 점은 제 모든 코드가 WLS2 가상 드라이브가 아닌 Windows 드라이브에 있다는 점입니다.
언급URL : https://stackoverflow.com/questions/34119866/setting-up-and-using-meld-as-your-git-difftool-and-mergetool
'programing' 카테고리의 다른 글
Angular 2에서 다시 로드하지 않고 경로 매개변수 변경 (0) | 2023.05.29 |
---|---|
Git: "당신이 누구인지 말해주세요" 오류 (0) | 2023.05.29 |
VB.NET에서 A 클래스를 정적으로 표시 (0) | 2023.05.29 |
특정 포트를 확인하기 위한 명령줄 (0) | 2023.05.29 |
컴파일러/J에 제공할 수 있는 최적화 힌트는 무엇입니까?IT? (0) | 2023.05.29 |