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