Git có thể hoạt động ở “chế độ im lặng” không?


106

Có thể thực hiện bất kỳ lệnh git nào ở chế độ "im lặng" không? Ví dụ: tôi có thể nói " git push origin" và không thấy gì hiển thị trên màn hình không?

Tôi cho rằng tôi có thể chuyển hướng IO đến /dev/null(hoạt động tốt), nhưng .. git có cho phép điều gì đó tự nhiên như vậy không?

Dưới đây là một tập lệnh nhanh thực hiện cam kết EOD tự động, được sử dụng khi tôi cần bắt tàu và không muốn để lại mã trên máy tính cục bộ của mình

  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

Làm ơn cho tôi biết.


1
Không liên quan: thay vì gói cmds trong cd $ i, cd .., bạn có thể làm: for i in *; do (cd $ i; ...;); xong và chạy cd trong một vỏ con. Điều này ít mong manh hơn.
William Pursell,

Bạn muốn chuyển dấu "đúng" cho câu trả lời ThomasEdwards? Nó thực sự trả lời với cách "tự nhiên".
Christian

1
Tôi tự hỏi Linus đã nghĩ gì khi phát triển git, bởi vì rõ ràng nó đã phá vỡ một trong những quy tắc UNIX cơ bản nói rằng im lặng là vàng. Điều chưa được trả lời ở đây là nếu có thể đặt một số cài đặt trong cấu hình của git để biến nó thành công dân UNIX tốt một lần và mãi mãi.
Johan Boulé

Câu trả lời:


19

Chuyển hướng đầu ra đến / dev / null có vẻ như là một cách tự nhiên đối với tôi. Mặc dù trước đây tôi đã định nghĩa một hàm shell yên_git như thế này để sử dụng trong các công việc cron:

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
}

Điều này sẽ ngăn chặn stdout và stderr, trừ khi lệnh git bị lỗi. Nó không đẹp; trên thực tế, tệp stdout bị bỏ qua và nó chỉ nên chuyển hướng đến / dev / null. Hoạt động, mặc dù. Và sau đó, bạn chỉ có thể thực hiện "yên tĩnh_git push", v.v. sau đó trong tập lệnh.


10
Xem @ThomasEdwards câu trả lời, nhiều hơn
Robin Winslow

240

Bạn có thể sử dụng --quiethoặc -q, cũng có thể được sử dụng cho các lệnh Git khác:

git commit --quiet
git push --quiet

2
Tôi dường như không thể im lặng git commit theo cách này. Nó bỏ qua một trong hai lá cờ.
GaryBishop

8
Bạn cần thêm nó vào sau lệnh. git pull -qhoặc git push origin master --quiet. Tôi đang sử dụng git 1.8.x
Mendhak

7
@Mendhak, không hoạt động (ít nhất là nó không im lặng). Ví dụ: git pull -q origin master > /dev/nullcho ra "Tổng 4 (delta 3), 4 (delta 3) được sử dụng lại". Đó là với git 2.0.1.
Matthew Flaschen

3
Ngay cả khi sử dụng --queit (hoặc -q), nó vẫn in một số đầu ra. Ví dụ, khi sử dụng git checkout -q (branch_name), nếu đây là lần đầu tiên chi nhánh được kiểm tra, nó sẽ in ra một thông báo cho biết chi nhánh mới đã được thiết lập. Có cách nào đó (một số cờ) sử dụng mà tất cả các đầu ra như vậy có thể được im lặng không?
Ankur

6
Nếu bạn thực sự muốn KHÔNG có đầu ra, hãy sử dụng git command >/dev/null 2>&1. Điều này chuyển hướng cả stdout và stderr đến / dev / null. Các --quiettùy chọn được cho đầu ra ngắn gọn tạo ra, chứ không phải để trấn áp đầu ra hoàn toàn @Ankur
Brandon

17

Sử dụng &> /dev/nullở cuối cung cấp cho bạn đầu ra lệnh git hoàn toàn im lặng.

git fetch origin master &> /dev/null

1
Chỉ trong csh, hầu hết khuyên bạn nên thực hiện kịch bản shell bằng cách sử dụng các shell bourne.
hd1

@ hd1 không, &>là toán tử chuyển hướng IO cơ bản. Xem 3.6 tại đây tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-3.html
Hans Kristian

@HansKrisian vâng, bash đã đưa các tính năng tương tác từ csh và script từ sh lại với nhau. Trích dẫn từ cách làm tương tự: "Bash là một shell tương thích với sh kết hợp các tính năng hữu ích từ Korn shell (ksh) và C shell (csh)".
hd1

1
Mục đích là loại bỏ những thông báo chưa thông tin nhưng vẫn hiển thị lỗi. Tôi chưa nghiên cứu xem hành vi tốt như thế nào liên quan đến điều gì xảy ra với stdout và điều gì đến với stderr, nhưng chuyển hướng cả hai có vẻ là một ý tưởng rất tồi.
Johan Boulé

6

Lưu ý rằng ngay cả với --quiet , a git fetch(kích hoạt a git gc) sẽ tạo ra một số đầu ra.
Đó là vì git gcmột phần của git fetch.

Không nữa, bắt đầu git 2.1.1 (tháng 9 năm 2014): xem cam kết 6fceed3bea59d747c160972c67663e8b8c281229 từ Nguyễn Thái Ngọc Duy ( pclouds)

fetch: im lặng git-gcnếu --quietđược đưa ra

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);
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.