Để chạy lệnh bên trong một bí danh git, và đặc biệt để vượt qua đối số cho các lệnh, bạn sẽ có khả năng phải tạo một hàm tạm thời mà bạn ngay lập tức gọi ra:
$ vim ~/.gitconfig
...
[alias]
# compare:
foo = "! echo begin arg=$1/$2/end"
foo2 = "!f() { echo "begin arg=$1/$2/end"; }; f"
Trong ví dụ này, hàm có thể là những gì bạn cần (và linh hoạt hơn về những gì bạn có thể làm trong một "chỉ số" ement "); và bạn có thể có thể nói rằng đối với cả hai tùy chọn, các arg còn lại cho lệnh git chỉ đơn giản là được chuyển như args cho bí danh, bất kể là "echo" hay "f"; cách gọi các chức năng đơn giản là tiêu thụ các args, bỏ qua những gì không được sử dụng một cách rõ ràng:
$ git foo a b c
begin arg=a/b/end a b c
$ git foo2 a b c
begin arg=a/b/end
Một ví dụ khác (liệt kê tất cả các bí danh, dựa trên phù hợp với mô hình) (lưu ý: bạn có thể giữ tái sử dụng tên hàm tương tự "f()" trong suốt các .gitconfig):
[alias]
alias = "!f() { git config --get-regexp "^alias.${1}$" ; }; f"
lợi nhuận đầu tiên bí danh cho chỉ là "foo $", thứ hai cho "foo *.":
$ git alias foo
alias.foo ! echo begin arg=$1/$2/end
$ git alias 'foo.*'
alias.foo ! echo begin arg=$1/$2/end
alias.foo2 !f() { echo begin arg=$1/$2/end; }; f
(nb: Kết quả thực tế có thể khác nhau dựa trên vỏ ; Tôi đang sử dụng điều này với bash trên Linux, Unix & Cygwin (Windows).)
Điều đó. Tuyệt. Ban đầu tôi lo lắng rằng tôi sẽ vô tình chạy một thứ gì đó, vì tôi đã viết một vài kịch bản lệnh shell để làm công cụ git, và cho họ tiền tố 'git-', Nhưng vỏ của tôi (zsh) không tự động hoàn thành chúng, vì vậy tôi phải nhập chúng một cách rõ ràng. Và nếu tôi muốn có hành vi tự động hoàn thành, tôi có thể khai báo một bí danh git cho tiểu ban của riêng nó, đó cũng là một yêu cầu mà tôi làm cho liên kết từ tập lệnh thành tiểu mục và rõ ràng. –
Yup, và đó là một nhị phân bạn chỉ cần các bang: '! binary' –