'git diff'가 호출기를 사용하지 못하게하려면 어떻게합니까?


640

기본적으로 호출기 git diff를 사용 하는 명령 줄 스위치 와 다른 명령을 사용하는 다른 명령이 less있습니까?

나는 그것을 고양이에게 파이프 할 수는 있지만 모든 구문 강조 표시를 제거한다는 것을 알고 있습니다.

나는 글로벌 .gitconfig의 호출기를 cat GITPAGER=cat(또는 이와 비슷한 것)으로 설정할 수 있다는 것을 알고있다 . 그러나 나는 때때로 (diff의 크기에 따라) 호출기를 갖기를 원합니다.

그러나 명령 행 스위치가 있으면 선호합니다. 매뉴얼 페이지를 통해 하나를 찾을 수 없습니다.


16
참고 : core.pager 'less -+F -+X'이러한 옵션을 제거하는 가장 최근의 방법입니다. 아래 내 답변을 참조하십시오 .
VonC

"less-+ F-+ X"는 긴 로그에서 성가신 "... skipping ..."마커를 제거하는 마법의 설정입니다. 그 옵션에 대해 대단히 감사합니다, 당신은 내 하루를 구했습니다!
기욤 PERROT


lessgit 사용에 대한 관련 질문을 참조하십시오 ( less버전에 따라 다름 ) : unix.stackexchange.com/questions/107315/…
Pierz

답변:


690

--no-pagerGit에게 호출기를 사용하지 말라고 지시합니다. 옵션 -F을 전달하면 less출력이 단일 화면에 맞는 경우 페이징하지 않도록 지시합니다.

용법:

git --no-pager diff

주석의 다른 옵션은 다음과 같습니다.

# Set an evaporating environment variable to use 'cat' for your pager
GIT_PAGER=cat git diff

# Tells 'less' not to paginate if less than a page
export LESS="-F -X $LESS"
# ...then Git as usual
git diff

3
고맙게도 .bashrc에서 git --no-pager를 gitc로 별칭을 지정할 수 있습니다.
Lakshman Prasad

42
또는 GIT_PAGER 또는 PAGER 환경 변수 또는 core.pagergit config 변수를 사용하십시오.
Jakub Narębski

74
당신이 --add-호출기를 추가해야 함을 명심 하기 전에 "자식 --no-호출기 로그 --format = ㅋ"에서와 같이 명령
아나 베츠에게

6
또한, 만약 터미널 클리어 화면 덜 종료 후에는 추가 할 수 있습니다 -E당신을 less만들기 위해 옵션을 -F사용할.
mgalgs

9
--no-pager별명 에 포함 시키려면 명령 앞에 접두사를 붙여야하며 오류를 피하려면 다음과 같이 별명을 작성해야합니다 git config alias.foo '!git --no-pager foo'. 다소 혼란 스럽다. 에일리어싱 '--no-pager foo'은 작동하지 않습니다.
Jim Stewart

272

이전 답변에서 언급했듯이 내용이 한 화면 미만인 경우 -F옵션을 전달하면 옵션 less이 종료됩니다. 그러나 이렇게하면 화면이 재설정되고 내용이 표시되지 않습니다.

-X옵션은 그 행동을 멀리한다. 따라서 콘텐츠 양에 따라 조건부 페이징을 사용하려면 다음을 사용하십시오.

git config --global --replace-all core.pager "less -F -X"

46
참고 : git config --global --add core.pager "less -F -X"git 을 사용해야 1.8.0.2했지만 위의 기능은 작동하지 않았습니다.
Dogbert

7
큰! 또한 그렇게뿐만 아니라 자식으로 행동하지만, 모든 프로그램 같은 것을 추가로 만들려면 export LESS="-RFX"당신에 .bashrc.zshrc
defhlt

감사합니다; 나는 git이 출력에서 ​​첫 번째 줄을 자르는 옵션에 시달리고 한 줄 아래로 내려간 다음 한 줄 위로 올라 오면 올바른 첫 번째 줄이 맨 위를 차지하게됩니다. 올바른 출력에서 ​​세 번째 줄이 이어집니다. 어쨌든이 옵션을 지정하면 문제가 해결되었습니다. 기괴한.
팀 하퍼

(이하 그린 우드 소프트웨어에 의해 만들어 사용한다) 망할 놈의 Windows를 사용하는 경우, 당신이 필요로하는 매개 변수는 -E (소스 greenwoodsoftware.com/less/faq.html#dashe )
개빈 구

1
예, 내 대답에서 설명했듯이 특히 호출기가 시작 및 종료되기 전후에 화면을 재설정하지 않는 것이 좋습니다. 특히 모든 화면이 하나의 화면에 맞으면 정확하게 -X작동합니다. 마음에 들지 않으면 사용하지 마십시오. 이 방법으로 명령을 다시 입력하지 않고도 내 기록에서 이전 git 명령의 결과를보고 git SHA와 같은 것을 참조 할 수 있기 때문에 좋아합니다. 각자 자신의 것.
ishaaq

169

사용하다

git config --global core.pager cat

모든 리포지토리의 모든 명령에 대한 호출기를 제거합니다.

pager.<cmd>대신 설정 을 사용하여 단일 Git 하위 명령에 대한 페이징을 비활성화 core.pager할 수 있으며 Git 리포지토리마다 설정을 변경할 수 있습니다 (생략 --global).

자세한 내용을 man git-config보고 검색 pager.<cmd>하십시오.


문제는 pager를 모두 비활성화하는 방법이 아니라 grep 하위 명령에 대해 페이저를 비활성화하는 방법이었습니다. mtahmed의 답변은 완벽합니다.
TilmanBaumann

9
이것은 확장 설명이 요구 한 것일지도 모르지만 이것이 내가 찾던 것이었고 그것은 Google 최고의 결과 중 하나였습니다. @geekQ
Brian F Leighty

70

설명서의 최근 변경 사항에 대한 기본 옵션을 제거하는 다른 방법 less( "기본 옵션"은 FRSX)이 언급되어 있습니다.

이 질문에 대해서는 다음과 같습니다 (git 1.8 이상)

git config --global --replace-all core.pager 'less -+F -+X'

예를 들어 Dirk Bester 는 다음 과 같이 의견을 제안 합니다 .

export LESS="$LESS -FRXK" 

Ctrl-C에서 종료 와 컬러 diff를 얻을 수 있도록 less.

윌슨 F논평그의 질문 에서 다음 과 같이 언급 했다.

가로 스크롤을 덜 지원하므로 줄이 잘릴 때 한 번에 한 화면 종료가 비활성화되어 사용자가 텍스트를 왼쪽으로 스크롤하여 잘린 부분을 볼 수 있습니다.


이러한 수정 사항은 git 1.8.x에 이미 표시되어 있습니다. " 항상 호출기를 사용하십시오git diff "(설명 참조). 그러나 설명서는 방금 수정 되었습니다 (git 1.8.5 또는 1.9, Q4 2013 ).

Git 명령에 사용되는 텍스트 뷰어 (예 : 'less')
이 값은 쉘에 의해 해석됩니다.

선호 순서는 다음과 같습니다.

  • $GIT_PAGER환경 변수
  • 그런 다음 core.pager구성
  • 다음 $PAGER,
  • 그리고 컴파일 타임에 선택된 기본값 (보통 'less').

LESS환경 변수를 설정하고, 그것을 힘내를 설정 FRSX
(만약 LESS환경 변수 설정, 힘내 전혀 변경하지 않음).

에 대한 Git의 기본 설정을 선택적으로 무시 하려면 예를 들어로 LESS설정할 수 있습니다core.pagerless -+S .
이것은 Git에 의해 쉘로 전달되며 최종 명령은로 변환됩니다 LESS=FRSX less -+S. 환경은 명령에 S긴 줄을 자르 도록 옵션 을 설정하도록 지시 하지만 명령 줄은 긴 줄을 접도록 기본값으로 재설정합니다.


새로운 문서 문구 뒤에있는 커밋 97d01f2a 를 참조하십시오 .

구성 : core.pager문서 재 작성

텍스트는 언급 core.pagerGIT_PAGER우선 순위의 전체적인 그림을 제공하지 않고. git var(1) 문서 에서 더 나은 설명을 차용하십시오 .

시스템 전체, 전역 및 저장소 별 구성 파일을 허용하는 메커니즘의 사용은이 특정 변수로 제한되지 않습니다. 단락을 명확히하기 위해 그것을 제거하십시오.

환경 변수 LESS가 Git의 기본값으로 설정되는 방법과 선택적으로 사용자 정의하는 방법을 설명하는 부분을 다시 작성하십시오 .


참고 : 커밋 b327583 ( 2014 년 4 월 Matthieu Moymoy , git 2.0.x / 2.1, Q3 2014)은 기본적으로 S를 제거합니다.

호출기 : 기본적으로 $ LESS에서 'S'제거

기본적으로, 힘내 설정하는 데 사용 $LESS-FRSX경우 $LESS사용자가 설정되지 않았습니다. 플래그는 실제로 힘내에 대한 이해 ( 그리고 때로는 이하로 출력 망할 놈의 파이프가 짧고, 때문에 망할 놈의 파이프 출력을 색깔 때문에). 반면에 플래그 (긴 줄 자르기)는 Git과 관련이 없으며 사용자 선호도의 문제입니다. 힘내 사용자가 기본값 을 변경하도록 결정해서는 안됩니다 .
FRXFXR
SLESS

보다 구체적으로,이 S플래그는 다음과 같은 패치로 인해 호출기 내에서 신뢰할 수없는 코드를 검토하는 사용자에게 해를줍니다.

-old code;
+new good code; [... lots of tabs ...] malicious code;

다음과 동일하게 나타납니다.

-old code;
+new good code;

이전 동작을 선호하는 사용자는 여전히 $ LESS 환경 변수를 -FRSX명시 적으로 설정하거나 core.pager를 ' less -S'로 설정할 수 있습니다.

설명서는 다음과 같습니다.

환경은 S옵션을 설정하지 않지만 명령 행은 긴 행을 자르도록 지시합니다.
마찬가지로, 설정 core.pagerless -+F비활성화합니다 F옵션은 "비활성화 명령 줄에서 환경에 의해 지정 quit if one screen의"동작을 less.
하나는 특정 명령에 대한 몇 가지 플래그를 특별히을 활성화 할 수 있습니다 : 예를 들어, 설정 pager.blame하려면 less -S에만 라인 절단 할 수 있습니다 git blame.


2
감사합니다 감사합니다 나는 git stop이 긴 줄을 길게 자르는 방법을 찾고있었습니다!
coredumperror

@CoreDumpError 참고 : 다음 Git (2.0.X 또는 2.1)은 기본적으로 자르지 않습니다 ! 위의 편집 된 답변을 참조하십시오.
VonC

2
감사. 이것은 내가 ctrl-c quit로 채색 된 diff가 덜 나오도록 LESS = "$ LESS -FRXK"내보내기를 원한다는 것을 알 수있게했습니다.
Dirk Bester

@ DirkBester 재미있는 제안. 더 많은 가시성을 위해 답변에 포함 시켰습니다.
VonC

1
@ WilsonF 잘 모르겠지만 좋은 질문처럼 들립니다. 코멘트에 묻혀있는 대신 질문을 남겨 두십시오.
VonC

58

전역 구성에서 특정 출력에 대해 호출기를 비활성화 / 활성화 할 수 있습니다.

git config --global pager.diff false

또는 core.pager 옵션을 설정하려면 빈 문자열을 제공하십시오.

git config --global core.pager ''

이것은 cat당신이 말하는대로 설정하는 것보다 내 의견으로는 더 낫습니다 .


이것이 Git 1.9에서 나를 위해 일한 것입니다 ... 다른 모든 것이 작동하지 않았습니다.
Jordon Bedwell

이것은 나를 위해 일한 것입니다git version 2.5.4 (Apple Git-61)
Ashley Coolman

이것은 다른 명령이 호출기를 완전히 비활성화하기 때문에 내가 원하는 것입니다. 그러나 이것은 git diff다른 명령을 위해 작동하는 동안에 만 비활성화되는 유일한 대답입니다.
SingleNegationElimination

Windows에서이 글을 쓰고 ...의로 / PowerShell을 나는 수동으로 편집해야했다 code "$($env:UserProfile)\.gitconfig"및 추가 pager = 세 이하 [core]설정. 대답은 현재 powershell 세션에서 효과가 있었지만 설정을 어디에도 저장하지 않아 다음 실행에 효과적이었습니다.
환불 불가 환불 불가

12

파이핑시 비활성화 된 색상 관련 :

--color채색이 비활성화되지 않도록하는 데 사용하십시오 .

git diff --color | less -R

또는 강제로 구성하십시오 (예 : .gitconfig).

[color]
        ui = on

git diff | less -R

비색 도구의 경우 다음을 사용하십시오.

git diff --no-color | some-primitive-tool

환경 변수 LESS=-R(예 : .bashrc)를 내 보내면 기본적으로 "less"로 색상 지원이 켜집니다.

git diff | less


2
git은 pager가 설정되지 않은 경우 호출기를 호출 LESSFRSX때 환경 변수를 설정합니다.
tobbez

10

이것은 Linux에서 Git 버전 2.1.4와 함께 작동했습니다.

git config --global --replace-all core.pager cat

이것은 cat대신 Git을 사용하게 합니다 less. 페이징없이 화면에 cat출력을 덤프합니다 diff.


일반적으로 코드의 목적과 다른 언어를 도입하지 않고 문제를 해결하는 이유에 대한 설명이 포함되어 있으면 답변이 훨씬 유용합니다. (이 게시물은 설명이없는 답변을 삭제해야한다고 생각했기 때문에 한 명 이상의 사용자가 신고했습니다.)
Nathan Tuggy

3
@NathanTuggy 나는 질문에 대답하고 있다는 것이 분명하다고 생각했습니다. 일부 사용자는 짧은 답변을 재미있게 표시하는 것을 좋아합니다. 텍스트를 추가하겠습니다.
jcoffland

7

다음과 같이 pager.alias를 사용하여 자체 호출기로 diff에 별명을 추가 할 수 있습니다.

[alias]
  dc = diff
  dsc = diff --staged
[pager]
  dc = cat
  dsc = cat

이것은 'git dc'에서 호출 될 때 색상을 유지하고 'cat'을 호출기로 사용합니다.

또한, 하지 않은 것들 할 것 :

  • 사용하다 --no-pager당신의 별명에 하십시오. Git (1.8.5.2, Apple Git-48)은 환경을 수정하려고한다고 불평합니다.
  • !sh또는 로 쉘을 사용하십시오 !git. 위의 환경 오류를 무시하지만 작업 디렉토리 (이 명령의 목적으로)를 최상위 Git 디렉토리로 재설정하므로 로컬 디렉토리에 대한 참조는 이미 하위 디렉토리에있는 경우 작동하지 않습니다 당신의 저장소.

+1이 기법은 커밋 후 탐색 git log하지만 탐색 하지 않을 때 유용합니다 git log --oneline. 사용 pager.log = less -FXR +/^commit.*의 특수 케이스 상태 --oneline와 옵션을 alias.l1 = log --oneline하고 pager.l1 = less -FXR.
Claudio

6

나는이 덩어리를 가지고 .gitconfig있고 잘 작동하는 것 같습니다 (diff와 show 모두 비활성화 됨).

[pager]
    diff = false
    show = false

5

출력이 너무 길지 않다는 것을 알고 때때로 페이징을 비활성화하고 싶습니다. 이를 위해 Git 별칭을 사용하여 깔끔한 트릭을 발견했습니다.

git config --global --add alias.n '!git --no-pager'

또는 [alias]~ / .gitconfig 섹션에 다음을 추가하십시오 .

n = !git --no-pager

즉, 접두사 n를 사용하여 Git 명령의 페이징을 해제 할 수 있습니다 .

git n diff # Show the diff without pager
git n log -n 3 # Show the last three commits without pager
git n show v1.1 # Show information about a tag

2

내가 쓴 빠르고 더러운 스크립트를 위해 다음과 같이했습니다.

PAGER=cat git diff ...

$GIT_PAGER설정되어 있으면 작동하지 않습니다 . git --no-pager동일하지만 더 안정적으로 수행합니다.
Matthieu Moy

2

man git 에 따르면 사용할 수 있습니다--no-pager 모든 명령에서 .

나는 그것을 사용한다 :

git --no-pager diff
git --no-pager log --oneline --graph --decorate --all -n 10

그런 다음 별명 을 사용하여 긴 명령을 사용 (및 기억)하지 않도록하십시오.


2

Windows의 경우 :

git config --global core.pager ""

이것은 git에서 매우 성가신 것을 포함하여의 모든 것에 대한 페이징을 끄게 됩니다 git branch.


리눅스에서도 작동합니다!
rustysys-dev

2

oh-my-zsh를 사용하는 경우 ~/.oh-my-zsh/lib/misc.zsh파일에서 다음 행을 주석으로 처리하십시오.

env_default 'LESS' '-R'

저는 OP가 영구적 인 글로벌 솔루션 대신 git diff로 단일 시간을 사용하는 명령 줄 스위치를 원한다고 생각합니다. 또한 나중에 oh-my-zsh를 업데이트하기가 어렵 기 때문에 oh-my-zsh 소스 코드를 수정하는 것이 얼마나 좋은지 모르겠습니다. .zshrc 파일에서 해당 기본값을 설정하는 것이 좋습니다.
Karri Rasinmäki

1
고마워요 oh-my-zsh를 사용하고 영구적 인 글로벌 솔루션이 필요한 unset LESS경우 .zshrc 끝에 추가 할 수 있습니다 .
느린 비

1

기본적으로 git은 덜 사용합니다. 일반적으로 첫 페이지를 인쇄 한 다음 내용을 스크롤 할 수 있으므로 더 선호합니다.

또한 내용은 완료되면 콘솔에 남아 있습니다. 조회 후 내용으로 무언가를하고 싶을 때 종종 편리합니다 (예 : 커미터에게 이메일을 보내고 마지막 커밋에서 버그를 소개했다고 말함).

그런 다음 컨텐츠를 파이프하려면 모든 것을 인쇄하기 위해 스크롤하는 것이 불편합니다. 더 좋은 점은 파이프 라인과 결합 할 수 있고 모든 것을 통해 파이프한다는 것입니다.

# Find the commit abcdef123 in the full commit history and read author and commit message
git log |grep -C 5 'abcdef123'

기본적으로 컨텐츠가 콘솔에 남아 있지 않은 경우를 제외하고는 필요한 모든 것이 있습니다. 대신 더 많이 사용하려면 다음과 같이하십시오.

git config --global core.pager 'more'

0
git -P diff

또는 --no-pager .

BTW : 고양이와 색상을 유지하려면

git diff --color=always | cat

0

아래 지침을 따르십시오.

  1. vi ~/.gitconfig터미널에 입력 하십시오.
  2. 붙여 넣기 LESS="-F -X $LESS"라인.
  3. 를 누르고 :wq입력하십시오.
  4. 터미널을 다시 시작하십시오.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.