ฉันเพิ่งเริ่มใช้ gerrit และฉันต้องการทราบว่าทำไมเราต้องทำgit push gerrit HEAD:refs/for/master
แทนที่จะทำgit push origin master
ถ้าฉันทำgit push origin master
ฉันได้รับข้อผิดพลาดที่บอกว่า! [remote rejected] master -> master (prohibited by Gerrit)
ฉันเพิ่งเริ่มใช้ gerrit และฉันต้องการทราบว่าทำไมเราต้องทำgit push gerrit HEAD:refs/for/master
แทนที่จะทำgit push origin master
ถ้าฉันทำgit push origin master
ฉันได้รับข้อผิดพลาดที่บอกว่า! [remote rejected] master -> master (prohibited by Gerrit)
คำตอบ:
เอกสารสำหรับ Gerrit โดยเฉพาะอย่างยิ่งในส่วน"การเปลี่ยนแปลงแบบพุช"อธิบายว่าคุณกดไปที่ "การrefs/for/'branch'
อ้างอิงมหัศจรรย์โดยใช้เครื่องมือไคลเอนต์ Git ใด ๆ "
ภาพต่อไปนี้จะนำมาจากบทนำเพื่อ Gerrit เมื่อคุณกดเพื่อ Gerrit git push gerrit HEAD:refs/for/<BRANCH>
คุณทำ สิ่งนี้จะผลักดันการเปลี่ยนแปลงของคุณไปยังพื้นที่การแสดงละคร (ในแผนภาพ "การเปลี่ยนแปลงที่รอดำเนินการ") Gerrit ไม่มีสาขาชื่อ<BRANCH>
จริง มันอยู่ที่ลูกค้า git
ภายใน Gerrit มีการใช้งานของตัวเองสำหรับกอง Git และ SSH วิธีนี้ช่วยให้สามารถให้การrefs/for/<BRANCH>
อ้างอิงที่"วิเศษ"
เมื่อได้รับคำขอพุชเพื่อสร้างการอ้างอิงหนึ่งในเนมสเปซเหล่านี้ Gerrit ดำเนินการตรรกะของตัวเองเพื่ออัปเดตฐานข้อมูลจากนั้นจะอยู่ที่ไคลเอ็นต์เกี่ยวกับผลลัพธ์ของการดำเนินการ ผลลัพธ์ที่ประสบความสำเร็จทำให้ลูกค้าเชื่อว่า Gerrit ได้สร้างการอ้างอิง แต่ในความเป็นจริงแล้ว Gerrit ไม่ได้สร้างการอ้างอิงเลย [ ลิงก์ - Gerrit "รายละเอียด Gritty" ]
หลังจากแพทช์ที่ประสบความสำเร็จ (เช่นแพทช์ถูกส่งไปยัง Gerrit, [วางลงในพื้นที่จัดเตรียม "รอการเปลี่ยนแปลง", ตรวจสอบ, และผ่านการตรวจสอบแล้ว), Gerrit ผลักดันการเปลี่ยนแปลงจาก "รอการเปลี่ยนแปลง" ลงใน " เผด็จการ Repository" refs/for/<BRANCH>
การคำนวณซึ่งสาขาที่จะผลักดันมันเข้าไปอยู่บนพื้นฐานของความมหัศจรรย์มันได้เมื่อคุณผลักดันให้ Authoritative Repository
วิธีนี้แพทช์การตรวจสอบเรียบร้อยแล้วสามารถดึงโดยตรงจากสาขาที่ถูกต้องของ
เพื่อหลีกเลี่ยงการต้องระบุคำสั่ง git push อย่างครบถ้วนคุณสามารถแก้ไขไฟล์ git config ของคุณ:
[remote "gerrit"]
url = https://your.gerrit.repo:44444/repo
fetch = +refs/heads/master:refs/remotes/origin/master
push = refs/heads/master:refs/for/master
ตอนนี้คุณสามารถ:
git fetch gerrit
git push gerrit
นี่เป็นไปตามGerrit
remote.origin.push
แทนที่จะต้องพิมพ์ / วางทุกครั้ง!
git fetch
และgit push
ด้วย config @DavidDoria ที่กล่าวถึงข้างต้น