ตอนนี้ Git มีความสามารถในการเซ็นสัญญาด้วยgit commit -S
ซึ่งยอดเยี่ยม แต่บางครั้งฉันก็ลืมธงcommit
และบางครั้งฉันส่งแพตช์ที่ฉันสมัครด้วยam
และคำสั่งนั้นไม่มีแฟล็กสำหรับลงชื่อ
มีวิธีการเพิ่มลายเซ็นให้กับการกระทำที่บันทึกไว้แล้วหรือไม่?
ตอนนี้ Git มีความสามารถในการเซ็นสัญญาด้วยgit commit -S
ซึ่งยอดเยี่ยม แต่บางครั้งฉันก็ลืมธงcommit
และบางครั้งฉันส่งแพตช์ที่ฉันสมัครด้วยam
และคำสั่งนั้นไม่มีแฟล็กสำหรับลงชื่อ
มีวิธีการเพิ่มลายเซ็นให้กับการกระทำที่บันทึกไว้แล้วหรือไม่?
คำตอบ:
เพิ่มบรรทัดต่อไปนี้หลังจากการส่งแต่ละครั้งที่คุณต้องการลงชื่อ
exec git commit --amend --no-edit -S
นี้จะเรียกใช้คำสั่งนี้หลังจากเลือกแต่ละการกระทำ
วิธีที่ง่ายกว่าในการทำเช่นนี้คือ:
git rebase --exec 'git commit --amend --no-edit -n -S' -i development
รีบูตทุกสิ่งจนถึงการพัฒนา (หรือแฮชใด ๆ ) และคุณไม่จำเป็นต้องคัดลอกวางหลังจากกระทำทุกครั้ง
resign = "!re() { git rebase --exec 'git commit --amend --no-edit -n -S' -i $1; }; re"
จะกลายเป็นgit resign HASH
git commit --amend --no-edit -n -S
เพียงแค่เรียกใช้
git push --force
หรือไม่?
การเซ็นชื่อคอมมิชชันเปลี่ยนแปลงเนื้อหาของมันดังนั้นการคอมมิทชั่นล่าสุดขึ้นอยู่กับว่ามันจะเปลี่ยนแฮช
หากคุณเพียงแค่ต้องการที่จะเซ็นสัญญากระทำล่าสุดgit commit -S --amend
จะทำงาน
ผมใช้git rebase -i --root
(ดูการเขียนใหม่ประวัติ ) และเปลี่ยนไปpick
edit
จากนั้นฉันก็ใช้git commit -S --amend --no-edit && git rebase --continue
(บน Windows)สำหรับแต่ละการกระทำ
นี่คือการเซ็นชื่อด้วยตนเองสำหรับแต่ละการกระทำ ฉันหวังว่าเราจะพบทางออกที่ดีกว่า
หากคุณต้องการกรองเฉพาะการคอมมิทและลงนามเท่านั้นคุณสามารถใช้filter-branch
:
git filter-branch --commit-filter 'if [ "$GIT_COMMITTER_EMAIL" = "user@domain.com" ];
then git commit-tree -S "$@";
else git commit-tree "$@";
fi' HEAD
สิ่งนี้มีประโยชน์หากด้วยเหตุผลบางอย่างคุณต้องการลงชื่อเฉพาะการกระทำของคุณเอง
หากคุณต้องการให้ GPG เซ็นสัญญาทั้งหมดกระทำตั้งแต่กระทำที่เฉพาะเจาะจงในสาขาปัจจุบันคุณสามารถใช้สิ่งต่อไปนี้แทน:
git filter-branch --commit-filter 'git commit-tree -S "$@";' <COMMIT>..HEAD
ที่ไหน<COMMIT>
เป็นกระทำ ID (เช่นabc123e5
)
สิ่งนี้มีประโยชน์เพิ่มเติมที่จะไม่ส่งผลกระทบต่อข้อมูลเมตาที่กระทำ (รวมถึงวันที่ส่งข้อมูล)
หากคุณต้องการหยุดรับข้อความแสดงข้อความรหัสผ่าน GPG ของคุณในทุกการกระทำโปรดดูคำตอบนี้: https://askubuntu.com/a/805550
หมายเหตุ: การเปลี่ยนจากgpg
เป็นการgpg2
เซ็นชื่อ GIT คุณจะต้องนำเข้าคีย์ส่วนตัวใน GPG 2 อีกครั้ง
git config commit.gpgsign true
สำหรับบันทึกที่คุณสามารถบอกคอมไพล์เสมอลงชื่อกระทำผ่านการกำหนดค่า: