2012-09-27 5 views
1

나는이 질문이 죽음에 맞았다는 것을 알고있다. 하지만 아직도 내 서브 모듈이 내 슈퍼 프로젝트에서 커밋을 참조하려고하는 이유를 명확하게 이해하지 못했습니다. 몇 개의 서브 모듈을 가지고있는 프로젝트가 있으며, 그 중 일부는 내가 기여하고자하는 github 저장소를 참조합니다. ,git submodule을 올바르게 업데이트하는 방법은 무엇입니까?

 
[[email protected] ganglia]$ cd ../.. 
[[email protected] puppet]$ git add modules/ganglia 
[[email protected] puppet]$ git commit -m 'updated ganglia module' 
[ganglia c172591] updated ganglia module 
1 files changed, 1 insertions(+), 1 deletions(-) 

나는 현재 신경 가지에 있어요 :

 
[[email protected] puppet]$ cd modules/ganglia 
[[email protected] ganglia]$ git branch 
* (no branch) 
    master 
[[email protected] ganglia]$ git pull origin master 
remote: Counting objects: 8, done. 
remote: Compressing objects: 100% (4/4), done. 
remote: Total 6 (delta 4), reused 4 (delta 2) 
Unpacking objects: 100% (6/6), done. 
From https://github.com/andyshinn/puppet-ganglia 
* branch   master  -> FETCH_HEAD 
Merge made by recursive. 
README | 1 + 
1 files changed, 1 insertions(+), 0 deletions(-) 

지금 나는 superproject에서 모듈에 대한 참조를 업데이트 할 : 모듈을 업데이트 한 후, 나는 모듈의 변화를 당겨 그래서 (2 differen't의 URL입니다) 내 원점 밀어 :

 
[[email protected] puppet]$ git push origin ganglia 
Counting objects: 8, done. 
Delta compression using up to 2 threads. 
Compressing objects: 100% (6/6), done. 
Writing objects: 100% (6/6), 616 bytes, done. 
Total 6 (delta 4), reused 0 (delta 0) 
To [email protected]:andyshinn/puppet.git 
    1876698..c172591 ganglia -> ganglia 
Counting objects: 5, done. 
Delta compression using up to 2 threads. 
Compressing objects: 100% (3/3), done. 
Writing objects: 100% (3/3), 323 bytes, done. 
Total 3 (delta 2), reused 0 (delta 0) 
remote: From /var/lib/puppet/repo 
remote: dcd1fcc..c172591 ganglia -> origin/ganglia 
remote: From https://github.com/andyshinn/puppet-ganglia 
remote: a0c4e21..975c92f master  -> origin/master 
remote: fatal: reference is not a tree: c5defdeae006c7b87058cc5c79aef60087b63a6b 
remote: Unable to checkout 'c5defdeae006c7b87058cc5c79aef60087b63a6b' in submodule path 'modules/ganglia' 
remote: Updating existing environment ganglia 
To [email protected]:repo 
    dcd1fcc..c172591 ganglia -> ganglia 

원격는이 후받을 다른 폴더에 체크 아웃 지점에 스크립트 및 각 git submodule update --init를 실행합니다. 원본 저장소에 수동으로 연결하면 문제를 확인할 수 있습니다.

 
-bash-4.1$ git pull 
Already up-to-date. 
-bash-4.1$ git submodule update --init 
fatal: reference is not a tree: c5defdeae006c7b87058cc5c79aef60087b63a6b 
Unable to checkout 'c5defdeae006c7b87058cc5c79aef60087b63a6b' in submodule path 'modules/ganglia' 

여기서 내가 뭘 잘못하고 있니?

답변

0

당신이 당길 때 당신은 지부에 없었습니다. 머리가 당신이 원하는 곳을 가리켜 야합니다. 당신의 서브 모듈을 업데이트하는 적절한 방법은 지금

git checkout master 
git push origin master 

하는 것입니다 현재 당신이 원하는 곳으로 포인트를 커밋합니다. 이렇게하면 슈퍼 프로젝트에서 서브 모듈 변경 사항을 추가하고 추가, 커밋 및 푸시 할 수 있습니다.

다른 대안은 서브 모듈의 현재 HEAD이 어디의 지점 또는 태그를 만들고 그것을 밀어하는 것입니다

git tag interesting HEAD 
git push origin interesting 
cd ../.. 
git add submodule/path 
git commit -m "updated my submodule" 
git push 
+0

모듈이 외부에서 업데이트 될 때 나는이 작업을 수행 할 수 있습니까? 나는 다른 곳에서 서브 모듈의 외부 체크 아웃을 통해 마스터로 나아가고있다. 수퍼 프로젝트는 서브 모듈의 읽기 전용 URL을 포함합니다. –

+0

외부에서 repo를 업데이트 한 다음 수퍼 프로젝트 내부의 서브 모듈에 대해'git checkout master' 및'git pull origin master'를 실행 한 다음 커밋 할 수있었습니다. 하위 단계를 분기에 연결 한 다음 커밋하는 것이 빠진 것처럼 보입니다. 이걸 이해해 주셔서 감사합니다! –

+0

포함 된 repo에서 실행될 때'git submodule '의 출력에주의하십시오. 하위 모듈의 한 지점에있을 필요는 없습니다. top repo는 서브 모듈의 포인터가 서브 모듈의'HEAD'가 가리키는 것과 같이 취급합니다. 이것은 헤드리스 일 수 있습니다 (태그를 체크 아웃 한 후처럼). "하위 모듈을 지점에 연결"하는 개념은 없습니다. 서브 모듈의 현재 커밋은 스테이지에서, 그리고이어서 커밋 할 때 작업 영역에있는 최상위 레포가 보는 것입니다. –

관련 문제