ข้อความแสดงข้อผิดพลาด git“ เซิร์ฟเวอร์ไม่อนุญาตการร้องขอสำหรับวัตถุที่ไม่ได้แปลง” หมายความว่าอย่างไร


23

ฉันกำลังพยายามชำระเงินจาก Github และฉันได้รับข้อความแสดงข้อผิดพลาดนี้:

[user@arch ~]$ git clone --recursive https://github.com/simsong/tcpflow.git
Cloning into 'tcpflow'...
The authenticity of host 'github.com (192.30.253.113)' can't be established.
RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'github.com,192.30.253.113' (RSA) to the list of known hosts.
remote: Counting objects: 4190, done.
remote: Compressing objects: 100% (32/32), done.
remote: Total 4190 (delta 21), reused 29 (delta 12), pack-reused 4146
Receiving objects: 100% (4190/4190), 50.27 MiB | 2.21 MiB/s, done.
Resolving deltas: 100% (2954/2954), done.
Submodule 'src/be13_api' (https://github.com/simsong/be13_api.git) registered for path 'src/be13_api'
Submodule 'src/dfxml' (https://github.com/simsong/dfxml.git) registered for path 'src/dfxml'
Submodule 'src/http-parser' (https://github.com/nodejs/http-parser.git) registered for path 'src/http-parser'
Cloning into '/home/user/tcpflow/src/be13_api'...
remote: Counting objects: 1203, done.
remote: Compressing objects: 100% (8/8), done.
remote: Total 1203 (delta 2), reused 5 (delta 1), pack-reused 1194
Receiving objects: 100% (1203/1203), 477.47 KiB | 1.96 MiB/s, done.
Resolving deltas: 100% (821/821), done.
Cloning into '/home/user/tcpflow/src/dfxml'...
remote: Counting objects: 1929, done.
remote: Total 1929 (delta 0), reused 0 (delta 0), pack-reused 1929
Receiving objects: 100% (1929/1929), 572.09 KiB | 2.89 MiB/s, done.
Resolving deltas: 100% (1294/1294), done.
Cloning into '/home/user/tcpflow/src/http-parser'...
remote: Counting objects: 1487, done.
remote: Total 1487 (delta 0), reused 0 (delta 0), pack-reused 1487
Receiving objects: 100% (1487/1487), 667.24 KiB | 2.46 MiB/s, done.
Resolving deltas: 100% (916/916), done.
Submodule path 'src/be13_api': checked out 'c81521d768bb78499c069fcd7c47adc8eee0350c'
Submodule path 'src/dfxml': checked out 'c31224626cf5f6678d42cbcfbfcd4e6191c9a864'
error: Server does not allow request for unadvertised object 5bbcdc5df9d01b521e8da011bab0da70bdec3653
Fetched in submodule path 'src/http-parser', but it did not contain 5bbcdc5df9d01b521e8da011bab0da70bdec3653. Direct fetching of that commit failed.
[user@arch ~]$

ดังนั้นฉันเป็นผู้ดูแล repos เหล่านี้ src / http-parser เป็นทางแยกของ repo อื่นและผู้ดูแลของ repo นั้นไม่ยอมรับคำขอดึงของฉัน (โดยไม่มีเหตุผล) เพื่อเพิ่มไฟล์ที่สร้างขึ้นอัตโนมัติลงใน.gitignoreไฟล์ แต่ฉันไม่คิดว่าเป็นปัญหาที่นี่


ฉันลองคำสั่งเดียวกันและไม่มีข้อผิดพลาด คุณยังมีปัญหาหรือไม่? Btw ในกรณีของฉันมันตรวจสอบการกระทำที่แตกต่างกัน:Submodule path 'src/http-parser': checked out '6b05cce82da5c4d407e5576ab892bc20a17b0394'
ge0rdi

ปัญหาหายไป ฉันคิดว่ามันหมายความว่าการอ้างอิง submodule สำหรับการเช็คเอาต์ที่ไม่มีอยู่ แต่ฉันไม่แน่ใจ.
vy32

เป็นบันทึกสำหรับผู้อื่นที่สับสน แต่ข้อความนี้อาจเกิดขึ้นได้หากคุณอัปเดต submodule อัพเดตโมดูลพาเรนต์เป็นคอมมิทใหม่และอย่าผลักคอมมิทใหม่ในซับโดเลชั่น แน่นอนว่าคุณจะมีปัญหาในการตรวจสอบการกระทำที่ไม่มีอยู่ในรีโมทของ submodule!
Patrick Sanan

ปัญหาน่าจะเป็นที่ฉันปรับปรุง submodule ปรับปรุง repo หลักผลัก repo แม่ แต่ไม่ผลักดัน submodule ดังนั้นผู้ปกครอง repo อ้างอิงถึงความมุ่งมั่นที่ไม่ได้อยู่ใน repo ของ submodule บน GitHub
vy32

คำตอบ:


8

jgit - ผู้อ้างอิงโฆษณาของ git คืออะไร? - สแต็คล้น :

ในระหว่างการดึงข้อมูลเซิร์ฟเวอร์สามารถแสดงรายการอ้างอิงที่มีและลูกค้าอาจต้องการดึงข้อมูล นี่คือการอ้างอิงที่โฆษณา

  • ดูเหมือนว่าคุณไม่สามารถรับการมอบสิทธิ์เฉพาะเจาะจงใด ๆ จากเซิร์ฟเวอร์โดยตรงได้เพียงอ้างอิงเท่านั้น (เช่นสาขาและแท็ก) หรือมากกว่านั้นเซิร์ฟเวอร์ Github ได้รับการกำหนดค่าให้ไม่อนุญาตการร้องขอดังกล่าว
  • ดังนั้นหากคุณต้องการรับการคอมมิทชั่นที่เฉพาะเจาะจง--depthมันต้องอยู่<depth>-1ห่างจากการอ้างอิงที่ดึงมา (ซึ่งเป็นสาขา / แท็กที่ระบุในเมตาดาต้าของ submodule)

    โดยปกติแล้วคนที่ให้คำแนะนำที่จะเพียงแค่ชุดdepthไปยังหมายเลขบางส่วนที่มีขนาดใหญ่พอสมควร แต่ยังคงมีขนาดเล็กกว่าจำนวนรวมของการกระทำใน repo เหมือน - หรือ50 100เช่น50สิ่งที่ Travis ใช้เมื่อทำการโคลนเริ่มต้นสำหรับโครงการ

หากคุณไม่ได้อัปเดต submodule ด้วย--depthความล้มเหลวในการค้นหาการกระทำจะหมายถึง:

  • ต้นไม้ submodule ที่อยู่ใน "ตื้น" รัฐและข้างต้นมีผลบังคับใช้ (เป็นไปได้ก็ต่อเมื่อได้รับการปรับปรุงก่อนหน้านี้ด้วย--depthหรือรายการใน.gitmodulesมีshallow = true )
  • กระทำไม่ได้อยู่ในสาขาที่ใช้ submodule
  • กระทำไม่ได้อยู่ใน repo ของ submodule เลย:
    • มีคนทำผิดพลาด
    • หรือครั้งหนึ่งเคยมี แต่ถูกลบโดยการกดบังคับ

สำหรับบันทึกในกรณีเฉพาะของคุณมันเป็นกรณีสุดท้าย: กระทำ5bbcdc5df9d01b521e8da011bab0da70bdec3653ไม่ได้อยู่ในhttps://github.com/simsong/http-parser.gitrepo เลย


คือdepthอะไร
vy32

@ vy32 --depthเพิ่มข้อมูลในกรณีที่คุณไม่ได้อัปเดตด้วย
ivan_pozdeev

"ครั้งหนึ่งเคยมี แต่ถูกลบโดยการกดบังคับ" - มีการขอความช่วยเหลือในสถานการณ์นี้หรือไม่?
skolsuper

1
@skolsuper เลือกการคอมมิตที่แตกต่างเพื่อดึงข้อมูล เช่นถ้าเป็น submodule ให้สลับไปยังการคอมมิชชันอื่นใน superproject
ivan_pozdeev

3

วิธีหนึ่งในการเข้าถึงวัตถุที่ไม่ได้แปลงคือการซิงค์ จากนั้นการอัปเดต submodule ควรใช้งานได้เช่น:

git submodule sync --recursive
git submodule update

1
+1 เพื่อความง่าย สำหรับฉันgit submodule updateล้มเหลวใน submodule อื่น แต่เมื่อฉันใช้สองบรรทัดนี้กับ submodules ทั้งหมดของฉันในลำดับที่ถูกต้องในที่สุดก็ใช้งานได้
Bizhan

2
สำหรับโครงการซุปเปอร์ขนาดใหญ่ที่อาจเกิดขึ้นคุณจะได้รับคำแนะนำให้ดำเนินการจริงหรือถ้ามันเป็นเพียงหลังจากโคลนระยะไกลเพียง$ git submodule sync --recursive; git submodule update $ git submodule update --init --recursiveได้อย่างมีประสิทธิภาพจะสำรวจโครงการไฟล์ของคุณจากต้นไม้ลงไปตามสิ่งที่อยู่ใน/project/root/ /project/root/.gitmodulesอีกมากมายที่$ git submodule --help...
Cbhihe

ขอบคุณ @Cbhihe ฉันจะแก้ไขคำตอบเพื่อรวมการ--recursiveตั้งค่าสถานะ
ช่างแกะสลัก
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.