2013-05-16 1 views
47

을 리트하기 : 우리는 성공하지 않고 수동으로 원격 자식에 언급 트리 개체를 복사하려고자식 압축 풀기 오류는 우리가 다음 오류가 발생할 리트 서버에 새로운 지점의 푸시에

[email protected]:~/git-hate/www$ git push origin landingpage 
Counting objects: 149, done. 
Delta compression using up to 2 threads. 
Compressing objects: 100% (73/73), done. 
Writing objects: 100% (111/111), 2.77 MiB, done. 
Total 111 (delta 68), reused 80 (delta 38) 
remote: Resolving deltas: 100% (68/68) 
error: unpack failed: error Missing tree 30c4809ade0b4b0c81cb7f882450774862b82361 
fatal: Unpack error, check server log 
To ssh://[email protected]/repository 
! [remote rejected] landingpage -> landingpage (n/a (unpacker error)) 
error: failed to push some refs to 'ssh://[email protected]/repository' 

.

[2013-05-16 13:43:42,753] ERROR com.google.gerrit.sshd.BaseCommand : Internal server error (user de account 1000000) during git-receive-pack '/repository' 
com.google.gerrit.sshd.BaseCommand$Failure: fatal: Unpack error, check server log 
     at com.google.gerrit.sshd.commands.Receive.runImpl(Receive.java:157) 
     at com.google.gerrit.sshd.AbstractGitCommand.service(AbstractGitCommand.java:106) 
     at com.google.gerrit.sshd.AbstractGitCommand.access$000(AbstractGitCommand.java:34) 
     at com.google.gerrit.sshd.AbstractGitCommand$1.run(AbstractGitCommand.java:72) 
     at com.google.gerrit.sshd.BaseCommand$TaskThunk.run(BaseCommand.java:430) 
     at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) 
     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334) 
     at java.util.concurrent.FutureTask.run(FutureTask.java:166) 
     at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java:165) 
     at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:266) 
     at com.google.gerrit.server.git.WorkQueue$Task.run(WorkQueue.java:337) 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) 
     at java.lang.Thread.run(Thread.java:636) 
Caused by: java.io.IOException: Unpack error on project "repository": 
    AdvertiseRefsHook: [email protected] org.eclipse.jgit.transport.AdvertiseRefsHookChain 

     at com.google.gerrit.sshd.commands.Receive.runImpl(Receive.java:156) 
     ... 13 more 
Caused by: org.eclipse.jgit.errors.UnpackException: Exception while parsing pack stream 
     at org.eclipse.jgit.transport.ReceivePack.service(ReceivePack.java:202) 
     at org.eclipse.jgit.transport.ReceivePack.receive(ReceivePack.java:142) 
     at com.google.gerrit.sshd.commands.Receive.runImpl(Receive.java:98) 
     ... 13 more 
Caused by: org.eclipse.jgit.errors.MissingObjectException: Missing tree 30c4809ade0b4b0c81cb7f882450774862b82361 
     at org.eclipse.jgit.transport.BaseReceivePack.checkConnectivity(BaseReceivePack.java:996) 
     at org.eclipse.jgit.transport.BaseReceivePack.receivePackAndCheckConnectivity(BaseReceivePack.java:756) 
     at org.eclipse.jgit.transport.ReceivePack.service(ReceivePack.java:167) 
     ... 15 more 

밥상 : 리트 측면에서

우리는 스택 트레이스를 얻을 수있는 아이디어가 무엇을?

+0

여기에 설명 된 단계를 시도해 보셨습니까? http://stackoverflow.com/questions/7236738/how-can-i-recover-my-git-repository-for-a-missing-tree-error –

+0

예, 시험했습니다. 성공하지 않고 수동으로 복사합니다.그 발견은 어떤 결과도 가져 오지 않았습니다. – edlerd

+0

하위 모듈을 사용하고 있습니까? –

답변

13

git> 1.8.4.2를 사용하고 있습니까?

나는 자식이 트리 SHA1이 이미 서버에 존재하는 것을 발견하면이 기능 향상 https://github.com/git/git/commit/fbd4a7036dfa71ec89e7c441cef1ac9aaa59a315

의, 그것은 늘 다시 보낼 수 있기 때문에, 자식 1.8.4.3+ 및 리트 2.6 사이의 비 호환성 문제를 찾았지만, gerrit는 업로드 된 팩의 커밋 sha1과 관련된 트리 sha1을 검색하려고합니다.

최신 버전의 scm-manager가 아닌 gerrit 2.8-rc3으로 재현 할 수없는 것처럼 보입니다. 나는 이것이 jgit에서 해결되었지만 아직 어떤 버전을 찾을 수 없다고 말할 것이다.

+0

이것은 올바른 대답입니다. gerrit 서버 문제를 해결하기 위해 git를 다운 그레이드하십시오. – akhan

+4

Gerrit 문제 보고서는 [여기] (https://code.google.com/p/gerrit/issues/detail?id=1582) 및 [여기] (https://code.google.com/p/gerrit/issues/detail? id = 2296). – sschuberth

+3

커밋 메시지에 유일한 변경 사항이있는 기존의 검토에 새 패치 세트를 푸시하려고 할 때 이런 일이 발생했습니다. 파일 중 하나에서 약간의 변경을 가하고 밀어 내면 – onlynone

2

오늘이 문제가 발생하여 git> 1.8.4.2를 사용하지 않았습니다. 저는 Gerrit 2.7에 있습니다.

약 5 분의 좌절감을 겪은 후, 나는 내가 푸시하려고했던 지점의 로컬 버전으로 전환하기로 결정했다. 그 후, 제 푸시가 다시 작동하기 시작했는데, 왜 그런지 이해하지 못합니다.

6

방금이 오류가 발생했습니다.

필자의 경우, 동일한 커밋이 마지막으로 푸시 된 이후로 파일이 변경되지 않은 수정 된 커밋을 시도하고있었습니다. 나는 문자 그대로 변경을위한 커밋 메시지를 수정하고 다시 시도했다. 커밋의 일부로 파일이 변경되지 않았습니다.

게시 한 것과 동일한 오류 메시지가 표시되어 푸시가 거부되었습니다.

Gerrit는 수정 된 커밋 메시지 이외의 변경 사항이없는 것으로 보였습니다.

문자 그대로 파일에 한 문자 변경을하고, 파일을 추가하고, 커밋을 다시 수정하고, 밀어 넣기가 성공했습니다.

나는 또한 너무이 문제가 발생 자식 == 1.8.4.2

+0

+1의 해결 방법으로 성공했습니다. git은 "벙어리 (dumb)"이고 파일 시스템이 99 % 변경되면서 작동하기 때문에 압축 해제 오류는 AFAIK가 발생합니다. 변경 사항이 없으면 git은 아무 것도 원격 서버에 푸시하지 않습니다 (빈 디렉토리를 푸시 할 수없는 것과 같은 이유). 이것은 gerrit barf를 만듭니다. –

+0

+1000. 같은 문제지만, 자식을 되 돌리는 중 ... 나는 커밋에 추가 변경을 추가하고 커밋을 수정했으며 푸시가 성공적이었다! –

+0

Gerrit는이 문제점에 따라 버그 수정을 게시합니까? –

8

내 경우

을 사용하고 있는데, 이것은이 문제를 해결하는 데 시간이 오래 걸릴.

Internal server error (user newptone account 1) during git-receive-pack       '/neutron.git' 
com.google.gerrit.sshd.BaseCommand$Failure: fatal: Unpack error, check server log 
...... 
... Missing unknown 613fd2557fba30aff2dbd51c3807cc57561bab08 

613fd2557fba30aff2dbd51c3807cc57561bab08 목적은 무엇인가 :

첫째, 리트 로그에 하나 개의 오류 정보를 발견?

은 그 때 나는이 프로젝트에 중성자를 위해 열려있는 모든 패치 세트를 검색 자식 검토 -l을 사용

1974 master Add two interfaces for manipulate forwarding individually 
다음

내가 검색하여 리트 대시 보드에서이 패치 세트를 찾아, 내가 링크를 클릭하고 오류 보인다

613fd2557fba30aff2dbd51c3807cc57561bab08 cannot found 

아하, 그건 이유 야!

왜이 개체가 누락 되었습니까?

왜냐하면 동료가 중성자 프로젝트가 이전 버전을 대체하기 위해 새로운 repo를 사용할 것이라고 말했기 때문에 이전 repo를 삭제했지만 gerrit의 모든 열린 패치 세트를 닫지 않았기 때문입니다. 열려있는 패치 세트는 gerrit 대시 보드에서 사라지지만 여전히 gerrit 데이터베이스에 존재합니다.

이 녹음 reviewdb의 SQL에

로그인 정보를 수정하고 찾는 방법 :

select * from changes where change_id=1974\G; 

하는 것은 다음 업데이트 :

첫째, 우리가 수정할 하나입니다 있는지 확인을 이 레코드 :

update changes set open='N',status='A' where change_id=1974; 
+0

환상적입니다. 제 경우에는 방금 열려있는 모든 변경 사항을'update changes set open = 'N', status = 'A'(여기서 open = 'Y';)로 버렸습니다. – indiv

1

지금 당장이 문제가 발생합니다. 내 경우는 다음과 같습니다 : 일부 git init은 gerit의 자식 프로젝트에 완전히 새로운 분기를 푸시합니다 (즉,이 분기는 git의 원래 git의 모든 개정과 관계가 없습니다) . 여러 가지 방법을 시도하지만 실패합니다. 결국 이 다음 @obuseme의 대답에 의해 영감을 고정하고 I :

git remote add gerrit GERRIT_GIT_PROJECT_URL 
git fetch gerrit 
And then upload again. 
+0

이것은 나를 위해 일했습니다 ...하지만이 문제를 어떻게 없애 버리는 지 혼란 스럽습니다 ... – vishalm

94

--no-thin 인수를 추진 나를 위해 해결 방법으로 작동합니다

git push --no-thin omnigerrit HEAD:refs/for/android-4.4 
+9

예,하지만 _why_는 작동합니까? – Gareth

+10

음, git이 네트워크를 통해 가능한 한 작은 데이터를 보내도록하는 새로운 최적화로 인해이 버그가 나타났습니다. 그래서 내 생각에 --no-thin은 이러한 최적화를 해제합니다. git push --help에서 : "씬 트랜스퍼는 송신자와 수신자가 동일한 객체를 공유 할 때 보내는 데이터의 양을 크게 줄입니다." (- 틴이 기본값 임). – Tassadar

+1

비슷한 문제, --no-thin 나를 위해 일한 – vishalm

3

오늘이 문제를했고, 모든 제안을 시도했다. 마지막으로 솔루션은 매우 간단했습니다.

  1. 다른 분기 (예 : 개발)로 전환하십시오.
  2. 원격 저장소에서 당겨
  3. 새 분기로 다시 전환하고 밀어 넣습니다.

이제 모든 기능을 사용할 수 있습니다.

+1

이것은 기본적으로 저에게 효과적이었습니다. 한 걸음 건너 뛰었습니다. 다른 브랜치로 전환하는 대신,'git pull --rebase = preserve' 명령을 사용했습니다. 그 후, 나는 문제없이 밀어 낼 수 있었다. – Briank

0

저는이 문제를 해결하기 위해 저장소를 다시 복제하고 이전 변경 사항을 복사하여이 문제를 해결했습니다.

obrienks를 시도하지 않았다는 것을 제외하고 다른 해결책은 나를 위해 작동하지 않았습니다.

git 2.6.1과 JGit 4.6.1에서 시도한 결과 Gerrit 2.13.1을 사용했습니다.