เริ่มต้นด้วย Git เวอร์ชั่น 2.5+ (Q2 2558) การดึงการคอมมิทครั้งเดียว (โดยไม่ต้องโคลน repo เต็ม) เป็นไปได้จริง
ดูคอมมิชชัน 687668โดยFredrik Medley ( moroten
) , 21 พฤษภาคม 2558
(ผสานโดยJunio C Hamano - gitster
-ในการกระทำ a9d3493 , 01 Jun 2015)
ตอนนี้คุณมีการกำหนดค่าใหม่ (ด้านเซิร์ฟเวอร์)
uploadpack.allowReachableSHA1InWant
อนุญาตให้upload-pack
ยอมรับคำขอดึงข้อมูลที่ขอให้วัตถุที่สามารถเข้าถึงได้จากเคล็ดลับอ้างอิงใด ๆ อย่างไรก็ตามโปรดทราบว่าการคำนวณการเข้าถึงวัตถุมีราคาแพง
เริ่มfalse
ต้นที่
หากคุณรวมการกำหนดค่าฝั่งเซิร์ฟเวอร์นั้นเข้ากับตื้นตื้น ( git fetch --depth=1
) คุณสามารถขอคำสั่งเดียว (ดูt/t5516-fetch-push.sh
:
git fetch --depth=1 ../testrepo/.git $SHA1
คุณสามารถใช้git cat-file
คำสั่งเพื่อดูว่าการกระทำได้รับการดึง:
git cat-file commit $SHA1
" git upload-pack
" ที่ทำหน้าที่ " git fetch
" สามารถบอกได้ว่าให้บริการการกระทำที่ไม่ได้อยู่ที่ปลายอ้างอิงใด ๆ ตราบใดที่สามารถเข้าถึงได้จากการอ้างอิงด้วยuploadpack.allowReachableSHA1InWant
ตัวแปรการกำหนดค่า
เอกสารฉบับเต็มคือ:
upload-pack
: อนุญาตให้เรียก sha1 ที่เข้าถึงได้
ด้วยuploadpack.allowReachableSHA1InWant
การตั้งค่าตัวเลือกการกำหนดค่าที่ฝั่งเซิร์ฟเวอร์ " git fetch
" สามารถสร้างคำขอด้วยบรรทัด "ต้องการ" ที่ตั้งชื่อวัตถุที่ไม่ได้โฆษณา (น่าจะได้รับมาจากแบนด์หรือจากตัวชี้ submodule)
เฉพาะวัตถุที่สามารถเข้าถึงได้จากเคล็ดลับสาขาเช่นสหภาพของสาขาที่โฆษณาและสาขาที่ถูกซ่อนtransfer.hideRefs
จะถูกประมวลผล
โปรดทราบว่ามีค่าใช้จ่ายที่เกี่ยวข้องในการเดินย้อนประวัติเพื่อตรวจสอบความสามารถในการเข้าถึง
คุณลักษณะนี้สามารถนำมาใช้เมื่อได้รับเนื้อหาของบางอย่างกระทำที่ sha1 เป็นที่รู้จักกันโดยไม่จำเป็นต้องของโคลนที่เก็บทั้งที่โดยเฉพาะอย่างยิ่งถ้าตื้นดึงข้อมูลถูกนำมาใช้
กรณีที่มีประโยชน์เช่น
- ที่เก็บที่มีไฟล์ขนาดใหญ่ในประวัติศาสตร์
- การดึงข้อมูลที่จำเป็นสำหรับการชำระเงินแบบ submodule เท่านั้น
- เมื่อแชร์ sha1 โดยไม่บอกสาขาที่แน่นอนว่ามันเป็นของและใน Gerrit ถ้าคุณคิดในแง่ของการกระทำแทนที่จะเปลี่ยนหมายเลข
(กรณี Gerrit ได้รับการแก้ไขแล้วallowTipSHA1InWant
เนื่องจากการเปลี่ยนแปลงของ Gerrit ทุกครั้งมีการอ้างอิง)
Git 2.6 (ไตรมาสที่ 3 ปี 2558) จะปรับปรุงรูปแบบดังกล่าว
ดูกระทำ 2bc31d1 , กระทำ cc118a6 (28 กรกฎาคม 2015) โดยเจฟฟ์คิง (peff
)
(รวมโดยJunio C Hamano - gitster
-ในการกระทำ 824a0be , 19 สิงหาคม 2015)
refs
: สนับสนุนลบ transfer.hideRefs
หากคุณซ่อนลำดับชั้นของการอ้างอิงโดยใช้การตั้งค่าtransfer.hideRefs
จะไม่มีวิธีใดที่จะแทนที่การกำหนดค่าในภายหลังเพื่อ "เลิกซ่อน"
แพทช์นี้ใช้การซ่อน "เชิงลบ" ซึ่งทำให้การจับคู่ถูกทำเครื่องหมายว่าไม่ถูกซ่อนทันทีแม้ว่าแมทช์อื่นจะซ่อน
เราดูแลเพื่อนำไปใช้ในการแข่งขันย้อนกลับการสั่งซื้อจากวิธีที่พวกเขาถูกเลี้ยงให้เราโดยการกำหนดค่าเครื่องจักรที่เป็นปกติที่ช่วยให้ "หนึ่งในชัยชนะที่ผ่านมา" การทำงานของเราตั้งค่าลำดับความสำคัญ (และรายการใน.git/config
ตัวอย่างเช่นจะแทนที่/etc/gitconfig
)
ดังนั้นคุณสามารถทำได้:
git config --system transfer.hideRefs refs/secret
git config transfer.hideRefs '!refs/secret/not-so-secret'
เพื่อซ่อนrefs/secret
ใน repos ทั้งหมดยกเว้นบิตสาธารณะหนึ่งรายการใน repo หนึ่งรายการ
Git 2.7 (พ.ย. / ธ.ค. 2015) จะปรับปรุงอีกครั้ง:
ดูกระทำ 948bfa2 , กระทำ 00b293e (5 พฤศจิกายน 2015) กระทำ 78a766a , กระทำ 92cab49 , กระทำ 92cab49 , กระทำ 92cab49 (3 พฤศจิกายน 2015) กระทำ 00b293e , กระทำ 00b293e (5 พฤศจิกายน 2015) และกระทำ 92cab49 , กระทำ 92cab49 , กระทำ 92cab49 , กระทำ 92cab49 (3 พฤศจิกายน 2015) โดยLukas Fleischer (lfos
)
ช่วยโดย: เอริคซันไชน์ (sunshineco
)
(ผสานโดยJeff King - peff
- in dbba85e , 20 พ.ย. 2558)
config.txt
: จัดทำเอกสารความหมายของhideRefs
ด้วย namespaces
ตอนนี้ไม่มีคำจำกัดความที่ชัดเจนว่าtransfer.hideRefs
ควรทำอย่างไรเมื่อตั้งค่าเนมสเปซ
อธิบายว่าhideRefs
คำนำหน้าตรงกับชื่อที่ลอกในกรณีนั้น นี่คือวิธีที่hideRefs
รูปแบบการจัดการในปัจจุบันได้รับแพ็ค
hideRefs: เพิ่มการสนับสนุนสำหรับการอ้างอิงแบบเต็ม
นอกเหนือจากการจับคู่การอ้างอิงแบบแยกส่วนตอนนี้หนึ่งสามารถเพิ่มhideRefs
รูปแบบที่การอ้างอิงแบบเต็ม (แบบไม่มีการเรียงลำดับ) จับคู่ได้
หากต้องการแยกความแตกต่างระหว่างการแข่งขันแบบแยกส่วนและการแข่งขันเต็มรูปแบบรูปแบบใหม่เหล่านั้นจะต้องนำหน้าด้วยวงแหวน ( ^
)
ดังนั้นเอกสารใหม่ :
transfer.hideRefs:
หากมีการใช้เนมสเปซคำนำหน้าเนมสเปซจะถูกแยกออกจากการอ้างอิงแต่ละรายการก่อนที่จะจับคู่กับtransfer.hiderefs
รูปแบบ
ตัวอย่างเช่นถ้าrefs/heads/master
มีการระบุในtransfer.hideRefs
และ namespace ปัจจุบันถูกfoo
แล้วrefs/namespaces/foo/refs/heads/master
ถูกตัดออกจากการโฆษณา แต่refs/heads/master
และ
refs/namespaces/bar/refs/heads/master
ยังคงมีการโฆษณาเป็นที่เรียกว่า "มี" เส้น
เพื่อให้ตรงกับการอ้างอิงก่อนที่จะปอกเพิ่ม^
ด้านหน้าชื่ออ้างอิง ถ้าคุณรวม!
และ^
, !
จะต้องระบุเป็นครั้งแรก
เราได้กล่าวถึงความคิดเห็นในการตั้งค่าuploadpack.allowAnySHA1InWant
ซึ่งช่วยให้upload-pack
สามารถยอมรับfetch
คำขอที่ถามถึงวัตถุใด ๆ ได้เลย (ค่าเริ่มต้นเป็นfalse
)
ดูคอมมิท f8edeaa (พ.ย. 2016, Git v2.11.1) โดยDavid "novalis" Turner ( novalis
) :
upload-pack
: อนุญาตให้เรียก sha1 ใดก็ได้
ดูเหมือนว่าโง่เล็กน้อยที่จะทำการตรวจสอบการเข้าถึงในกรณีที่เราเชื่อมั่นผู้ใช้ในการเข้าถึงทุกอย่างในที่เก็บ
นอกจากนี้ยังเป็นที่นิยมในระบบแบบกระจาย - บางทีอาจมีเซิร์ฟเวอร์หนึ่งที่อ้างถึงการอ้างอิง แต่มีอีกอันที่มีแรงผลักดันไปยังการอ้างอิงนั้นและบางทีคำขอ HTTP ทั้งสองนั้นจะถูกนำไปยังเซิร์ฟเวอร์ที่แตกต่างกันเหล่านี้