git이 "자동 모드"에서 작동 할 수 있습니까?


106

"자동"모드에서 git 명령을 실행할 수 있습니까? 예를 들어 " git push origin" 라고 말했는데 화면에 아무것도 표시되지 않습니까?

IO를 /dev/null(잘 작동 함)으로 리디렉션 할 수 있다고 생각 하지만 .. git은 자연스럽게 이와 같은 것을 허용합니까?

아래는 자동 EOD 커밋을 수행하는 빠른 스크립트로, 기차를 타야하고 로컬 컴퓨터에 코드를 남기고 싶지 않을 때 사용됩니다.

  1 clear
  2
  3 cd
  4 cd repo/active
  5
  6 for i in *
  7 do
  8   cd $i
  9   echo "Pushing " $i
 10   git add . -A >> /dev/null 
 11   git commit -a -m "EOD automatic commit" >> /dev/null 
 12   git push origin >> /dev/null 
 13   echo
 14   cd ..
 15 done

알려주세요.


1
관련 없음 : cmds를 cd $ i, cd ..로 감싸는 대신 다음을 수행 할 수 있습니다. for i in *; 할 (cd $ i; ...;); 완료하고 서브 쉘에서 cd를 실행하십시오. 이것은 덜 깨지기 쉽습니다.
William Pursell

"올바른"표시를 ThomasEdwards 답변으로 옮기시겠습니까? 정말 "자연스러운"방식으로 대답합니다.
Christian

1
나는 Linus가 git을 개발할 때 염두에 두었던 것이 무엇인지 궁금합니다. 침묵은 황금이라는 기본 UNIX 규칙 중 하나를 분명히 위반했기 때문입니다. 여기서 답을 얻지 못한 것은 git의 설정에 몇 가지 설정을 넣어서 좋은 UNIX 시민이 될 수 있는지 여부입니다.
Johan Boulé

답변:


19

출력을 / dev / null로 리디렉션하는 것은 나에게 자연스러운 방법처럼 보입니다. 과거에 cron 작업에 사용하기 위해 다음과 같은 quiet_git 셸 함수를 정의했지만 :

quiet_git() {
    stdout=$(tempfile)
    stderr=$(tempfile)

    if ! git "$@" </dev/null >$stdout 2>$stderr; then
        cat $stderr >&2
        rm -f $stdout $stderr
        exit 1
    fi

    rm -f $stdout $stderr
}

이것은 git 명령이 실패하지 않는 한 stdout 및 stderr을 억제합니다. 예쁘지 않습니다. 사실 stdout 파일은 무시되며 / dev / null로 리디렉션해야합니다. 그래도 작동합니다. 그런 다음 나중에 스크립트에서 "quiet_git push"등을 수행 할 수 있습니다.


10
훨씬 더, @ThomasEdwards의 답변을 참조하십시오
로빈 윈 슬로에게

240

당신은 사용할 수 있습니다 --quiet또는 -q다른 망할 놈의 명령에도 사용 할 수있는 :

git commit --quiet
git push --quiet

2
이런 식으로 git commit을 침묵시키는 것 같지 않습니다. 두 플래그 중 하나를 무시합니다.
GaryBishop 2014 년

8
명령 뒤에 추가해야합니다. git pull -q또는 git push origin master --quiet. 나는 git 1.8.x
Mendhak 2014

7
@Mendhak, 작동하지 않습니다 (적어도 침묵하지 않습니다). 예를 들어 git pull -q origin master > /dev/null"총 4 (델타 3), 재사용 된 4 (델타 3)"이 산출됩니다. 그것은 git 2.0.1입니다.
Matthew Flaschen

3
--queit (또는 -q)를 사용하더라도 여전히 일부 출력을 인쇄합니다. 예를 들어 git checkout -q (branch_name)를 사용할 때 브랜치가 처음 체크 아웃되는 경우 새 브랜치가 설정되었다는 메시지를 출력합니다. 이러한 모든 출력을 침묵시킬 수있는 방법 (일부 플래그)이 있습니까?
Ankur

6
당신은 실제로하지 않으려면 NO 출력, 사용 git command >/dev/null 2>&1. 이것은 stdout과 stderr를 모두 / dev / null로 리디렉션합니다. --quiet옵션 전적으로 @Ankur 출력을 억제하기위한 간결한 출력을 위해 생성된다
브랜

17

사용 &> /dev/null마지막에 당신에게 완전히 침묵 자식 명령 출력을 제공합니다.

git fetch origin master &> /dev/null

1
csh에서만 bourne 쉘을 사용하여 쉘 스크립팅을 수행하는 것이 가장 좋습니다.
hd1

@ hd1 no, &>bash IO 리디렉션 연산자입니다. 봐 3.6 여기에서 tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-3.html
한스 크리스티안

@HansKrisian 예, bash는 csh의 대화 형 기능과 sh의 스크립팅을 함께 가져 왔습니다. 동일한 하우투에서 인용 : "Bash는 Korn 쉘 (ksh) 및 C 쉘 (csh)의 유용한 기능을 통합하는 sh 호환 쉘입니다."
hd1

1
목적은 정보 메시지를 제거하지만 여전히 오류를 표시하는 것입니다. 나는 stdout으로 이동하는 것과 stderr로 이동하는 것에 대해 자식이 얼마나 잘 행동하는지 연구하지 않았지만 두 냄새를 모두 매우 나쁜 생각처럼 리디렉션합니다.
Johan Boulé

6

도 참고 --quiet 하는 git fetch(A를 트리거하는이 git gc) 몇 가지 출력을 생성합니다.
그 때문에이다 git gc의 일부 git fetch.

더 이상은, 자식 2.1.1 (2014 9 월) 시작하는 : 참조 6fceed3bea59d747c160972c67663e8b8c281229을 커밋 에서 (응웬 타이 응옥 두이 pclouds)

가져 오기 : 주어진 git-gc경우 침묵--quiet

builtin/fetch.c:

argv_array_pushl(&argv_gc_auto, "gc", "--auto", NULL);
if (verbosity < 0)
argv_array_push(&argv_gc_auto, "--quiet");
run_command_v_opt(argv_gc_auto.argv, RUN_GIT_CMD);
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.