Thông báo lỗi git Máy chủ nào không cho phép yêu cầu đối tượng không được chuyển đổi có nghĩa là gì?


23

Tôi đang cố gắng kiểm tra từ github và tôi nhận được thông báo lỗi này:

[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 ~]$

Vì vậy, tôi là người duy trì các repos này. Src / http-Parser là một nhánh của một repo khác và những người duy trì repo đó đã không chấp nhận các yêu cầu kéo của tôi (không có lý do nào được đưa ra) để thêm một vài tệp được tạo tự động vào .gitignoretệp. Nhưng tôi không nghĩ đó là vấn đề ở đây.


Tôi đã thử lệnh tương tự và không có lỗi. Bạn vẫn có một vấn đề? Btw trong trường hợp của tôi, nó đã kiểm tra các cam kết khác nhau:Submodule path 'src/http-parser': checked out '6b05cce82da5c4d407e5576ab892bc20a17b0394'
ge0rdi

Vấn đề đã biến mất. Tôi nghĩ rằng điều đó có nghĩa là tham chiếu mô hình con là để kiểm tra không tồn tại. Nhưng tôi không chắc chắn.
vy32

Như một lưu ý cho những người khác nhầm lẫn nhưng thông báo này, nó có thể phát sinh nếu bạn cập nhật một mô hình con, cập nhật mô đun mẹ lên cam kết mới và không bao giờ đẩy cam kết mới trong mô hình con. Sau đó, tất nhiên, bạn sẽ gặp khó khăn khi kiểm tra một cam kết không tồn tại trên điều khiển của mô hình con!
Patrick Sanan

Vấn đề có vẻ là tôi đã cập nhật mô hình con, cập nhật repo cha, đẩy repo cha, nhưng không đẩy mô hình con. Vì vậy, theo nghĩa đen, repo cha đã tham chiếu một cam kết không có trong repo của mô hình con trên github.
vy32

Câu trả lời:


8

jgit - Refs được quảng cáo của git là gì? - Tràn ngăn xếp :

Trong quá trình tìm nạp, máy chủ có thể liệt kê các tài liệu tham khảo mà nó có và khách hàng có thể muốn tìm nạp. Đây là những tài liệu tham khảo được quảng cáo.

  • Có vẻ như bạn không thể trực tiếp nhận bất kỳ cam kết cụ thể nào từ máy chủ, chỉ các ref (tức là các nhánh và thẻ). Hay đúng hơn, các máy chủ Github được cấu hình để không cho phép các yêu cầu đó.
  • Vì vậy, nếu bạn muốn nhận được một cam kết cụ thể --depth, thì tối đa nó phải <depth>-1cách xa giới thiệu được tìm nạp (là nhánh / thẻ được chỉ định trong siêu dữ liệu của mô hình con)

    Thông thường, mọi người khuyên chỉ nên đặt depthmột số số lớn một cách hợp lý nhưng vẫn nhỏ hơn nhiều so với tổng số cam kết trong repo - như 50hoặc 100. Ví dụ, 50những gì Travis sử dụng khi thực hiện bản sao ban đầu cho dự án.

Nếu bạn không cập nhật mô hình con với --depth, việc không tìm thấy cam kết có nghĩa là bất kỳ:

  • cây của mô hình con ở trạng thái "nông" và áp dụng ở trên (chỉ có thể khi nó được cập nhật trước đó --depthhoặc mục nhập của nó .gitmodulesshallow = true )
  • cam kết không nằm trên nhánh mà mô hình con đang sử dụng
  • cam kết hoàn toàn không có trong repo của mô hình con:
    • hoặc ai đó đã phạm sai lầm,
    • hoặc nó đã từng ở đó nhưng đã bị xóa bởi một cú đẩy cưỡng bức

Đối với hồ sơ, trong trường hợp cụ thể của bạn, đó là trường hợp cuối cùng: cam kết hoàn toàn 5bbcdc5df9d01b521e8da011bab0da70bdec3653không có trong https://github.com/simsong/http-parser.gitrepo.


depth
vy32

@ vy32 đã thêm thông tin cho trường hợp khi bạn không cập nhật --depth.
ivan_pozdeev

"nó đã từng ở đó nhưng đã bị xóa bởi một cú đẩy cưỡng bức" - có bất kỳ truy đòi nào trong tình huống này không?
skolsuper

1
@skolsuper chọn một cam kết khác để lấy. Ví dụ, nếu đó là một mô hình con, hãy chuyển nó sang một cam kết khác trong siêu dự án.
ivan_pozdeev

3

Một cách để có quyền truy cập vào một đối tượng không được chuyển đổi là đồng bộ hóa. Sau đó, một bản cập nhật mô hình con sẽ hoạt động, như:

git submodule sync --recursive
git submodule update

1
+1 cho đơn giản. đối với tôi git submodule updateđã thất bại ở một mô hình con khác, nhưng khi tôi áp dụng hai dòng này cho tất cả các mô hình con của tôi theo đúng thứ tự , cuối cùng nó đã hoạt động.
Bizhan

2
Đối với các siêu dự án lớn, bạn nên thực hiện $ git submodule sync --recursive; git submodule updateHOẶC, nếu chỉ sau khi nhân bản một điều khiển từ xa, chỉ cần $ git submodule update --init --recursive. Điều này sẽ vượt qua cây tệp dự án của bạn một cách hiệu quả /project/root/, theo những gì trong /project/root/.gitmodules. Nhiều hơn nữa tại $ git submodule --help...
Cbhihe

Cảm ơn @Cbhihe Tôi sẽ chỉnh sửa câu trả lời để bao gồm --recursivecờ.
thợ khắc
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.