ฉันจะพิมพ์รายการนามแฝง git ของฉันได้อย่างไรเช่นมีบางสิ่งที่คล้ายคลึงกับalias
คำสั่งbash
ฉันจะพิมพ์รายการนามแฝง git ของฉันได้อย่างไรเช่นมีบางสิ่งที่คล้ายคลึงกับalias
คำสั่งbash
คำตอบ:
คำตอบนี้สร้างเมื่อคำตอบโดยจอห์นนี่ ซึ่งจะใช้ถ้าคุณไม่ได้ใช้จากgit-alias
git-extras
บน Linux รันครั้งเดียว:
git config --global alias.alias "! git config --get-regexp ^alias\. | sed -e s/^alias\.// -e s/\ /\ =\ /"
การดำเนินการนี้จะสร้างนามแฝงคอมไพล์ถาวรalias
ซึ่งจะถูกเก็บไว้ใน~/.gitconfig
ไฟล์ของคุณ การใช้มันจะแสดงรายชื่อนามแฝง git ทั้งหมดของคุณในเกือบจะเป็นรูปแบบเดียวกับที่อยู่ใน~/.gitconfig
ไฟล์ หากต้องการใช้งานให้พิมพ์:
$ git alias
loga = log --graph --decorate --name-status --all
alias = ! git config --get-regexp ^alias\. | sed -e s/^alias\.// -e s/\ /\ =\ /
ข้อควรพิจารณาต่อไปนี้ใช้:
หากต้องการป้องกันนามแฝงalias
จากการแสดงรายการข้างต้นให้ผนวก| grep -v ^'alias '
ก่อนปิดการอ้างสองครั้ง ฉันไม่แนะนำสิ่งนี้ดังนั้นผู้ใช้อย่าลืมว่าคำสั่งalias
นั้นเป็นเพียงนามแฝงและไม่ใช่คุณสมบัติของ git
หากต้องการจัดเรียงนามแฝงที่ระบุไว้ให้ต่อท้าย| sort
เครื่องหมายอัญประกาศคู่ปิด หรือคุณสามารถ~/.gitconfig
จัดเรียงนามแฝงในการเรียงลำดับ
หากต้องการเพิ่มนามแฝงเป็นนามแฝงทั้งระบบให้แทนที่--global
(สำหรับผู้ใช้ปัจจุบัน) ด้วย--system
(สำหรับผู้ใช้ทั้งหมด) โดยทั่วไปสิ่งนี้จะอยู่ใน/etc/gitconfig
ไฟล์
alias.
จุดเริ่มต้นของแต่ละบรรทัด
fatal: bad config
ฉันให้ได้รับ วิธีแก้ปัญหาของ Git-Extra ใช้งานได้สำหรับฉัน: github.com/tj/git-extras/blob/master/bin/git-alias
git config --global alias.alias "! git config --get-regexp ^alias\."
เช่น ตรวจสอบให้แน่ใจgit version
ว่าคุณใช้คอมไพล์เวอร์ชันปัจจุบัน
$ git config - get-regexp alias
'^alias\.'
git config -e
ใช้ดวงตาของคุณเพื่อค้นหา[alias]
ส่วน แต่แฟน ๆ คอมไพล์เสมอดูเหมือนจะโยนในบิตของสคริปต์ทุบตีหรือการจับคู่นิพจน์ปกติในการแก้ปัญหาของพวกเขาแม้ในขณะที่มันไม่จำเป็น :)
git config -e
แก้ไข.git/config
ไฟล์เท่านั้น ~/.gitconfig
แต่ที่สำคัญที่สุดของนามแฝงของฉันถูกกำหนดในทั่วโลก
git config --global alias.aliases config --get-regexp '^alias\.'"
... แล้วgit aliases
"
แห่ง
ฉันสร้างนามแฝงคอมไพล์ที่เรียกว่า (แปลกพอ) alias
สำหรับวัตถุประสงค์นี้ ... มีประโยชน์ทุกครั้งถ้าคุณใช้นามแฝงมากพอ ...
$ git config --global alias.alias "config --get-regexp ^alias\."
หมายเหตุ regex alias.
ทำให้แน่ใจว่าเส้นเริ่มต้นด้วย
--system
แทนที่จะ--global
เป็นสิ่งที่เป็นเช่นนี้มีประโยชน์มากกว่าในระดับระบบไม่ใช่ระดับผู้ใช้
alias = config --get-regexp ^alias\\.
ของคุณจะต้องมีลักษณะเช่นนี้
git config --global alias.alias "!git config --get-regexp ^alias\. | grep -Po '(?<=alias\.)\S*' | sort"
ทางเลือกอื่น (บางสิ่งบางอย่างที่ฉันจำได้ง่าย):
git config --list | grep alias
alias
นามแฝงได้ครั้งเดียวแล้วลืมไปว่าคุณสร้างมันขึ้นมา
-l
เป็นทางลัดที่สะดวกสบายได้--list
แต่ฉันชอบความคิดในการสร้างชื่อแทนเพื่อแสดงชื่อแทน
git config --list | grep -E '^alias'
ฉันเคยได้ยิน 'bash scripting' หรือไม่? ;)
เกี่ยวกับส่วน 'ไม่จำเป็น' ในความคิดเห็นข้างต้นโดยทั่วไปฉันสร้างหน้าคนอย่างภาพรวมสำหรับนามแฝงของฉัน ทำไมความวุ่นวายทั้งหมด? นั่นไม่ใช่การเติมเต็มจนเกินไปใช่ไหม
อ่านต่อ...
ฉันได้ตั้งคำสั่งเช่นนี้ใน. gitconfig ของฉันแยกจากกันเช่นTAB=TAB:
[alias]
alias1 = foo -x -y --z-option
alias2 = bar -y --z-option --set-something
และเพียงกำหนดนามแฝงอื่นเพื่อ grep TAB=ส่วนหนึ่งของนามแฝงที่กำหนดไว้ (ตัวเลือกอื่น ๆ ทั้งหมดไม่มีแท็บก่อนและหลัง '=' ในคำจำกัดความของพวกเขาเพียงแค่เว้นวรรค)
ความคิดเห็นที่ไม่ได้ต่อท้ายนามแฝงยังมีการTAB=====ต่อท้ายด้วยดังนั้นจึงมีการแสดงความคิดเห็นหลังจาก grepping
เพื่อการรับชมที่ดีขึ้นฉันกำลังส่งออก grep pip ให้น้อยลงเช่นนี้
#.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"
ว่า ' \t=
' TAB=การแข่งขันส่วนหนึ่ง
เพื่อให้ได้ภาพรวมที่ดียิ่งขึ้นเกี่ยวกับนามแฝงที่ฉันมีและเนื่องจากฉันใช้คอนโซล bash ฉันจึงทาสีเอาท์พุตด้วยสีเทอร์มินัล:
la = "!grep '\t=' ~/.gitconfig | sed -e 's/=/^[[0;31m=^[[0m/g' | sed -e 's/#.*/^[[0;32m&^[[0m/g' | less -R"
โดยทั่วไปเช่นเดียวกับข้างต้นเพียงsedการใช้งานจะมีการเพิ่มที่จะได้รับรหัสสีลงในการส่งออก
-R
ธงน้อยเป็นสิ่งจำเป็นที่จะได้รับสีที่แสดงในเวลาน้อย
(เมื่อเร็ว ๆ นี้ฉันพบว่าคำสั่งแบบยาวที่มีแถบเลื่อนใต้หน้าต่างไม่แสดงอย่างถูกต้องบนอุปกรณ์พกพา: ข้อความถูกตัดออกและแถบเลื่อนหายไปง่ายๆนั่นอาจเป็นกรณีที่มีข้อมูลโค้ดสุดท้ายที่นี่เก็บไว้ใน ระวังเมื่อดูที่โค้ดขนาดสั้นในขณะเดินทาง)
ฉันมีนามแฝงครึ่งไมล์ซึ่งปรับให้เหมาะกับความต้องการของฉัน
นอกจากนี้บางส่วนของพวกเขาเปลี่ยนแปลงตลอดเวลาดังนั้นหลังจากความคิดที่ดีที่สุดที่จะมีรายการที่ทันสมัยอยู่ในมือกำลังแยกวิเคราะห์. gitconfig
ข้อความสั้น ๆ **** ตัดตอนมาจากนามแฝง. gitconfig ของฉัน:
# 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
ในเวิร์กสเตชัน linux หรือ mac ของฉันนอกจากนี้ยังมีชื่อแทนเพิ่มเติมอยู่ใน. bashrc ของเรียงลำดับเช่น:
#.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
ด้วยวิธีนี้ไม่จำเป็นต้องพิมพ์git help submodule
ไม่จำเป็นต้องgit h submodule
มีเพียงgh submodule
ทั้งหมดที่จำเป็นในการรับความช่วยเหลือ มันเป็นแค่ตัวละคร แต่คุณพิมพ์บ่อยแค่ไหน?
ฉันใช้สิ่งต่อไปนี้ทั้งหมดแน่นอนด้วยทางลัด ...
นี่เป็นเพียงส่วนบนของหัวของฉัน
ฉันมักจะต้องใช้ git โดยไม่ต้อง gui เนื่องจากคำสั่ง git จำนวนมากไม่ได้ถูกนำไปใช้อย่างเหมาะสมในส่วนหน้าแบบกราฟิกใด ๆ แต่ทุกครั้งที่ฉันให้พวกเขาใช้มันส่วนใหญ่จะเป็นในลักษณะเดียวกัน
ในส่วน 'ไม่ได้ใช้งาน' ที่กล่าวถึงในย่อหน้าสุดท้าย:
ฉันยังไม่พบสิ่งที่เปรียบเทียบกับสิ่งนี้ใน GUI:
sba = show-branch --color=always -a --more=10 --no-name
- แสดงสาขาในพื้นที่และระยะไกลทั้งหมดรวมถึงการกระทำที่มีอยู่ในพวกเขา
ccm = "!git reset --soft HEAD~ && git commit"
- เปลี่ยนข้อความยืนยันล่าสุด
จากมุมมองที่เป็นเรื่องง่ายมากขึ้น
บ่อยแค่ไหนที่คุณพิมพ์git add .
หรือgit commit -am "..."
? ไม่นับแม้แต่ส่วนที่เหลือ ... นำ
สิ่งต่าง ๆ ให้ทำงานเหมือนgit aa
หรือgit ca "..."
ใน windows
หรือใช้นามแฝงทุบตีgaa
/ g aa
หรือgca "..."
/ g ca "..."
ใน linux และใน mac ...
สำหรับความต้องการของฉันมันเป็นเรื่องที่ฉลาดที่ต้องทำเพื่อปรับแต่งคำสั่ง git เช่นนี้ ...
... และสำหรับการใช้งานที่ง่ายขึ้นฉันเพิ่งช่วยตัวเองสำหรับคำสั่งที่ใช้น้อยกว่าดังนั้นฉันไม่จำเป็นต้องปรึกษา man man ทุกครั้ง คำสั่งถูกกำหนดไว้ล่วงหน้าและการค้นหานั้นง่ายที่สุดเท่าที่จะทำได้
ฉันหมายความว่าเราเป็นโปรแกรมเมอร์หลังจากทั้งหมดหรือไม่ การได้รับสิ่งต่าง ๆ เพื่อทำงานเหมือนที่เราต้องการคืองานของเรา
นี่คือภาพหน้าจอเพิ่มเติมซึ่งสามารถใช้งานได้ใน Windows:
la = "!grep '\t=' ~/.gitconfig | less"
TAB
ก่อนทุกคนจริง ๆ=
หรือไม่? ด้วยช่องว่างมันจะไม่ทำงาน ฉันมีช่องว่างในหน้าต่างของฉันด้วย.gitconfig
ตัวเองเมื่อฉันแทนที่ด้วย tabstop เดียว cmd.exe จะทำงานเหมือนที่คาดไว้
การใช้git var
และการกรองเฉพาะรายการที่ขึ้นต้นด้วยalias
:
git var -l | grep -e "^alias"
ตามคำตอบอื่น ๆ ที่กล่าวถึงgit config -l
รายการรายละเอียดการกำหนดค่าทั้งหมดของคุณจากไฟล์กำหนดค่าของคุณ นี่คือตัวอย่างบางส่วนของผลลัพธ์นั้นสำหรับการกำหนดค่าของฉัน:
...
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
...
ดังนั้นเราจึงสามารถพิมพ์บรรทัดนามแฝงโดยใช้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
เราสามารถทำให้สวยกว่านี้โดยเพียงแค่cut
ตัดalias.
ส่วนของแต่ละบรรทัดทิ้งไว้ให้เราด้วยคำสั่งนี้:
git config -l | grep alias | cut -c 7-
สิ่งที่พิมพ์:
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
สุดท้ายอย่าลืมเพิ่มชื่อแทน:
git config --global alias.la "!git config -l | grep alias | cut -c 7-"
สนุก!
สำหรับ windows:
git config --list | findstr "alias"
ผมกล่าวถึงในมิถุนายน 2018 ด้วย " รายการภาพรวม - คอมไพล์คำสั่งที่ใช้มากที่สุด " "การใช้ Git 2.18 --list-cmds=alias
( กระทำ 3301d36 )" ที่carejรายงานในคำตอบของเขา
git --list-cmds=alias
นอกเหนือจากนั้นหรือของgit config --get-regexp alias
คุณสามารถรวมเอาท์พุทของมันด้วยgit help
ซึ่งเอาท์พุทจะเปลี่ยนแปลงด้วย Git 2.14.x / 2.15
"
git help co
" ตอนนี้พูดว่า "co is aliased to ...
" ไม่ใช่ "git co is
"
ดูกระทำ b3a8076 (12 กันยายน 2017) โดยKaartic Sivaraam (sivaraam
)
(รวมโดยJunio C Hamano - gitster
-ในการกระทำ 5079cc8 , 25 กันยายน 2017)
help
: เปลี่ยนข้อความให้แม่นยำยิ่งขึ้นเมื่อผู้ใช้พยายามที่จะใช้
--help
ตัวเลือก '' ในข้อมูลคำสั่ง aliased เกี่ยวกับนามแฝงจะถูกพิมพ์ตามที่แสดงด้านล่าง
$ git co --help
`git co' is aliased to `checkout'
ดูเหมือนจะไม่ถูกต้องเนื่องจากผู้ใช้มีนามแฝงเฉพาะ '
co
' และไม่ใช่ 'git co
'
สิ่งนี้อาจไม่ถูกต้องในกรณีที่ผู้ใช้ใช้นามแฝงเช่น 'tgit
'
$ tgit co --help
`git co' is aliased to `checkout'
เพิ่ม.gitconfig
ภายใต้ของคุณ[alias]
:
aliases = !git config --list | grep ^alias\\. | cut -c 7- | grep -Ei --color \"$1\" "#"
จากนั้นคุณสามารถทำได้
git aliases
- แสดงชื่อแทนทั้งหมดgit aliases commit
- นามแฝงเท่านั้นที่มี "กระทำ"ฉันใช้นามแฝงนี้ในโลกของฉัน~/.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
เพื่อสร้างผลลัพธ์ต่อไปนี้
$ 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
... --> ...
( หมายเหตุ: วิธีนี้ใช้ได้กับฉันในgit bash บน Windowsสำหรับเทอร์มินัลอื่นคุณอาจต้องปรับการหลบหนี )
!git config --get-regexp ^alias\\.
พิมพ์ทุกบรรทัดจากการตั้งค่า git ที่ขึ้นต้นด้วย alias.
sed -e s/^alias.//
ลบออกalias.
จากบรรทัดsed -e s/\\ /\\ $(printf \"\\043\")--\\>\\ /
แทนที่การเกิดขึ้นครั้งแรกของช่องว่างด้วย\\ $(printf \"\\043\")--\\>
(ซึ่งประเมินเป็น#-->
)column -t -s $(printf \"\\043\")
จัดรูปแบบบรรทัดทั้งหมดเป็นตารางคอลัมน์ที่เว้นระยะเท่ากัน อักขระ$(printf \"\\043\")
ที่ประเมินว่า#
ใช้เป็นตัวคั่นsort -k 1
เรียงลำดับบรรทัดทั้งหมดตามค่าในคอลัมน์แรก$ (printf \ "\ 043 \")
นี่พิมพ์อักขระ#
(ฐานสิบหก 043) ซึ่งใช้สำหรับการแยกคอลัมน์ ฉันใช้แฮ็คตัวน้อยนี้เพื่อที่aliases
ว่าชื่อแทนจะไม่มีตัว#
อักษร มิฉะนั้นจะแทนที่#
อักขระเหล่านั้นเมื่อพิมพ์
หมายเหตุ : เปลี่ยนเป็นอักขระอื่นหากคุณต้องการนามแฝงที่มี#
สัญลักษณ์ตามตัวอักษร
มีฟังก์ชั่นในตัวคือ ... ลอง
$ __git_aliases
แสดงชื่อแทนทั้งหมด :)
$
หมายถึงลินุกซ์ทั่วไปขั้วพรอมต์ พิมพ์ส่วนที่เหลือของบรรทัดนี้ลงในเทอร์มินัลดังกล่าวแล้วENTER
รายการชื่อแทนของคุณจะเข้ามา ใช้งานได้ทั้ง Linux และ Windows (git bash) เพราะมันติดตั้งมากับ git (อาจเป็นฟังก์ชั่นที่คอมไพล์ใช้ภายในเพื่อแก้ไขสมนามเมื่อใช้ในบรรทัดคำสั่ง)
หากคุณรู้ชื่อของนามแฝงคุณสามารถใช้--help
ตัวเลือกเพื่ออธิบาย ตัวอย่างเช่น:
$ git sa --help
`git sa' is aliased to `stash'
$ git a --help
`git a' is aliased to `add'
ในฐานะของคอมไพล์ 2.18 คุณสามารถใช้ git --list-cmds=alias
อีกgit
นามแฝง (เรียกว่าalias
) ที่พิมพ์นามแฝง git: เพิ่มสิ่งต่อไปนี้ใน[alias]
ส่วนgitconfig ของคุณ:
[alias]
# lists aliases matching a regular expression
alias = "!f() { git config --get-regexp "^alias.${1}$" ; }; f"
ตัวอย่างการใช้งานให้ชื่อนามแฝงเต็ม (ตรงกับชื่อนามแฝงว่า: ie, ^foobar$
) และแสดงค่าดังนี้:
$ git alias st
alias.st status -s
$ git alias dif
alias.dif diff
หรือให้ regexp ซึ่งแสดงชื่อแทนและค่าที่ตรงกันทั้งหมด:
$ 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}..
Caveats: อ้าง regexp เพื่อป้องกันการขยายตัวของเชลล์ในรูปแบบกลมแม้ว่าจะไม่จำเป็นต้องใช้เทคนิคในกรณีที่ / เมื่อไม่มีไฟล์ที่ตรงกับรูปแบบ นอกจากนี้: regexp ใด ๆ ก็ดียกเว้น^
(เริ่มต้นรูปแบบ) และ$
(สิ้นสุดรูปแบบ) ไม่สามารถใช้; พวกเขาส่อให้เห็น ถือว่าคุณไม่ได้ใช้จากgit-alias
git-extras
นอกจากนี้เห็นได้ชัดว่านามแฝงของคุณจะแตกต่างกัน นี่เป็นเพียงส่วนหนึ่งที่ฉันได้กำหนดค่าไว้ (บางทีคุณอาจพบว่ามันมีประโยชน์เช่นกัน)