2011-09-16 4 views
11

원격 저장소의 맨 위에있는 저장소에 작업 트리가 연결되어있는 git 저장소가 있습니다. 저장소에 하위 모듈이 있습니다. 원격 끝에서 맨손으로 작업 디렉토리로 이동 한 후 작업 트리에서 git 하위 모듈을 초기화/업데이트하는 방법은 무엇입니까?

: 나는 작업 트리 git checkout -f에 REPO 체크 아웃은 GIT-DIR 설정하고 GIT-WORK-TREE ENV는 바르 데.

작업 트리에서 예상되는 모든 파일과 하위 모듈 ('MySubmodule')의 빈 디렉토리를 볼 수 있습니다.

나는 다음을 수행하십시오

git submodule init 
git submodule update 

이 오류를 같은 메시지와 함께 :

working tree '../../workTree/' already exists 
Clone of '[email protected]:user/MySubmodule.git' into submodule path 'MySubmodule' failed 

빈 서브 모듈 디렉토리는 작업 트리에서 '사라'지금있다 ...

나는 이것으로 어디서 잘못 될지 모르겠다. 기본적으로 나는 'git submodule update'와 마찬가지로 서브 모듈 파일을 체크 아웃하고 싶다.

+0

해결 되었습니까? 만약 그렇다면 나는 – shevron

+0

베어 레포가 작업 트리를 가지고 있지 않아서 서브 모듈을위한 작업 트리가 없어야하는 방법을 알게되어 행복 할 것입니다. [유사한 정보] (http://stackoverflow.com/questions/1764380/push-to-non-bare-repository#comment29366144_1764380) –

+0

배포 스크립트를 작성할 때 동일한 문제가 발생했습니다. 초기화 할 수있는 방법이없는 것 같습니다. 하위 모듈은 체크 아웃 된 맨처 리 저장소에 있습니다. –

답변

0

우선, 왜 맨 처음 레포를 결제해야합니까? 다른 곳에서 복제하고 정상적인 비 베어 저장소로 작업하십시오.

하지만 당신이 정말로 그것을 할 필요가 있다면, 당신은 .git에 폴더의 이름을 변경 .git/configbare = falsebare = true을 변경 한 다음 git checkout을 할 수 있습니다.

+3

여기에 설명 된 이유 때문에 베어 레포를 사용합니다. http://gitready.com/advanced/2009/02/01/push-to-only-bare-repositories.html 베어 레포 기능이 모두 잘 작동합니다. 서브 모듈을 분리 된 작업 트리로 체크 아웃하는 것. – arlogb

1

실행중인 "git submodule update"에서 GIT_WORK_TREE를 설정할 수없는 것처럼 보입니다.이 작업은 슈퍼 프로젝트가 아닌 서브 모듈의 작업 트리로 사용하려고 시도합니다. 내 서버 업데이트 후 스크립트를 업데이트 했어

...

/usr/local/bin/git --git-dir="$PROJECT_DIR" --work-tree="$PROJECT_DEMO" checkout -f; 

cd "$PROJECT_DEMO"; 
/usr/local/bin/git --git-dir="$PROJECT_DIR" submodule update --init --recursive; 

공지 사항 나는 ENV 변수를 설정하지 않았고, 서브 모듈의 명령은 "--work 트리를 가지고 있지 않았다 "설정하십시오 ... 그것이 cwd에서 일할 필요가있는 것 같습니다.

+7

이것은 작동하지 않았습니다. remote : 치명적인 :/usr/libexec/git-core/git-submodule은 작업 트리없이 사용할 수 없습니다. – berkus

+0

'--work-tree = "$ PROJECT_DEMO"를 추가하면 나를 위해 일했습니다. – DisgruntledGoat

관련 문제