때때로 내가 사용하는 git 하위 모듈을 통해 grep해야 합니다.
git submodule foreach 'git grep x'
그러나 zsh로 전환한 이후 옵션이 없는 경우에도 각 하위 모듈에 대해 더 적은 프롬프트가 열리는 것을 발견했습니다. 내가 가장 선호하는 것은 모든 출력이 터미널에 인쇄되는 것입니다.
내 현재 솔루션은 다음을 호출하는 것입니다.
git submodule foreach 'git grep x' > /tmp/a && cat /tmp/a
내가 원하는 것을 달성했지만 옵션이나 더 우아한 솔루션이 누락되었다고 느낄 수밖에 없습니다. 하나 있나요?
답변1
git이 사용하는 호출기를 변경해 보세요:
GIT_PAGER="cat" git submodule foreach 'git grep x'
또는 더 적게 사용하고 싶지만 출력이 화면을 벗어나는 경우에만 다음을 수행하십시오.
GIT_PAGER="less -FX" git submodule foreach 'git grep x'
를 사용하여 프로젝트별로 호출기를 설정할 수도 있고 git config
, 물론 환경 변수를 전역적으로 설정할 수도 있습니다.
답변2
다른 방법을 다루려면 다음을 수행하십시오.
방법 #1:--nopager
git submodule foreach 'git --nopager grep x'
방법 #2: 호출기를 완전히 비활성화합니다.
git config --global core.pager cat
git-config 매뉴얼 페이지에서:
core.pager git이 출력 페이지를 매기는 데 사용할 명령입니다. GIT_PAGER 환경 변수로 재정의될 수 있습니다. git은 호출기를 실행할 때 설정되지 않은 경우 LESS 환경 변수를 FRSX로 설정합니다. LESS 변수를 다른 값으로 설정하여 이러한 설정을 변경할 수 있습니다. 또는 core.pager 옵션을 설정하여 프로젝트 또는 전역 기반에서 이러한 설정을 재정의할 수 있습니다. core.pager 설정은 위의 LESS 환경 변수 동작에 영향을 미치지 않으므로 이 방법으로 git의 기본 설정을 재정의하려면 명시적으로 설정해야 합니다. 예를 들어 이전 버전과 호환되는 방식으로 S 옵션을 비활성화하려면 core.pager를 less -+S로 설정합니다. 이는 git에 의해 셸로 전달되며 최종 명령은 LESS=FRSX less -+S로 변환됩니다.
방법 #3:pager.<cmd>
pager를 사용하여 단일 git 하위 명령에 대한 페이징을 비활성화할 수도 있습니다. core.pager 대신 설정을 사용하면 git 저장소별로 설정을 변경할 수 있습니다(--global 생략).
git config --global pager.grep cat
git-config 매뉴얼 페이지에서:
휴대용 소형 무선 호출기. 값이 부울인 경우 tty에 쓸 때 특정 git 하위 명령 출력의 페이지 매김을 켜거나 끕니다. 그렇지 않으면 pager 값으로 지정된 pager를 사용하여 하위 명령에 대한 페이지 매김을 켭니다. --paginate 또는 --no-pager가 명령줄에 지정된 경우 이 옵션보다 우선합니다. 모든 명령에 대해 페이지 매김을 비활성화하려면 core.pager 또는 GIT_PAGER를 cat으로 설정하세요.
방법 #4: less' 동작 수정( -F -X
)
내용이 화면 크기보다 큰 파일에 대해서만 "조건부" 페이지를 표시하도록 less를 재구성 -F
하고 나중에 화면을 지우지 않도록 less를 비활성화할 수 있습니다( X
).
git config --global core.pager less -F -X
참고자료
답변3
이 경우 전체 명령을 다시 페이지 지정했습니다.
git submodule ... | less
그러나 하위 명령의 잠재적인 형식은 손실됩니다.
그러다가 "git status"에도 동일한 문제가 있다는 것을 깨달았습니다. "에 대한 답변을 읽은 후git 상태 출력을 위해 호출기를 어떻게 켤 수 있나요?" 내가 제안 할게
git config --global pager.submodule "less -FX"