2014-11-28 6 views
11

--depth 옵션을 사용하는 얕은 서브 모듈을 git submodule update과 함께 사용하는 것이 가능하다는 것을 알고 있습니다. 나는 여러 서브 모듈 내 프로젝트에서브 유닛이있는 자식을 사용하는 얕은 복제본, 최신 커밋되지 않은 커밋 된 커밋을 사용하는 방법?

git submodule update --init --recursive --depth 1 

을 실행하면

그러나, 나는 fatal: reference is not a tree를 얻을. 그래서 내가 그러나 나는 1

에 깊이를 유지하고 싶습니다 제대로 작동

git submodule update --init --recursive --depth 100 

다시 시도했습니다 --depth 1 최신이 아닌 커밋, 서브 모듈 커밋 끌어 나에게 보인다 주 저장소가 가리키고 있기 때문에 그 점을 100으로 설정하는 것이 문제를 해결 한 이유입니다. 그 이유는 지적한 것들을 포함하여 더 많은 커밋 목록을 가져 왔기 때문입니다.

그럴 경우 일반적으로 최신 100 커밋에 필요한 커밋을 포함 할 수 없습니다.

하위 모듈과 얕은 복제본의 최신 커밋되지 않은 커밋 된 커밋을 사용하려면 어떻게해야합니까?

Windows에서 git 1.9.4를 사용하고 있습니다.

+0

'git config -f .gitmodules submodule도 참조하십시오. .shallow true' http://stackoverflow.com/a/38895397/6309 – VonC

답변

7

특정 커밋 ID 만 사용하여 git fetch을 수행하는 방법이없는 것처럼 보입니다. 정말 알고 싶다면. 그러나 나는 두 가지 다른 방법으로 문제를 다뤘다 : 가능한 경우, 원하는 커밋을 가리키는 태그 또는 원격 저장소의 브랜치를 만드는 것이고, 우리는 이것을 "ref"라고 부른다. 이 방법으로 원격 참조를 가져올 수 있으며 --depth이 최신 팁이 아닌 적용됩니다. 대신 git submodule update --init의 내가 수행

"하위는"서브 모듈의 이름과 경로입니다
git submodule init 
git clone --depth 1 -b ref --separate-git-dir .git/modules/sub/ repository sub 

당신이 태그를 작성할 수없는 경우,

다른 방법 (편의상의들은이 같은 가정 해 봅시다) 또는 원격 저장소에 지사를, 당신이 루프에서 원하는 커밋을 검색하는 것입니다

git submodule init 
id=$(git submodule status|sed -ne 's/.\([a-z0-9]*\) sub.*/\1/p' 
git clone --depth 1 --separate-git-dir -n .git/modules/sub/ repository sub  
cd sub 
while ! git rev-list $id ; do 
    git fetch --depth $((i+=1)) 
done 
git checkout $id 

당신은 하나가 더 빨리 갈 수 있도록 한 번에 커밋보다 더으로 증가 할 수 있지만 함께 끝낼 수 있습니다 당신이 원하는 것보다 더 일찍 커밋.

+0

안녕하세요. 팁 주셔서 감사합니다, 내가 뭘 찾고있는 것 같습니다. 클론을 가능한 한 얕게 유지하면서 리모콘에서 특정 태그를 복제 할 수 있는지 알고 있습니까? --depth 1은 태그 ref로 작동합니까? –

+0

답변을 늦게 드려 죄송합니다. 질문에 대한 답변이 '예'였지만 지금은 다시 테스트 할 수 없습니다. 그냥 호기심에서 벗어나 시도 했습니까? 그리고 원하는대로 작동 했습니까? – kouk

+0

예, 시도했지만 다소 효과가있었습니다. 그러나, 나는 다른 프로젝트 설정을 선택했고 지금은 서브 모듈을 사용하지 않았다. –