2012-10-03 6 views
1

코드 검토를 위해 Gerrit를 사용하고 있습니다. Gerrit는 비표준 참조 경로 - refs/changes에서 검토 된 코드를 저장합니다. 그래서 커밋에 대한 참조는 refs/changes/95/295/2입니다. Gerrit의 프로젝트를 내 수퍼 프로젝트에 하위 모듈로 추가하려고합니다.비 standart refspec에서 서브 모듈을 올바르게 추가하는 방법은 무엇입니까?

나는 두 단계를 수행 할 수 있습니다

  • 현재
  • git fetch origin refs/changes/95/295/2 && git checkout FETCH_HEAD을 수행하고 변경 사항을 커밋 마스터가 가리키는 커밋 해시하는 서브 모듈로 내 프로젝트를 추가합니다.

하지만 내 수퍼 프로젝트를 체크 아웃하려고 할 때 git update --init git보고가 실패합니다. Git은 기본적으로 refs/changes에 참조를 보지 않았기 때문에 서브 모듈에서 해시를 찾을 수 없으며 객체를 다운로드하지 않습니다.

좋아요, 제 게토 repo에서 git config --add remote.origin.fetch '+refs/changes/*:refs/remotes/origin/changes/*'을 실행하여 문제를 해결 한 다음 서브 모듈 업데이트를 다시 시도해보십시오. 그러면 문제가 해결됩니다.

질문 : 사용자 워크 플로우에서와 같이 한 단계에서 "추가"및 "초기화/업데이트"하위 모듈을 수행 할 수 있습니까? 기본적으로 "clone"/ "pull"/ "submodule add"/ "sumbodule update"실행 시작 전에 refspec을 설정하는 기능이 필요합니다.

+0

마지막으로 내 자신의 추상화 수준을 git 위에 구현합니다. 그것은 작동하고, 그것은 추합니다. 나는 행복하지 않지만 어쩌면 리누스에게 패치를 제공하는 git 동작을 고칠 수있다. –

답변

0

refs/changes시 커밋을 가리키는 하위 모듈을 사용하여 변경 내용을 밀어 내고 싶지는 않습니다. Gerrit는 검토 중에 코드를 저장하지만, 검토가 완료되고 변경 사항이 제출되면 표준 refs/heads /에서 액세스 할 수 있습니다. 하위 모듈은 검토 된 & 코드 (refs/heads/BRANCH_NAME)를 가리켜 야합니다.

+0

아니요, 저는 이것을 정확히하고 싶습니다. 새롭게 변경된 내용으로 빌드를 수행해야하며,이를 슈퍼 프로젝트에서 서브 모듈로 빌드 할 수 있습니다. –

+0

이 경우 내가 알고있는 유일한 옵션은 지정한대로 원격 가져 오기 사양을 추가하는 것입니다. 이것이 병합되지 않은 변경 사항을 확인하기 위해 우리의 빌드 봇이하는 일입니다. – Brad

+0

네, fetch-spec을 추가 할 수는 있지만, 이것은'submodule update --init' 실패 후 추가적인 단계가 될 것입니다. 나는 그것을 할 수있다. 그러나 이것은 추한, IMHO 다. –