ฉันจะพิมพ์รายการนามแฝง git ของฉันได้อย่างไรเช่นมีบางสิ่งที่คล้ายคลึงกับaliasคำสั่งbash
ฉันจะพิมพ์รายการนามแฝง git ของฉันได้อย่างไรเช่นมีบางสิ่งที่คล้ายคลึงกับaliasคำสั่งbash
คำตอบ:
คำตอบนี้สร้างเมื่อคำตอบโดยจอห์นนี่ ซึ่งจะใช้ถ้าคุณไม่ได้ใช้จากgit-aliasgit-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-aliasgit-extras
นอกจากนี้เห็นได้ชัดว่านามแฝงของคุณจะแตกต่างกัน นี่เป็นเพียงส่วนหนึ่งที่ฉันได้กำหนดค่าไว้ (บางทีคุณอาจพบว่ามันมีประโยชน์เช่นกัน)