Đặt cờ mặc định git trên các lệnh


88

Tôi muốn biết có cách nào để đặt cờ theo mặc định cho lệnh git hay không. Cụ thể, tôi muốn đặt --abbrev-commitcờ để khi thực thi git log, tôi muốn thực thi git log --abbrev-commit.

Không giống như câu hỏi " có cách nào để đặt cờ theo mặc định cho lệnh git không? ", Rõ ràng không có cờ cấu hình để thêm --abbrev-commit vào git log. Hơn nữa, hướng dẫn sử dụng git nói rằng tôi không thể tạo bí danh: "Để tránh nhầm lẫn và rắc rối với việc sử dụng tập lệnh, các bí danh ẩn các lệnh git hiện có sẽ bị bỏ qua"

Tùy chọn thứ ba của tôi là phát minh ra một bí danh mới như glog=log --abbrev-committrong tệp .gitconfig của tôi. Nhưng tôi không muốn phát minh ra DSL của riêng mình với các lệnh mới.

Có cách nào khác để đạt được nó để abbrev-commitcờ được đặt theo mặc định không ??


1
Kể từ git 1.7.6, có một cờ để kiểm soát hành vi này. Xem câu trả lời của @underrun bên dưới.
slacy

Câu trả lời:


58

Kể từ phiên bản git 1.7.6, git config đã đạt được tùy chọn log.abbrevCommit có thể được đặt thành true. Vì vậy, câu trả lời là nâng cấp lên ít nhất 1.7.6 (hiện tại của văn bản này là 1.7.11.4) và sử dụng:

git config --global log.abbrevCommit true

2
Bạn không cho rằng có một tùy chọn cho một dòng?
Zaz,

1
Tôi đang chấp nhận câu trả lời này. Rất vui khi thấy Git đã thêm cấu hình này kể từ khi tôi viết câu hỏi gần bốn năm trước.
Jesper Rønn-Jensen

Đâu là nguồn gốc của tất cả những lựa chọn thần bí này?
xaxxon

Có ai biết cờ mặc định cho đồ thị không? Tôi không thể tìm thấy nó trong trang @xaxxon được liên kết ..
myol

@myol, bạn nên sử dụng git config --helphoặc git help configlấy tài liệu phù hợp với cài đặt của bạn .
doak

46

Bạn có thể sử dụng một định dạng tùy chỉnh để git logbắt chước --abbrev-committheo mặc định:

git config format.pretty "format:%h %s"

Tuyệt vời, đây dễ dàng là câu trả lời tốt nhất.
duane

Bạn cũng có thể sử dụng màu trong khi định dạng: "% C (màu vàng)% h% Creset% s" sẽ hiển thị giống như git log --oneline với màu sắc.
Avner

1
Bây giờ là một câu hỏi nhanh: nếu bạn thấy điều này hữu ích và điều này trả lời chính xác vấn đề, tại sao bạn không đánh dấu điều này là đúng?
igorsantos07 1/12/12

1
Điều này sẽ tốt hơn nếu bạn không muốn nhớ những bí danh khó nhớ hoặc khó nhớ và chỉ muốn sử dụng "git log" mọi lúc.
Shyam Habarakada

1
Đây là câu trả lời tốt nhất cho tôi. Các log.abbrevCommitthiết lập ảnh hưởng nhiều khác verbose định dạng, mà tôi không thích. Ngoài ra, sử dụng %C(auto)%h %sđể có được định dạng một dòng bình thường với màu tự động. Tôi đã từng git config --global format.pretty "%C(auto)%h %d %s"vì tôi muốn trang trí oneline là "mặc định" của tôi
davenpcj

33

Không có cơ chế chung nào trong git để đặt các đối số mặc định cho các lệnh.

Bạn có thể sử dụng bí danh git để xác định một lệnh mới với các đối số bắt buộc:

git config alias.lg "log --oneline"

Sau đó, bạn có thể chạy git lg.

Một số lệnh cũng có cài đặt cấu hình để thay đổi hành vi của chúng.


12
Tôi muốn tránh tạo ra cú pháp của riêng tôi vì vậy tôi muốn một giải pháp mà tôi không sử dụng git lgnhưnggit log
Jesper Ronn-Jensen

tại sao? nó đã tạo ra sự khác biệt gì?
hasen

46
Sự khác biệt rất quan trọng là tôi không muốn giới thiệu "cú pháp git Jespers" trên hệ thống của mình. Tôi muốn tôi (và những người khác sử dụng máy của tôi) sử dụng các lệnh chung. Ngoài ra, điều này sẽ làm cho công việc của tôi nhanh hơn trên các máy khác: Tôi không lo lắng về vô tình gõ "git lg" và nhận được một "không tìm thấy" lỗi
Jesper Ronn-Jensen

19
Nếu ai đó đang sử dụng máy của bạn và nhập git log giải pháp dự định của bạn có nghĩa là họ sẽ nhận được kết quả mà họ không mong đợi.
Abizern

1
Xác định lại bí danh tiêu chuẩn có thể phá vỡ các tập lệnh.
justintime

10

VonC đã gợi ý về một trình bao bọc trong câu trả lời của mình; đây là triển khai Bash của tôi về một trình bao bọc như vậy. Nếu bạn đặt ví dụ này vào của bạn .bashrc, trình bao tương tác của bạn sẽ hỗ trợ ghi đè các lệnh tích hợp trong Git cũng như các bí danh viết hoa.

# Git supports aliases defined in .gitconfig, but you cannot override Git
# builtins (e.g. "git log") by putting an executable "git-log" somewhere in the
# PATH. Also, git aliases are case-insensitive, but case can be useful to create
# a negated command (gf = grep --files-with-matches; gF = grep
# --files-without-match). As a workaround, translate "X" to "-x". 
git()
{
    typeset -r gitAlias="git-$1"
    if 'which' "$gitAlias" >/dev/null 2>&1; then
        shift
        "$gitAlias" "$@"
    elif [[ "$1" =~ [A-Z] ]]; then
        # Translate "X" to "-x" to enable aliases with uppercase letters. 
        translatedAlias=$(echo "$1" | sed -e 's/[A-Z]/-\l\0/g')
        shift
        "$(which git)" "$translatedAlias" "$@"
    else
        "$(which git)" "$@"
    fi
} 

Sau đó, bạn có thể ghi đè git logbằng cách đặt một tập lệnh có tên git-logở đâu đó vào PATH của bạn:

#!/bin/sh
git log --abbrev-commit "$@"

7

Tôi gặp sự cố tương tự (nhiều tùy chọn mặc định cho lệnh Git bị lỗi). Đây là cách tiếp cận của tôi. Tạo một tập lệnh có tên 'grit' (hoặc bất cứ thứ gì) trên đường dẫn của bạn, như sau:

#!/bin/bash
cmd=$1
shift 1
if [ "$cmd" = "" ]; then
  git
elif [ $cmd = "log" ]; then
  git log --abbrev-commit $@
elif [ $cmd = "branch" ]; then
  git branch -v $@
elif [ $cmd = "remote" ]; then
  git remote -v $@
else
  git $cmd $@
fi

Rất đơn giản để đọc và duy trì, trong trường hợp bạn cần chia sẻ nó với những người không phải là chuyên gia của Bash.


Bạn có thực sự muốn "git remote blah" gọi là "git branch blah" không? Tôi đang sử dụng một biến thể của cái này trong đó tôi đã đặt git trước đó trong đường dẫn và sau đó gọi / usr / bin / git một cách rõ ràng trong tập lệnh của mình. Vâng, điều này có thể phá vỡ một cái gì đó.
LovesTha

1
Tôi thích điều này và thực hiện hai điều chỉnh bổ sung. Tôi đã làm cho nó một chức năng bash và để cho nó được đặt tên gitbằng cách thêm một dòng đầu tiên để có được những con đường lệnh thực: thegit=`/usr/bin/which git`. Và tôi đã thêm một tùy chọn để hủy bỏ ghi đè với một x trước khi lệnh như git x log ...: if [ "$cmd" = "x" ]; then; $thegit $@.
Joshua Goldberg


0

Mọi tiện ích chúng tôi sử dụng (svn, maven, git, ...) luôn được gói gọn trong một tệp .bat (trên Windows hoặc .sh trên Unix), nhằm cung cấp cho các nhà phát triển của chúng tôi một thư mục để thêm vào đường dẫn của họ.

Nếu git được gói gọn trong một tập lệnh wrapper, thì ... mọi thứ đều có thể.

Nhưng đó vẫn là một giải pháp được liên kết với thiết lập của người dùng, không được liên kết với chính Git hoặc git repo.


Vì vậy, bạn có nghĩa là tôi sẽ có thể đạt được nó bằng cách thêm bí danh vào .bash_profile của tôi?
Jesper Rønn-Jensen

@Jesper: đó là ý tưởng, vì git.bat trình bao bọc của bạn sẽ có thể phát hiện lệnh Git bạn muốn thực thi và có thể thêm bất kỳ tùy chọn nào nó muốn.
VonC
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.