다음에 대해 외부 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.external
이제 우리 가 내부에 있는 경우 외부 diff를 호출하는 래퍼를 가리키도록 설정하거나 , X
내부에 없는 경우 기본 메커니즘을 실행하도록 설정할 수 있습니다. 아쉽게도 기본값을 실행하는 쉬운 방법을 찾을 수 없으므로 임시로 사용할 별칭을 만들어 보겠습니다. 명시된 바와 같이:git diff
X
git diff
diff.external
git
diff.external
-c
man git
-c <이름>=<값>
구성 매개변수를 명령에 전달합니다. 지정된 값은 구성 파일의 값보다 우선합니다. 예상되는 형식은 git config(점으로 구분된 하위 키)에 나열된 것과 동일합니다.
git -c foo.bar ...에서 =를 생략하고 foo.bar를 부울 참 값으로 설정할 수 있습니다(구성 파일의 [foo]bar와 마찬가지로). 같음을 포함하지만 null 값(예: 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-diff
X