나는이 질문이 죽음에 맞았다는 것을 알고있다. 하지만 아직도 내 서브 모듈이 내 슈퍼 프로젝트에서 커밋을 참조하려고하는 이유를 명확하게 이해하지 못했습니다. 몇 개의 서브 모듈을 가지고있는 프로젝트가 있으며, 그 중 일부는 내가 기여하고자하는 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'
여기서 내가 뭘 잘못하고 있니?
모듈이 외부에서 업데이트 될 때 나는이 작업을 수행 할 수 있습니까? 나는 다른 곳에서 서브 모듈의 외부 체크 아웃을 통해 마스터로 나아가고있다. 수퍼 프로젝트는 서브 모듈의 읽기 전용 URL을 포함합니다. –
외부에서 repo를 업데이트 한 다음 수퍼 프로젝트 내부의 서브 모듈에 대해'git checkout master' 및'git pull origin master'를 실행 한 다음 커밋 할 수있었습니다. 하위 단계를 분기에 연결 한 다음 커밋하는 것이 빠진 것처럼 보입니다. 이걸 이해해 주셔서 감사합니다! –
포함 된 repo에서 실행될 때'git submodule '의 출력에주의하십시오. 하위 모듈의 한 지점에있을 필요는 없습니다. top repo는 서브 모듈의 포인터가 서브 모듈의'HEAD'가 가리키는 것과 같이 취급합니다. 이것은 헤드리스 일 수 있습니다 (태그를 체크 아웃 한 후처럼). "하위 모듈을 지점에 연결"하는 개념은 없습니다. 서브 모듈의 현재 커밋은 스테이지에서, 그리고이어서 커밋 할 때 작업 영역에있는 최상위 레포가 보는 것입니다. –