힘내 분기 명령은 'less'처럼 동작합니다


415

git branch명령을 사용하여 모든 분기를 나열하면의 출력이 표시 git branch | less됩니다.

이 명령 git branchls파일 처럼 분기 목록을 표시해야 합니다.

이것이 내가 얻는 출력입니다.

여기에 이미지 설명을 입력하십시오

기본 동작은 git branch어떻게 얻 습니까? 페이징 출력의 원인은 무엇입니까?

나는 ZSH를 oh_my_zsh(Git에는 아무것도 없음) 과 함께 사용 하고 있으며 .gitconfig다음과 같이 보입니다.

[user]
  email = myemail@mail.com
  name = Dennis Haegler
[push]
  default = simple
[merge]
   tool = vimdiff
[core]
  editor = nvim
  excludesfile = /Users/dennish/.gitignore_global
[color]
  ui = true
[alias]
  br = branch
  ci = commit -v
  cam = commit -am
  co = checkout
  df = diff
  st = status
  sa = stash
  mt = mergetool
  cp = cherry-pick
  pl = pull --rebase
[difftool "sourcetree"]
  cmd = opendiff \"$LOCAL\" \"$REMOTE\"
[mergetool "sourcetree"]
  cmd = /Applications/SourceTree.app/Contents/Resources/opendiff-w.sh 
  \"$LOCAL\" \"$REMOTE\" -ancestor \"$BASE\" -merge \"$MERGED\"
  trustExitCode = true

답변:


737

Mark Adelsberger의 답변에 대한 의견에서 언급했듯이 이것은 Git 2.16에서 도입 된 기본 동작 변경이었습니다 .

config 설정을git branch 사용하면 기본적으로 페이징 된 출력을 다시 끌 수 있습니다 .pager.branch

git config --global pager.branch false

127
그것은 기이하고 이상한 결정이 기본값이됩니다. 필자의 유닉스-클리닉 도구는 원하는 경우 연결할 수있는 멍청한 간단한 프로그램처럼 작동 할 것으로 예상되지만 다른 사이트에 대한 토론이라고 생각합니다.
Stragulus

7
@Stragulus 새로운 기본값은 git branch다른 것과의 연결 을 막지 않습니다 . 사용하는 파이프 검출 힘내가 출력 분기 명령리스트 내의 표준 출력 git branch > branches.txt또는 git branch | wc -l.
Rory O'Kane 2016 년

3
@ RoryO'Kane 그러나 pager ESC/q를 사용하면 간단한 git branch확인 후 추가 유형이 있습니다.
mitnk

23
@mitnk 반드시 그런 것은 아닙니다. 호출기가 less인 경우 환경 변수에 추가 --no-init --quit-if-one-screen할 수 있으며 스크롤하지 않고 텍스트를 볼 수 있으면 stdout에 쓰게됩니다. 자세한 내용 은 참조하십시오. LESSlessman less
Rory O'Kane

13
구성 파일에 수동으로 추가하려면 [pager] branch = false두 줄로 표시하십시오.
Sam

56

다른 답변에서 지적했듯이 Git less은 대부분의 명령에서 기본적으로 페이저로 기본적으로 파이핑됩니다 .

그러나 중요한 점 은 LESS 환경 변수가 설정되지 않은 경우 Git이 FRX로 설정 하고 결과적으로 명령 출력이 짧을 때 호출기가 사용되지 않은 것처럼 사용자가 볼 수있는 동작이 동일하다는 것입니다. 지점이 거의없는 경우). 적은 사람을 참조하십시오 :

-F 또는 --quit-if-one-screen
전체 파일을 첫 번째 화면에 표시 할 수 있으면 자동으로 종료되지 않습니다.

-R 또는 --RAW-CONTROL-CHARS
[...] ANSI "color"이스케이프 시퀀스는 "raw"형식으로 출력됩니다.

-X 또는 --no-init
termcap 초기화 ​​및 초기화 해제 문자열을 터미널로 전송하지 못하게합니다. 초기화 해제 문자열이 화면 지우기와 같은 불필요한 작업을 수행하는 경우 때때로 바람직합니다.

설명하는 동작을 얻으면 $LESS다른 것으로 설정 했을 가능성이 높으며 , unset LESS긴 출력을 위해 "pager"동작을 유지하면서 설정을 해제하면 ( ) 문제가 해결됩니다. 또는 파일에 $LESS이것을 추가하여 그대로 유지하면서 동작을 활성화 할 수 있습니다 .gitconfig.

[core]
    pager = less -FRX

호출기 항목을 정말로 싫어하는 경우 전역 또는 명령별로 비활성화 할 수 있습니다 (다른 답변 참조).


40

아니 의미를 주장하지만, 당신이 얻고있는 동작은하는 것입니다 기본. 그렇기 때문에 다른 것을 요구하지 않을 때 얻을 수 있습니다. 기본적으로 branch(및 다른 많은 Git 명령)은 터미널로 출력을 보낼 때 호출기를 사용합니다.

다음 --no-pager옵션 을 사용하여이 기본값을 무시할 수 있습니다 .

git --no-pager branch

또는 출력을 파일로 리디렉션하면 Git은 터미널에 쓰지 않는 것을 감지하여 호출기를 사용해서는 안됩니다. (반면에, 그것은 스크립팅 유스 케이스를 제안합니다.이 경우 git for-each-ref에는 우선적으로 와 같은 배관 명령 사용을 고려해야 합니다 git branch.)


git --no-pager branch공장. 그러나 이것은 어떻게 설정됩니까? PAGER환경 변수 만 로 설정되어 less있습니다. 이것은 기본 동작이 아닙니다. 우리 대학은 모두 터미널에 출력되는 목록으로 출력됩니다.
DenniJensen

어떤 버전의 자식을 사용하고 있습니까? 그리고 당신의 동료는 어느 것을 사용하고 있습니까?
Lasse V. Karlsen

2.16.0! 이 버전에서 git에 소개 된 기능입니까?
DenniJensen

네, 지금은 기본입니다. github.com/git/git/blob/master/Documentation/RelNotes/… 같은 버전을 사용하는 내 대학 옆에이 문제가 없습니다 :) thx @mark
DenniJensen

1
이 걸작을 찾기 위해 꽤 많이 스크롤했기 때문에 이것은 가장 훌륭한 대답입니다.
codepleb September

25

이 힘내 행동은 나에게 점점 더 성가신 것이었다. less예를 들어 태그를 나열하고 싶을 때 태그 목록을 얻었습니다 .

하나는 기본 변경하여이 동작을 제어 할 수 있습니다 망할 놈의 호출기cat대신 less. 차라리 에디터보다는 iTerm에서 스크롤하고 싶습니다. 원할 때 편집기를 사용하고 싶습니다.

그래서:

git config --global core.pager cat

1
그래, 이것은 나에게 맞는 답이어야한다
Tura

2
헤드 업 주셔서 감사합니다. 나는 두 달 동안 사용한 후에도 여전히 고양이를 사용하고 있지만 인정할 때 git log성가신 일입니다. 나는 원래의 행동을 그리워하지만이 관점에서 일상적인 워크 플로우를 개선 할 시간이 없었습니다.
ionescu77

당신이 이길! ... 완벽한!
sdlins 2018 년

2
이것은 git log
다음에

10

~/.gitconfig이 문제를 해결하기 위해 업데이트하려는 사람들 은 다음과 같습니다.

[pager]
   branch = false

이상한 점은 :이 설정은 작동하고 며칠 이후 더 이상 변경되지 않았거나 변경되었거나 구성이 적용되지 않았습니까?
정복자 Haki

7

힘내 분기 명령은 'less'처럼 동작합니다

Git은 기본적으로 pager (적어도 Ubuntu)에서 출력을 열기 때문에. 허용 대답은 완전히 호출기를 교체 할 당신 않을 수 없습니다와 같은 당신의 출력이 매우 긴 경우.

호출기를으로 교체하는 것이 좋습니다 less. 따라서 출력은 터미널 높이보다 "스크롤"하지 않습니다.

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


2

허용 된 답변이 잘못되었습니다. 두 가지 문제가 있습니다.

  1. 동작은 (기본적으로 구성된) bash와 zsh간에 실제로 다릅니다. '문제'는 zsh에서만 나타납니다.
  2. 제안 된 솔루션은 git branch항상 호출기를 사용하지 않으므로 출력이 많을 때는 바람직하지 않습니다.

실제 이유는 bash와 zsh가 LESS에 대해 다른 기본 정의를 갖기 때문입니다. bash는 아무것도 정의하지 않지만 zsh는이를 정의합니다 -R. 내가 unset LESSzsh에서 할 때 모든 것이 정상으로 돌아갑니다 ...

-R동작은 여전히 바람직 할 수있다. 이 경우 다음 명령을 .zshrc에 추가하여 모든 것이 작동하도록 할 수 있습니다.

export LESS=-FRX

-F'전체 파일을 첫 번째 화면에 표시 할 수 있으면 자동으로 종료되는 횟수가 줄어 듭니다.' 그러나 -X동시에 지정해야합니다. 그렇지 않으면 화면 출력이 적을 때 출력이 표시되지 않습니다.


0

https://git-scm.com/book/en/v2/Git-Internals-Environment-Variables

GIT_PAGER은 명령 행에 여러 페이지 출력을 표시하는 데 사용되는 프로그램을 제어합니다. 이것이 설정되어 있지 않으면 PAGER가 대체로 사용됩니다.

이 문제를 해결하기 위해 쉘에서 PAGER 및 GIT_PAGER을 설정 해제 할 수 있습니다.


1
설정 되지 않은 PAGER( GIT_PAGER설정되지 않은) 문제가 여전히 있습니다. 이 환경 변수를 확인해야 할 위치가 있습니까?
DenniJensen

@DenniJensen 명령에 페이저를 설정할 수 있습니다 PAGER= git branch(쓰기와 같은 기호 앞에 공백없이 한 칸씩 ). 예를 들어보다 나은지 모르겠습니다 git branch | cat.
maaartinus

-1

나는 같은과 함께 문제를 했어 git status그리고 git config --global pager.status false너무 해결할 수있는 문제입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.