git: GUI에 있을 때만 시각적 diff(meld)를 사용합니다.

git: GUI에 있을 때만 시각적 diff(meld)를 사용합니다.

다음에 사용할 외부 diff 명령을 지정할 수 있다는 것을 알고 있습니다 git diff.

[diff]
    external = 

하지만 X 없이 콘솔에 로그인하면 시각적 차이가 디스플레이를 열 수 없기 때문에 실패합니다(분명히).

GUI/X에 로그인했을 때만 시각적 비교만 사용하도록 git에 지시하려면 어떻게 해야 합니까?

답변1

이를 수행하는 몇 가지 간단한 방법이 있습니다... git "외부"에서 수행하려면 difftool 프로그램(시각적 diff를 실행하기 위해 diff 대신 difftool을 원할 것임)을 래퍼 스크립트로 설정하면 됩니다. 그래픽 환경 여부에 관계없이 적절한 프로그램을 시작합니다. 또는 "내부" git에서는 환경별 조건부 포함(includeIf)을 수행할 수 있습니다.

답변2

귀하가 요청했기 an answer drawing from credible and/or official sources때문에 이 답변에 공식 문서를 인용하겠습니다.

먼저, 세션 내에서 실행 중인지 확인하는 방법을 찾아야 합니다 X . 예를 들어 변수가 설정되어 있는지 확인하여 이를 수행할 수 있습니다 $DISPLAY . 다음에 설명되어 있습니다 man X.

표시하다

이는 유일한 필수 환경 변수입니다. X 서버를 가리켜야 합니다. 위의 "표시 이름" 섹션을 참조하세요.

DISPLAY그러나 누군가 외부에서도 가짜 값을 설정할 수 있기 때문에 좋은 생각이 아닐 수도 있습니다 X. 더 나은 방법이 제안되었습니다이 답변:

if xhost >& /dev/null ; then echo "Display exists"
else echo "Display invalid" ; fi

xhost컴퓨터에 이미 설치되어 있는 프로그램이 있어야 합니다 . 다음과 같이 설치되어 있는지 확인하세요.

$ type -a xhost
xhost is /usr/bin/xhost

이제 우리가 내부에 있으면 외부 diff를 호출하고 내부에 없으면 기본 메커니즘을 실행하는 diff.external래퍼를 가리키도록 설정할 수 있습니다 . 불행히도 기본값을 실행하는 간단한 방법을 생각해낼 수 없으므로 대신 를 사용 하여 임시로 설정할 별칭을 만들어 보겠습니다 . 다음에 설명된 대로 :Xgit diffXgit diffdiff.externalgitdiff.external-cman git

-c < 이름>=< 값>

구성 매개변수를 명령에 전달합니다. 제공된 값은 구성 파일의 값을 대체합니다. git config(점으로 구분된 하위 키)에 나열된 것과 동일한 형식으로 예상됩니다.

git -c foo.bar ...에서 =를 생략하는 것이 허용되며 foo.bar를 부울 참 값으로 설정합니다(구성 파일의 [foo]bar와 마찬가지로). 같음을 포함하지만 빈 값(예: git -c foo.bar= ...)을 사용하면 foo.bar가 빈 문자열로 설정됩니다.

그것은 다음과 같습니다:

$ git -c diff.external=diff-wrapper.sh ...

요약하자면:

  • 라는 스크립트를 만들고 원하는 것으로 ~/git-wrapper.sh바꾸십시오 .<YOUR_DIFF_WRAPPER>

    #!/usr/bin/env sh
    
    if xhost >/dev/null 2>&1
    then
        git -c diff.external=<YOUR_DIFF_WRAPPER>  "$@"
    else
        git "$@"
    fi
    
  • 실행 가능 비트를 설정합니다.

     $ chmod +x ~/git-wrapper.sh
    
  • 예를 들어 쉘 시작 파일에 별칭을 설정하고 ~/.bashrc쉘을 다시 로드하십시오.

     alias git=~/git-wrapper.sh
    
  • 일반적으로 사용 git:

     $ git diff
    

    <YOUR_DIFF_WRAPPER>내부에 있으면 사용 하고 외부에서는 X기본값을 사용합니다 .git-diffX

관련 정보