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는 다른 리포지토리의 포크이며 해당 리포지토리의 관리자는 몇 가지 자동 생성 파일을 파일에 추가하기 위해 풀 요청 (일정 이유가 없음)을 지속적으로 수락하지 않았습니다 .gitignore. 그러나 나는 그것이 여기서 문제라고 생각하지 않습니다.


같은 명령을 시도했지만 오류가 없습니다. 여전히 문제가 있습니까? 내 경우에는 Btw는 다른 커밋을 체크 아웃했다.Submodule path 'src/http-parser': checked out '6b05cce82da5c4d407e5576ab892bc20a17b0394'
ge0rdi

문제가 사라졌습니다. 하위 모듈 참조가 존재하지 않는 체크 아웃에 대한 것임을 의미한다고 생각합니다. 그러나 확실하지 않습니다.
vy32

혼란 스러울 수 있지만이 메시지가 다른 사용자를위한 참고 사항으로, 하위 모듈을 업데이트하고 상위 모듈을 새 커밋으로 업데이트하고 하위 모듈에서 새 커밋을 푸시하지 않으면 발생할 수 있습니다. 물론, 서브 모듈의 원격에 존재하지 않는 커밋을 체크 아웃하는 데 어려움이있을 것입니다!
Patrick Sanan

문제는 하위 모듈을 업데이트하고 부모 리포지를 업데이트하고 부모 리포지를 푸시했지만 하위 모듈을 푸시하지 않은 것 같습니다. 문자 그대로 부모 저장소는 github의 하위 모듈 저장소에없는 커밋을 참조했습니다.
vy32

답변:


8

jgit-git의 광고 심판이란 무엇입니까? -스택 오버플로 :

가져 오는 동안 서버는 가지고 있고 클라이언트가 가져 오기를 원하는 참조를 나열 할 수 있습니다. 이것들은 광고 된 참고 문헌입니다.

  • 것 같습니다 당신이 직접 하나의 특정이 서버에서만 심판 (즉, 지점 및 태그) 커밋 얻을 수 없습니다. 또는 Github 서버가 이러한 요청을 허용하지 않도록 구성되어 있습니다.
  • 따라서 으로 특정 커밋을 얻으려면 가져온 ref--depth<depth>-1 (서브 모듈의 메타 데이터에 지정된 분기 / 태그) 에서 커밋 해야합니다.

    일반적으로 사람들은 세트에 조언 depth처럼 - 상당히 크지 만 여전히의 repo에 커밋의 총 수보다 훨씬 적은 일부 번호 50100. 예를 들어 50Travis는 프로젝트의 초기 복제를 수행 할 때 사용합니다.

로 서브 모듈을 업데이트하지 않으면 --depth커밋을 찾지 못하면 다음 중 하나를 의미합니다.

  • 서브 모듈의 트리는 "얕은"상태이며 위의 내용이 적용됩니다 (이전에 업데이트 --depth되었거나 항목이 .gitmoduleshas 인shallow = true 경우에만 가능 )
  • 커밋이 서브 모듈이 사용하고있는 브랜치에 있지 않다
  • 커밋은 하위 모듈의 저장소에 전혀 없습니다.
    • 누군가 실수를했거나
    • 또는 한 번 있었지만 강제 푸시에 의해 삭제되었습니다

레코드의 경우 특정 경우에는 마지막 경우입니다. commit 5bbcdc5df9d01b521e8da011bab0da70bdec3653https://github.com/simsong/http-parser.git저장소에 전혀 없습니다.


무엇입니까 depth?
vy32

@ vy32로 업데이트하지 않는 경우에 대한 정보를 추가했습니다 --depth.
ivan_pozdeev

"한 번 있었지만 강제 푸시에 의해 삭제되었습니다"-이 상황에서 어떤 상환이 있습니까?
skolsuper

1
@skolsuper는 다른 커밋을 검색하여 선택합니다. 예를 들어 그것이 서브 모듈 인 경우, 수퍼 프로젝트에서 다른 커밋으로 전환하십시오.
ivan_pozdeev

3

광고되지 않은 개체에 액세스하는 한 가지 방법은 동기화하는 것입니다. 그런 다음 하위 모듈 업데이트가 작동해야합니다.

git submodule sync --recursive
git submodule update

1
단순화를 위해 +1 나를 위해 git submodule update다른 하위 모듈에서 실패했지만이 두 줄 을 모든 하위 모듈에 올바른 순서 로 적용하면 마침내 작동했습니다.
비잔

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.