Làm cách nào để in danh sách các bí danh git của tôi, nghĩa là, một cái gì đó tương tự với alias
lệnh bash ?
Làm cách nào để in danh sách các bí danh git của tôi, nghĩa là, một cái gì đó tương tự với alias
lệnh bash ?
Câu trả lời:
Câu trả lời này được xây dựng dựa trên câu trả lời của johnny . Nó áp dụng nếu bạn không sử dụng git-alias
từ git-extras
.
Trên Linux, hãy chạy một lần:
git config --global alias.alias "! git config --get-regexp ^alias\. | sed -e s/^alias\.// -e s/\ /\ =\ /"
Điều này sẽ tạo ra một bí danh git vĩnh viễn có tên alias
được lưu trữ trong ~/.gitconfig
tệp của bạn . Sử dụng nó sẽ liệt kê tất cả các bí danh git của bạn, ở định dạng gần giống như chúng có trong ~/.gitconfig
tệp. Để sử dụng nó, gõ:
$ git alias
loga = log --graph --decorate --name-status --all
alias = ! git config --get-regexp ^alias\. | sed -e s/^alias\.// -e s/\ /\ =\ /
Những cân nhắc sau đây được áp dụng:
Để ngăn bí danh alias
khỏi danh sách như trên, hãy thêm vào | grep -v ^'alias '
trước khi trích dẫn kép. Tôi không khuyến nghị điều này để người dùng đừng quên rằng lệnh alias
này chỉ là bí danh và không phải là một tính năng của git.
Để sắp xếp các bí danh được liệt kê, hãy thêm vào | sort
trước khi trích dẫn kép. Ngoài ra, bạn có thể giữ bí danh trong ~/.gitconfig
sắp xếp.
Để thêm bí danh dưới dạng bí danh trên toàn hệ thống, hãy thay thế --global
(cho người dùng hiện tại) bằng --system
(cho tất cả người dùng). Điều này thường đi trong /etc/gitconfig
tập tin.
alias.
ở đầu mỗi dòng
fatal: bad config
. Giải pháp của Git-Extra thực sự hiệu quả với tôi: github.com/tj/git-extras/blob/master/bin/git-alias
git config --global alias.alias "! git config --get-regexp ^alias\."
. Ngoài ra, đảm bảo git version
rằng bạn đã có phiên bản hiện tại của git.
$ git config - bí danh regget
'^alias\.'
git config -e
và sau đó sử dụng đôi mắt của bạn để tìm [alias]
phần. Nhưng những người hâm mộ git dường như luôn ném vào một chút kịch bản bash hoặc kết hợp biểu thức chính quy để giải quyết vấn đề của họ, ngay cả khi không cần thiết :)
git config -e
Chỉ chỉnh sửa .git/config
tệp. Nhưng hầu hết các bí danh của tôi được xác định trong toàn cầu ~/.gitconfig
.
git config --global alias.aliases config --get-regexp '^alias\.'"
... và sau đógit aliases
"
nơi nào đó
Tôi đã tạo ra một bí danh git được gọi là (đủ kỳ lạ) alias
cho chính xác mục đích này ... đôi khi có ích nếu bạn sử dụng bí danh đủ ...
$ git config --global alias.alias "config --get-regexp ^alias\."
Lưu ý, regex đảm bảo dòng bắt đầu bằng alias.
.
--system
thay vì --global
một cái gì đó như thế này hữu ích hơn ở cấp hệ thống, không phải ở cấp độ người dùng.
alias = config --get-regexp ^alias\\.
.
git config --global alias.alias "!git config --get-regexp ^alias\. | grep -Po '(?<=alias\.)\S*' | sort"
Một cách khác (hoàn toàn là thứ tôi thấy dễ nhớ):
git config --list | grep alias
alias
bí danh một lần và sau đó quên bạn thậm chí đã tạo nó.
-l
như một phím tắt thuận tiện cho --list
nhưng tôi thích ý tưởng tạo bí danh để liệt kê các bí danh.
git config --list | grep -E '^alias'
Tôi có nghe thấy 'bash scripting không? ;)
Về phần 'không cần thiết' trong một nhận xét ở trên, về cơ bản tôi đã tạo một trang nam như tổng quan cho các bí danh của mình. Tại sao tất cả những ồn ào? Đó không phải là quá mức cần thiết?
Đọc trên ...
Tôi đã đặt các lệnh như thế này trong .gitconfig, được phân tách như TAB=TABsau:
[alias]
alias1 = foo -x -y --z-option
alias2 = bar -y --z-option --set-something
và chỉ cần định nghĩa một bí danh khác để grep TAB= phần của các bí danh đã xác định. (Tất cả các tùy chọn khác không có tab trước và sau '=' trong định nghĩa của chúng, chỉ là khoảng trắng.)
Nhận xét không được thêm vào bí danh cũng có một TAB=====phụ lục, vì vậy chúng được hiển thị sau khi grepping.
Để xem tốt hơn, tôi đang chuyển đầu ra grep thành ít hơn, như thế này:
#.gitconfig
[alias]
# use 'git h <command>' for help, use 'git la' to list aliases =====
h = help #... <git-command-in-question>
la = "!grep '\t=' ~/.gitconfig | less"
Phần ' \t=
' khớp TAB=.
Để có cái nhìn tổng quan hơn nữa về những bí danh tôi có, và vì tôi sử dụng bảng điều khiển bash, tôi đã tô màu đầu ra bằng các màu của thiết bị đầu cuối:
la = "!grep '\t=' ~/.gitconfig | sed -e 's/=/^[[0;31m=^[[0m/g' | sed -e 's/#.*/^[[0;32m&^[[0m/g' | less -R"
Về cơ bản giống như trên, chỉ cần sử dụng sed để thêm mã màu vào đầu ra.
Các -R
lá cờ của ít là cần thiết để có được màu sắc thể hiện trong ít hơn.
(Gần đây tôi phát hiện ra rằng các lệnh dài có thanh cuộn dưới cửa sổ của chúng không được hiển thị chính xác trên thiết bị di động: Văn bản của chúng bị cắt và thanh cuộn bị thiếu. Đó có thể là trường hợp với đoạn mã cuối cùng ở đây, hãy giữ nguyên lưu ý khi xem các đoạn mã ở đây khi đang di chuyển.)
Tôi có một nửa dặm bí danh, phù hợp với nhu cầu của tôi.
Ngoài ra, một số trong số chúng thay đổi theo thời gian , vì vậy sau tất cả ý tưởng tốt nhất để có một danh sách cập nhật trong tay là phân tích cú pháp .gitconfig.
Một đoạn trích **** ngắn **** từ các bí danh .gitconfig của tôi:
# choose =====
a = add #...
aa = add .
ai = add -i
# unchoose =====
rm = rm -r #... unversion and delete
rmc = rm -r --cached #... unversion, but leave in working copy
# do =====
c = commit -m #...
fc = commit -am "fastcommit"
ca = commit -am #...
mc = commit # think 'message-commit'
mca = commit -a
cam = commit --amend -C HEAD # update last commit
# undo =====
r = reset --hard HEAD
rv = revert HEAD
Trong các máy trạm linux hoặc mac của tôi cũng tồn tại thêm các bí danh trong .bashrc, giống như:
#.bashrc
alias g="git"
alias gh="git h"
alias gla="git la"
function gc { git c "$*" } # this is handy, just type 'gc this is my commitmessage' at prompt
Cách đó không cần gõ git help submodule
, không cần git h submodule
, chỉ gh submodule
là tất cả những gì cần thiết để nhận được sự giúp đỡ. Nó chỉ là một số ký tự, nhưng bạn có thường xuyên gõ chúng không?
Tôi sử dụng tất cả những điều sau đây, tất nhiên chỉ với các phím tắt ...
Đây chỉ là từ đỉnh đầu của tôi.
Tôi thường phải sử dụng git mà không có gui, vì rất nhiều lệnh git không được triển khai đúng trong bất kỳ giao diện đồ họa nào. Nhưng mỗi khi tôi đưa chúng vào sử dụng, nó chủ yếu theo cách tương tự.
Về phần 'không được triển khai' được đề cập trong đoạn cuối:
Tôi vẫn chưa tìm thấy thứ gì đó so sánh với điều này trong GUI:
sba = show-branch --color=always -a --more=10 --no-name
- hiển thị tất cả các nhánh cục bộ và từ xa cũng như các cam kết họ có trong chúng
ccm = "!git reset --soft HEAD~ && git commit"
- thay đổi thông báo cam kết cuối cùng
Từ quan điểm đơn giản hơn:
Bạn có thường xuyên gõ git add .
hay git commit -am "..."
không? Không tính ngay cả phần còn lại ...
Bắt mọi thứ hoạt động như git aa
hoặc git ca "..."
trong windows,
hoặc với bí danh bash gaa
/ g aa
hoặc gca "..."
/ g ca "..."
trong linux và trên mac ...
Đối với nhu cầu của tôi, có vẻ như là một điều thông minh để làm, để điều chỉnh các lệnh git như thế này ...
... và để dễ sử dụng hơn, tôi chỉ giúp bản thân mình cho các lệnh ít sử dụng hơn, vì vậy tôi không phải tham khảo các trang hướng dẫn mọi lúc. Các lệnh được xác định trước và tìm kiếm chúng dễ dàng nhất có thể.
Ý tôi là, chúng ta là những lập trình viên? Bắt mọi thứ để làm việc như chúng ta cần chúng là công việc của chúng ta.
Đây là một ảnh chụp màn hình bổ sung, điều này hoạt động trong Windows:
la = "!grep '\t=' ~/.gitconfig | less"
TAB
preceeding mỗi =
? Với không gian, nó sẽ không hoạt động. Tôi đã có không gian trong các cửa sổ của .gitconfig
mình, một khi tôi thay thế chúng bằng một tabstop duy nhất, cmd.exe hoạt động như mong đợi.
Như các câu trả lời khác đã đề cập, git config -l
liệt kê tất cả các chi tiết cấu hình từ tệp cấu hình của bạn. Đây là một ví dụ một phần của đầu ra đó cho cấu hình của tôi:
...
alias.force=push -f
alias.wd=diff --color-words
alias.shove=push -f
alias.gitignore=!git ls-files -i --exclude-from=.gitignore | xargs git rm --cached
alias.branches=!git remote show origin | grep \w*\s*(new^|tracked) -E
core.repositoryformatversion=0
core.filemode=false
core.bare=false
...
Vì vậy, chúng ta có thể grep ra các dòng bí danh, sử dụng git config -l | grep alias
:
alias.force=push -f
alias.wd=diff --color-words
alias.shove=push -f
alias.gitignore=!git ls-files -i --exclude-from=.gitignore | xargs git rm --cached
alias.branches=!git remote show origin | grep \w*\s*(new^|tracked) -E
Chúng ta có thể làm cho điều này đẹp hơn bằng cách chỉ cut
ra alias.
một phần của mỗi dòng, để lại cho chúng ta lệnh này:
git config -l | grep alias | cut -c 7-
Bản in nào:
force=push -f
wd=diff --color-words
shove=push -f
gitignore=!git ls-files -i --exclude-from=.gitignore | xargs git rm --cached
branches=!git remote show origin | grep \w*\s*(new^|tracked) -E
Cuối cùng, đừng quên thêm nó dưới dạng bí danh:
git config --global alias.la "!git config -l | grep alias | cut -c 7-"
Thưởng thức!
cho cửa sổ:
git config --list | findstr "alias"
Tôi đã đề cập vào tháng 6 năm 2018 với " danh sách tổng quan - các lệnh git được sử dụng nhiều nhất " sử dụng Git 2.18 " --list-cmds=alias
( cam kết 3301d36 )", mà carej báo cáo trong câu trả lời của mình .
git --list-cmds=alias
Ngoài ra git config --get-regexp alias
, bạn có thể kết hợp đầu ra của nó với đầu ra của nó git help
sẽ thay đổi với Git 2.14.x / 2.15:
"
git help co
" bây giờ nói "co is aliased to ...
", không phải "git co is
".
Xem cam kết b3a8076 (ngày 12 tháng 9 năm 2017) của Kaartic Sivaraam ( sivaraam
) .
(Được hợp nhất bởi Junio C Hamano - gitster
- trong cam kết 5079cc8 , ngày 25 tháng 9 năm 2017)
help
: thay đổi tin nhắn để chính xác hơnKhi người dùng cố gắng sử dụng
--help
tùy chọn '' trên thông tin lệnh bí danh về bí danh được in như dưới đây:
$ git co --help
`git co' is aliased to `checkout'
Điều này có vẻ không đúng vì người dùng chỉ có bí danh '
co
' chứ không phải 'git co
'.
Điều này thậm chí có thể không chính xác trong trường hợp người dùng đã sử dụng bí danh như 'tgit
'.
$ tgit co --help
`git co' is aliased to `checkout'
Thêm vào .gitconfig
dưới của bạn [alias]
:
aliases = !git config --list | grep ^alias\\. | cut -c 7- | grep -Ei --color \"$1\" "#"
Sau đó bạn có thể làm
git aliases
- hiển thị TẤT CẢ bí danhgit aliases commit
- chỉ các bí danh có chứa "cam kết"Tôi sử dụng bí danh này trong toàn cầu của tôi~/.gitconfig
# ~/.gitconfig
[alias]
aliases = !git config --get-regexp ^alias\\. | sed -e s/^alias.// -e s/\\ /\\ $(printf \"\\043\")--\\>\\ / | column -t -s $(printf \"\\043\") | sort -k 1
để sản xuất đầu ra sau
$ git aliases
aliases --> !git config --get-regexp ^alias\. | sed -e s/^alias.// -e s/\ /\ $(printf "\043")--\>\ / | column -t -s $(printf "\043") | sort -k 1
ci --> commit -v
cim --> commit -m
co --> checkout
logg --> log --graph --decorate --oneline
pl --> pull
st --> status
... --> ...
( Lưu ý: Điều này hoạt động với tôi trong git bash trên Windows . Đối với các thiết bị đầu cuối khác, bạn có thể cần phải điều chỉnh việc thoát. )
!git config --get-regexp ^alias\\.
in tất cả các dòng từ git config bắt đầu bằng alias.
sed -e s/^alias.//
xóa alias.
khỏi dòngsed -e s/\\ /\\ $(printf \"\\043\")--\\>\\ /
thay thế sự xuất hiện đầu tiên của một không gian bằng \\ $(printf \"\\043\")--\\>
(ước tính #-->
).column -t -s $(printf \"\\043\")
định dạng tất cả các dòng thành một bảng cột cách đều nhau. Ký tự $(printf \"\\043\")
đánh giá #
được sử dụng làm dấu phân cách.sort -k 1
sắp xếp tất cả các dòng dựa trên giá trị trong cột đầu tiên$ (printf \ "\ 043 \")
Điều này chỉ in ký tự #
(hex 043) được sử dụng để tách cột. Tôi sử dụng bản hack nhỏ này để bản thân aliases
bí danh không chứa #
ký tự. Nếu không, nó sẽ thay thế những #
ký tự khi in.
Lưu ý : Thay đổi ký tự này thành ký tự khác nếu bạn cần bí danh có ký #
hiệu bằng chữ .
Có một chức năng tích hợp ... thử
$ __git_aliases
liệt kê tất cả các bí danh :)
$
biểu thị linux nhắc terminal điển hình. Nhập phần còn lại của dòng này vào một thiết bị đầu cuối như vậy và nhấn ENTER
và đưa ra một danh sách các bí danh của bạn. Hoạt động trên cả Linux và Windows (git bash), vì nó được tích hợp sẵn để git. (Đây có lẽ là một chức năng mà git sử dụng nội bộ để giải quyết các bí danh khi chúng được sử dụng trên dòng lệnh.)
Kể từ git 2.18 bạn có thể sử dụng git --list-cmds=alias
Một git
bí danh khác (được gọi alias
) in ra bí danh git: thêm phần sau vào [alias]
phần gitconfig của bạn :
[alias]
# lists aliases matching a regular expression
alias = "!f() { git config --get-regexp "^alias.${1}$" ; }; f"
Ví dụ sử dụng, đưa ra tên bí danh đầy đủ (khớp chính xác tên bí danh: nghĩa là ^foobar$
) và chỉ hiển thị giá trị:
$ git alias st
alias.st status -s
$ git alias dif
alias.dif diff
Hoặc, đưa ra biểu thức chính, hiển thị tất cả các giá trị và bí danh phù hợp:
$ git alias 'dif.*'
alias.dif diff
alias.difs diff --staged
alias.difh diff HEAD
alias.difr diff @{u}
alias.difl diff --name-only
$ git alias '.*ing'
alias.incoming !git remote update -p; git log ..@{u}
alias.outgoing log @{u}..
Hãy cẩn thận: trích dẫn biểu thức chính quy để ngăn chặn sự mở rộng hệ vỏ như một quả địa cầu, mặc dù về mặt kỹ thuật không cần thiết nếu / khi không có tệp nào khớp với mẫu. Ngoài ra: không thể sử dụng bất kỳ biểu thức chính nào, ngoại trừ ^
(bắt đầu mẫu) và $
(kết thúc mẫu); chúng được ngụ ý. Giả sử bạn không sử dụng git-alias
từgit-extras
.
Ngoài ra, rõ ràng bí danh của bạn sẽ khác nhau; đây chỉ là một vài cái mà tôi đã cấu hình (Có lẽ bạn cũng sẽ thấy chúng hữu ích.)