เมื่อระบุชื่อสาขาในพื้นที่ / ระยะไกลฉันจะรับแฮชของคอมมิตที่สาขานี้ชี้ไปได้อย่างไร
เมื่อระบุชื่อสาขาในพื้นที่ / ระยะไกลฉันจะรับแฮชของคอมมิตที่สาขานี้ชี้ไปได้อย่างไร
คำตอบ:
คำสั่งgit rev-parseคือเพื่อนของคุณเช่น:
$ git rev-parse development
17f2303133734f4b9a9aacfe52209e04ec11aff4
... หรือสำหรับสาขาการติดตามระยะไกล:
$ git rev-parse origin/master
da1ec1472c108f52d4256049fe1f674af69e785d
โดยทั่วไปคำสั่งนี้มีประโยชน์มากเนื่องจากสามารถแยกวิเคราะห์วิธีการระบุชื่อสาขาgitได้เช่น:
git rev-parse master~3
git rev-parse HEAD@{2.days.ago}
... ฯลฯ
fooคุณสามารถทำได้:git log --pretty=format:'%H'
def BranchHash = sh "git rev-parse ${BRANCH-NAME}ฉันได้รับ: fatal: ambiguous argument 'HEAD': unknown revision or path not in the working tree.. เกิดอะไรขึ้น?
แฮชจะถูกเก็บไว้ภายใต้.git/refs/เช่น.git/refs/heads/master
แต่ใช้ทางโปรแกรมgit rev-parseตามคำแนะนำของ Mark Longair เพราะปลอดภัยกว่า
อย่าลืมว่าตั้งแต่ Git 2.19 (Q2 2018) Git เตรียมการเปลี่ยนจากแฮช SHA1 เป็น SHA2: ดู " ทำไม Git จึงไม่ใช้ SHA ที่ทันสมัยกว่านี้ "
ด้วย Git 2.25 (ไตรมาสที่ 1 ปี 2020) git rev-parseจะพัฒนาและสะท้อนให้เห็นถึงแฮชใหม่ที่เป็นไปได้
ดูกระทำ fa26d5e , กระทำ cf02be8 , กระทำ 38ee26b , กระทำ 37ab8eb , กระทำ 0370b35 , กระทำ 0253e12 , กระทำ 45e2ef2 , กระทำ 79b0edc , กระทำ 840624f , กระทำ 32a6707 , กระทำ 440bf91 , กระทำ 0b408ca , กระทำ 2eabd38 (28 ตุลาคม 2019) และกระทำ 1bcef51 , กระทำ ecde49b (05 ต.ค. 2019) โดยbrian m. คาร์ลสัน ( bk2204) .
(ผสานโดยJunio C Hamano - gitster-ในการกระทำ 28014c1, 10 พ.ย. 2019)
rev-parse: เพิ่ม--show-object-formatตัวเลือกลงนามโดย: brian m. คาร์ลสัน
เพิ่มตัวเลือกในการพิมพ์รูปแบบวัตถุที่ใช้สำหรับอินพุตเอาต์พุตหรือที่เก็บข้อมูล
สิ่งนี้ช่วยให้เชลล์สคริปต์ค้นพบอัลกอริทึมแฮชที่ใช้อยู่
เนื่องจากแผนการเปลี่ยนแปลงอนุญาตให้มีอัลกอริทึมการป้อนข้อมูลหลายรายการเอกสารที่เราอาจให้ผลลัพธ์หลายรายการสำหรับการป้อนข้อมูลและรูปแบบที่ผลลัพธ์อาจใช้
แม้ว่าเราจะไม่สนับสนุนสิ่งนี้ในตอนนี้ แต่การจัดทำเอกสารไว้ แต่เนิ่นๆหมายความว่าผู้เขียนสคริปต์สามารถพิสูจน์สคริปต์ของตนได้ในอนาคตเมื่อเราทำ
git rev-parseเอกสารในขณะนี้รวมถึง:
--show-object-format[=(storage|input|output)]:
แสดงรูปแบบอ็อบเจ็กต์ (อัลกอริทึมแฮช) ที่ใช้สำหรับที่เก็บสำหรับการจัดเก็บภายใน
.gitไดเร็กทอรีอินพุตหรือเอาต์พุต สำหรับการป้อนข้อมูลอาจมีการพิมพ์อัลกอริทึมหลายรายการโดยแยกช่องว่าง หากไม่ได้ระบุไว้ค่าเริ่มต้นคือ "ที่เก็บข้อมูล"
ด้วย Git 2.29 (ไตรมาสที่ 4 ปี 2020) คุณสามารถตรวจสอบได้ว่าคุณต้องใช้รูปแบบใดในการอ่านค่าคอมมิตแฮชของสาขา (หรือวัตถุอื่น ๆ )
ดูกระทำ e023ff0 , กระทำ 4feb562 , กระทำ 8a06d56 , กระทำ c49fe07 , กระทำ 02a32db , กระทำ ceaa4b3 , กระทำ eff45da , กระทำ b5b46d7 , กระทำ c5aecfc , กระทำ e74b606 , กระทำ 439d3a1 , กระทำ 6c2adf8 , กระทำ de5737c , กระทำ e0a646e , กระทำ 6ff6a67 , กระทำ 831279d , กระทำ b6e5005 , กระทำ 287bb3a , กระทำ 22f1824 , กระทำ db00af9 ,คอมมิต 7187eb1 , คอมมิต 98de0b2 , คอมมิต a5587b8 , คอมมิต 66b6d43 , คอมมิต 2197f87 , คอมมิต c0b65ea , คอมมิต d62607d , คอมมิต d482c23 , คอมมิต 866be6e , คอมมิต 4bacb6d , คอมมิต 252a4ee , คอมมิต 368f3cb , คอมมิต c0b65ea , คอมมิต d62607d , คอมมิต d482c23 , คอมมิต 866be6e , คอมมิต 4bacb6d , คอมมิท 252a4ee , คอมมิต 368f3cb , คอมมิต c0b65ea , คอมมิต d62607d , คอมมิต d482c23 , คอมมิต 866be6e , คอมมิต 4bacb6d , คอมมิต 252a4ee , คอมมิต 368f3cb , คอมมิต abe3dbc3 , คอมมิต , กระทำ 094a685 (29 ก.ค. 2563) โดยbrian m. คาร์ลสัน ( bk2204) .
ดูกระทำ 800e6a7 (29 กรกฎาคม 2020) โดยโยฮันเน Schindelin (dscho )
(ผสานโดยJunio C Hamano - gitster-ในการกระทำ e0ad957 , 11 ส.ค. 2020)
docs: เพิ่มเอกสารสำหรับextensions.objectFormatลงนามโดย: brian m. คาร์ลสัน
บทวิจารณ์โดย: Eric Sunshine
บันทึกการ
extensions.objectFormatตั้งค่าการกำหนดค่า
เตือนผู้ใช้อย่าแก้ไขเอง
git configตอนนี้รวมอยู่ในหน้าคน :
extensions.objectFormatระบุอัลกอริทึมแฮชที่จะใช้
ค่าที่ยอมรับได้และ>
sha1หากไม่ระบุจะถือว่า เป็นข้อผิดพลาดในการระบุคีย์นี้เว้นแต่จะเป็น 1sha256sha1core.repositoryFormatVersionโปรดทราบว่าการตั้งค่านี้ควรจะกำหนดโดยหรือ
git initการพยายามเปลี่ยนหลังจากเริ่มต้นใช้งานไม่ได้และจะทำให้เกิดปัญหาที่ยากต่อการวินิจฉัยgit clone
เพื่อความชัดเจนด้วย Git 2.29 (ไตรมาสที่ 4 ปี 2020) การสนับสนุน SHA-256 ล่าสุดถูกทำเครื่องหมายว่าเป็นการทดลองในเอกสาร
ดูกระทำ ff233d8 (16 สิงหาคม 2020) โดยมาร์ติน Agren (none )
(ผสานโดยJunio C Hamano - gitster-ในการกระทำ d1ff741 , 24 ส.ค. 2020)
Documentation: ทำเครื่องหมาย--object-format=sha256ว่าเป็นการทดลองลงนามโดย: Martin Ågren
หลังจากeff45daab8 ("
repository: เปิดใช้งานการสนับสนุน SHA-256 โดยค่าเริ่มต้น", 2020-07-29, Git v2.29.0 - รวมอยู่ในชุดที่ 6 ) การสร้างวานิลลาของ Git ทำให้ผู้ใช้สามารถเรียกใช้เช่นgit init --object-format=sha256และแฮ็กไป
นี่อาจเป็นวิธีที่ดีในการได้รับประสบการณ์กับโลก SHA-256 เช่นค้นหาจุดบกพร่องGIT_TEST_DEFAULT_HASH=sha256 make testไม่เห็น
แต่มันเป็นโลกที่แยกจากกันจริงๆrepos SHA-256 ดังกล่าวจะอยู่แยกจากชุด repos SHA-1 (ตอนนี้ค่อนข้างใหญ่มาก)
โดยหลักการแล้วการโต้ตอบข้ามพรมแดนเป็นไปได้เช่นผ่าน "diff+apply" (หรือ "format-patch+am") แต่ถึงแม้จะมีข้อ จำกัด : การใช้ SHA-256 จะแตกต่างกันในการ repo SHA-1 ในกรณีง่ายๆ แต่ถ้าคุณ ต้องหันไป-3คุณโชคไม่ดีในทำนองเดียวกัน "
push+pull" ควรใช้งานได้ แต่จริงๆแล้วคุณจะได้รับการชดเชยจากส่วนที่เหลือของโลกเป็นส่วนใหญ่ นั่นอาจจะเป็นไปได้เมื่อคุณเริ่มต้นที่เก็บข้อมูลของคุณและอาจใช้เวลาหลายเดือนหลังจากนั้น แต่อาจมีสักวันที่คุณเริ่มรู้สึกเสียใจกับการใช้[git init --object-format = sha256](https://github.com/git/git/blob/ff233d8dda12657a90d378f2b403bc6c85838c59/Documentation/git-init.txt#L52)<sup>([man](https://git-scm.com/docs/git-init#Documentation/git-init.txt---object-formatltformatgt))</sup>และมี ขุดตัวเองลงไปในหลุมที่ค่อนข้างลึกขณะนี้มีหัวข้อต่างๆในการจัดทำเอกสารรูปแบบข้อมูลและโปรโตคอลของเราเกี่ยวกับ SHA-256 และในบางกรณี (กลางและกราฟคอมมิต) เรากำลังพิจารณาปรับวิธีการจัดรูปแบบไฟล์เพื่อระบุรูปแบบวัตถุที่จะใช้
ไม่ว่า
--object-formatจะอยู่ที่ใดในเอกสารของเราขอให้ชัดเจนว่าการใช้กับ "sha256" เป็นการทดลอง
หากเราต้องการอธิบายในภายหลังว่าเหตุใดเราจึงไม่สามารถจัดการกับข้อมูลที่เราสร้างขึ้นในปี 2020 ได้เราสามารถชี้ไปที่ย่อหน้านี้ที่เราเพิ่มไว้ที่นี่ได้เสมอโดย "รวม ::" - ในการแจ้งเตือนเล็กน้อยเราควรจะสามารถทำให้สอดคล้องกันตลอดทั้งเอกสารและในที่สุดก็ค่อยๆลดความรุนแรงของข้อความนี้ลงได้
วันหนึ่งเราอาจใช้มันเพื่อเริ่มการยุติ--object-format=sha1แต่อย่าล้ำหน้าตัวเอง ...นอกจากนี้ยัง
extensions.objectFormatมีการพูดถึงสามครั้งเท่านั้น สองครั้งที่เราเพิ่มข้อจำกัดความรับผิดชอบใหม่นี้และในจุดที่สามเรามีคำเตือน "ห้ามแก้ไข" อยู่แล้ว จากนั้นผู้อ่านที่สนใจควรจะพบสิ่งใหม่ที่เรากำลังเพิ่มเข้ามาในที่สุดเนื่องจาก
GIT_DEFAULT_HASHเป็นจุดเริ่มต้นอื่นของฟังก์ชันนี้ให้บันทึกลักษณะการทดลองของฟังก์ชันนี้ด้วย
gitตอนนี้รวมอยู่ในหน้าคน :
ถูกใช้แทน ค่าเริ่มต้นคือ "sha1" ตัวแปรนี้เป็นแบบทดลอง! ดู
--object-formatในgit init.
object-format-disclaimerตอนนี้รวมอยู่ในหน้าคน :
ตัวเลือกนี้เป็นแบบทดลอง!
การสนับสนุน SHA-256 อยู่ในช่วงทดลองและยังอยู่ในขั้นเริ่มต้นโดยทั่วไปที่เก็บ SHA-256 จะไม่สามารถ> แชร์งานกับที่เก็บ SHA-1 "ปกติ" ได้
ควรสันนิษฐานว่าเช่นรูปแบบไฟล์ภายใน Git ที่สัมพันธ์กับที่เก็บ SHA-256 อาจเปลี่ยนไปในรูปแบบที่เข้ากันไม่ได้
ใช้--object-format=sha256เพื่อการทดสอบเท่านั้น
Git 2.29 (Q4 2020) เดียวกันตรวจสอบให้แน่ใจว่า " git clone" ( man )จะทำงานเมื่อหนึ่งโคลนจากที่เก็บ SHA-1 ในขณะที่GIT_DEFAULT_HASHตั้งค่าให้ใช้ SHA-256 แล้ว
ก่อน 2.29 ส่งผลให้มีที่เก็บที่ใช้ไม่ได้ซึ่งครึ่งหนึ่งอ้างว่าเป็นที่เก็บ SHA-256 ที่มีอ็อบเจ็กต์ SHA-1 และการอ้างอิง
สิ่งนี้ได้รับการแก้ไขแล้ว
ดูการกระทำ 47ac970 (20 ก.ย. 2020) โดยbrian m. คาร์ลสัน ( bk2204) .
(รวมโดยJunio C Hamano - gitster-ในการกระทำ b28919c , 29 กันยายน 2020)
builtin/clone: หลีกเลี่ยงความล้มเหลวด้วยGIT_DEFAULT_HASHรายงานโดย: Matheus Tavares
Signed-off-by: brian m. คาร์ลสัน
หากผู้ใช้กำลังโคลนที่เก็บ SHA-1 โดย
GIT_DEFAULT_HASHตั้งค่าเป็น "sha256" เราสามารถลงเอยด้วยที่เก็บที่เวอร์ชันรูปแบบที่เก็บเป็น 0 แต่extensions.objectformatคีย์ถูกตั้งค่าเป็น "sha256"
สิ่งนี้ผิด (ผู้ใช้มีที่เก็บ SHA-1) และไม่ทำงาน (เนื่องจากไม่สามารถใช้ส่วนขยายในที่เก็บ v0 ได้)สิ่งนี้เกิดขึ้นเนื่องจากในโคลนเราตั้งค่าที่เก็บไว้ในตอนแรกจากนั้นเปลี่ยนอัลกอริทึมตามสิ่งที่ด้านระยะไกลบอกเราว่ากำลังใช้
ในตอนแรกเราได้ตั้งค่าที่เก็บเป็น SHA-256 ในกรณีนี้จากนั้นให้รีเซ็ตเวอร์ชันที่เก็บในภายหลังโดยไม่ต้องล้างส่วนขยายเราสามารถตั้งค่าส่วนขยายได้เสมอในกรณีนี้ แต่นั่นหมายความว่าที่เก็บ SHA-1 ของเราไม่สามารถใช้งานร่วมกับ Git เวอร์ชันเก่าได้แม้ว่าจะไม่มีเหตุผลว่าทำไมจึงไม่ควรเป็น
และเราไม่ต้องการเริ่มต้นที่เก็บเป็น SHA-1 ในตอนแรกเนื่องจากนั่นหมายความว่าหากเรากำลังโคลนที่เก็บว่างเราจะล้มเหลวในการให้เกียรติGIT_DEFAULT_HASHตัวแปรและจะจบลงด้วยที่เก็บ SHA-1 ไม่ใช่ ที่เก็บ SHA-256สิ่งเหล่านี้ไม่น่าสนใจดังนั้นลองบอกรหัสการเริ่มต้นที่เก็บหากเรากำลังสร้างใหม่เช่นนี้และถ้าเป็นเช่นนั้นเพื่อล้างส่วนขยายหากเราใช้ SHA-1
สิ่งนี้ทำให้แน่ใจว่าเราสร้างที่เก็บที่ถูกต้องและใช้งานได้และไม่ทำลายกรณีการใช้งานอื่น ๆ ของเรา