การตั้งค่าแฟล็กเริ่มต้น git บนคำสั่ง


89

ฉันต้องการทราบว่ามีวิธีตั้งค่าสถานะโดยค่าเริ่มต้นสำหรับคำสั่ง git หรือไม่ โดยเฉพาะผมต้องการที่จะตั้ง--abbrev-commitธงเพื่อที่ว่าเมื่อการดำเนินการผมต้องการที่จะดำเนินการgit loggit log --abbrev-commit

ซึ่งแตกต่างจากคำถาม " มีวิธีใดในการตั้งค่าแฟล็กโดยค่าเริ่มต้นสำหรับคำสั่ง git หรือไม่ " ดูเหมือนจะไม่มีแฟล็กการกำหนดค่าสำหรับการเพิ่ม --ab ย่อ - คอมมิตในบันทึกคอมไพล์ นอกจากนี้คู่มือคอมไพล์ระบุว่าฉันไม่สามารถสร้างนามแฝง: "เพื่อหลีกเลี่ยงความสับสนและปัญหาเกี่ยวกับการใช้สคริปต์นามแฝงที่ซ่อนคำสั่ง git ที่มีอยู่จะถูกละเว้น"

ตัวเลือกที่สามของฉันคือการสร้างนามแฝงใหม่เช่นglog=log --abbrev-commitในไฟล์. gitconfig ของฉัน แต่ฉันไม่อยากประดิษฐ์ DSL ของตัวเองด้วยคำสั่งใหม่ ๆ

มีวิธีอื่นในการบรรลุเพื่อให้abbrev-commitตั้งค่าสถานะเป็นค่าเริ่มต้นหรือไม่?


1
เนื่องจาก git 1.7.6 มีการตั้งค่าสถานะเพื่อควบคุมพฤติกรรมนี้ ดูคำตอบโดย @underrun ด้านล่าง
slacy

คำตอบ:


60

ตั้งแต่ git เวอร์ชัน 1.7.6 git config ได้รับอ็อพชัน log.ab BriefCommit ซึ่งสามารถตั้งค่าเป็น true ดังนั้นคำตอบคืออัปเกรดเป็นอย่างน้อย 1.7.6 (ปัจจุบัน ณ การเขียนนี้คือ 1.7.11.4) และใช้:

git config --global log.abbrevCommit true

3
อย่าคิดว่ามีตัวเลือกสำหรับออนไลน์?
Zaz

1
ฉันยอมรับคำตอบนี้ ยินดีที่ได้เห็น Git เพิ่มการกำหนดค่านี้ตั้งแต่ฉันเขียนคำถามเมื่อเกือบสี่ปีที่แล้ว
Jesper Rønn-Jensen

ที่มาของตัวเลือกลึกลับเหล่านี้อยู่ที่ไหน?
xaxxon

ใครทราบค่าสถานะเริ่มต้นสำหรับกราฟ หาไม่เจอในเพจ @xaxxon linked ..
myol

@myol คุณควรใช้git config --helpหรือgit help configจะได้รับเอกสารที่ตรงกับการติดตั้ง
doak

46

คุณสามารถใช้รูปแบบที่กำหนดเองเพื่อgit logเลียนแบบ--abbrev-commitโดยค่าเริ่มต้น:

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

เยี่ยมมากนี่เป็นคำตอบที่ดีที่สุดอย่างง่ายดาย
duane

คุณยังสามารถใช้สีในขณะจัดรูปแบบ: "% C (yellow)% h% Creset% s" จะนำเสนอเหมือนบันทึกคอมไพล์ --oneline ที่มีสี
Avner

1
ตอนนี้เป็นคำถามสั้น ๆ : หากคุณพบว่าสิ่งนี้มีประโยชน์และคำตอบนี้ตรงกับปัญหาทำไมคุณไม่ทำเครื่องหมายว่าถูกต้อง
igorsantos07

1
วิธีนี้จะดีกว่าถ้าคุณไม่ต้องการจำนามแฝงที่คลุมเครือหรือจำยากและต้องการใช้ "git log" ตลอดเวลา
Shyam Habarakada

1
นี่เป็นคำตอบที่ดีที่สุดสำหรับฉัน การlog.abbrevCommitตั้งค่านี้ส่งผลต่อรูปแบบ verbose อื่น ๆ ซึ่งฉันไม่ชอบ นอกจากนี้ใช้%C(auto)%h %sเพื่อรับรูปแบบออนไลน์ปกติพร้อมการระบายสีอัตโนมัติ ฉันใช้git config --global format.pretty "%C(auto)%h %d %s"เพราะต้องการตกแต่ง oneline เป็น "ค่าเริ่มต้น" ของฉัน
davenpcj

34

ไม่มีกลไกทั่วไปใน git เพื่อตั้งค่าอาร์กิวเมนต์เริ่มต้นสำหรับคำสั่ง

คุณสามารถใช้นามแฝง gitเพื่อกำหนดคำสั่งใหม่ด้วยอาร์กิวเมนต์ที่ต้องการ:

git config alias.lg "log --oneline"

git lgจากนั้นคุณสามารถเรียกใช้

บางคำสั่งยังมีการกำหนดค่าการตั้งค่าเพื่อเปลี่ยนพฤติกรรม


12
ฉันต้องการหลีกเลี่ยงการสร้างไวยากรณ์ของตัวเองดังนั้นฉันต้องการวิธีแก้ปัญหาที่ฉันไม่ได้ใช้git lgแต่git log
Jesper Rønn-Jensen

ทำไม? มันจะสร้างความแตกต่างอะไร
hasen

46
ข้อแตกต่างที่สำคัญมากคือฉันไม่ต้องการแนะนำ "Jespers git syntax" ในระบบของฉัน ฉันต้องการให้ฉัน (และคนอื่น ๆ ที่ใช้เครื่องของฉัน) ใช้คำสั่งทั่วไป นอกจากนี้สิ่งนี้จะทำให้การทำงานของฉันเร็วขึ้นในเครื่องอื่น: ฉันไม่ต้องกังวลว่าจะพิมพ์ "git lg" โดยไม่ได้ตั้งใจและได้รับข้อผิดพลาด "ไม่พบ"
Jesper Rønn-Jensen

19
หากมีคนอื่นใช้เครื่องของคุณและพิมพ์บันทึก git วิธีแก้ปัญหาของคุณหมายความว่าพวกเขาจะได้รับผลลัพธ์ที่พวกเขาไม่คาดคิด
Abizern

1
การกำหนดนามแฝงมาตรฐานใหม่สามารถทำลายสคริปต์ได้
justintime

10

VonC ได้บอกใบ้เชลล์ wrapper ในคำตอบของเขาแล้ว นี่คือการนำ Bash ของฉันไปใช้กับ wrapper ดังกล่าว หากคุณใส่สิ่งนี้ลงในของ.bashrcคุณเชลล์แบบโต้ตอบของคุณจะรองรับการลบล้างคำสั่งในตัว Git เช่นเดียวกับนามแฝงตัวพิมพ์ใหญ่

# 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
} 

จากนั้นคุณสามารถลบล้างได้git logโดยใส่สคริปต์ที่มีชื่อgit-logลงในเส้นทางของคุณ:

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


7

ฉันมีปัญหาที่คล้ายกัน (ตัวเลือกเริ่มต้นจำนวนมากสำหรับคำสั่ง Git นั้นโง่) นี่คือแนวทางของฉัน สร้างสคริปต์ชื่อ 'grit' (หรืออะไรก็ได้) บนเส้นทางของคุณดังนี้:

#!/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

ตรงไปตรงมามากในการอ่านและดูแลรักษาในกรณีที่คุณต้องการแบ่งปันกับ Bash ที่ไม่ใช่ผู้เชี่ยวชาญ


คุณต้องการให้ "git remote blah" เรียก "git branch blah" หรือไม่? ฉันใช้ตัวแปรนี้โดยที่ฉันใส่ git ไว้ก่อนหน้านี้ในพา ธ จากนั้นเรียก / usr / bin / git ในสคริปต์ของฉันอย่างชัดเจน ใช่นี่อาจจะทำลายบางอย่าง
LovesTha

1
ฉันชอบสิ่งนี้และทำการปรับแต่งเพิ่มเติมสองอย่าง ฉันทำให้มันเป็นฟังก์ชันทุบตีและปล่อยให้มันตั้งชื่อgitthegit=`/usr/bin/which git`โดยการเพิ่มบรรทัดแรกจะได้รับเส้นทางคำสั่งจริง: และฉันได้เพิ่มตัวเลือกในการยกเลิกการแทนที่ด้วย x ก่อนคำสั่งเช่นgit x log ...: if [ "$cmd" = "x" ]; then; $thegit $@.
Joshua Goldberg

0

ทุกยูทิลิตี้ที่เราใช้ (svn, maven, git, ... ) จะถูกห่อหุ้มในรูปแบบ. bat (บน Windows หรือ. sh บน Unix) เสมอเพื่อให้นักพัฒนาของเรามีไดเร็กทอรีเดียวเพื่อเพิ่มเส้นทางของพวกเขา

หากคอมไพล์ถูกห่อหุ้มในสคริปต์ wrapper แสดงว่า ... ทุกอย่างเป็นไปได้

แต่นั่นยังคงเป็นโซลูชันที่เชื่อมโยงกับการตั้งค่าของผู้ใช้ไม่ได้เชื่อมโยงกับ Git เองหรือ git repo


คุณหมายความว่าฉันควรจะทำได้โดยเพิ่มนามแฝงใน. bash_profile ของฉัน?
Jesper Rønn-Jensen

@Jesper: นั่นคือแนวคิดเนื่องจาก wrapper git.bat ของคุณจะสามารถตรวจจับคำสั่ง Git ที่คุณต้องการดำเนินการและสามารถเพิ่มตัวเลือกใดก็ได้ที่ต้องการ
VonC
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.