답변:
서브 모듈 디렉토리를 입력하십시오.
cd projB/projA
프로젝트 A에서 리포지토리를 가져옵니다 ( 부모 B의 프로젝트 상태는 업데이트 되지 않음 ).
git pull origin master
루트 디렉토리로 돌아가서 업데이트 확인 :
cd ..
git status
하위 모듈이 이전에 업데이트 된 경우 다음과 같이 표시됩니다.
# Not currently on any branch.
# Changed but not updated:
# (use "git add ..." to update what will be committed)
# (use "git checkout -- ..." to discard changes in working directory)
#
# modified: projB/projA (new commits)
#
그런 다음 업데이트를 커밋하십시오.
git add projB/projA
git commit -m "projA submodule updated"
최신 정보
@paul이 지적했듯이 git 1.8부터 사용할 수 있습니다.
git submodule update --remote --merge
하위 모듈을 최신 원격 커밋으로 업데이트합니다. 대부분의 경우 편리합니다.
git push
?
git push <remote> <branch>
예를 들어 git push origin dev
입니다.
git submodule update
커밋이 풀렸을 때 (프로젝터 B에서) 해당 서브 모듈 (프로젝터 A)에 대한 참조를 업데이트하는 경우에만 플래그없이 작동합니다. HEAD
proj A의 원격 추적 분기 를 참조하도록 proj B를 업데이트하려면 git submodule update --remote --merge
아래의 Paul Hatcher의 답변에 표시된대로 수행하십시오.
git 1.8부터 할 수 있습니다
git submodule update --remote --merge
서브 모듈을 최신 원격 커밋으로 업데이트합니다. 그런 다음 변경 사항을 커밋해야 부모 리포지토리의 gitlink가 업데이트됩니다.
git commit
그런 다음이 변경 사항을 적용하지 않으면 하위 모듈을 가리키는 SHA-1 ID가 업데이트되지 않으므로 변경 사항이 다른 사람에게 표시되지 않습니다.
git commit
다른 사람을 하더라도 여전히 그것을 보지 못한다. On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
modified: SubmoduleA (new commits)
modified: SubmoduleB (new commits)
git add
. 커밋하기 전에 업데이트 된 하위 모듈을 준비해야합니다 .
서브 모듈을 업데이트하고 커밋하는 경우 포함 또는 상위 레벨 저장소로 이동하여 변경 사항을 추가해야합니다.
git status
다음과 같은 내용이 표시됩니다.
modified:
some/path/to/your/submodule
서브 모듈이 동기화되지 않았다는 사실은
git submodule
출력은 다음과 같이 표시됩니다 :
+afafaffa232452362634243523 some/path/to/your/submodule
더하기 (+)는 하위 모듈이 최상위 리포지토리가 가리키는 위치를 가리키고 있음을 나타냅니다.
이 변경 사항을 추가하기 만하면됩니다.
git add some/path/to/your/submodule
그리고 그것을 저 지르십시오 :
git commit -m "referenced newer version of my submodule"
변경 사항을 푸시 할 때 먼저 서브 모듈에서 변경 사항을 푸시 한 다음 외부 저장소에서 참조 변경 사항을 푸시하십시오. 이런 식으로 업데이트하는 사람들은 항상 성공적으로 실행할 수 있습니다
git submodule update
하위 모듈에 대한 자세한 내용은 http://progit.org/book/ch6-6.html 에서 확인할 수 있습니다 .
+
를 실행할 때가 표시되지 않으면 git submodule
서브 모듈을 초기화하고 가져 왔는지 확인하십시오. 이에 대한 명령은 각각 git submodule init
및 git submodule update
입니다.
다른 답변 중 일부는 서브 모듈의 디렉토리 내에서 병합 / 커밋을 권장하며, IMO는 약간 혼란 스러울 수 있습니다.
원격 서버의 이름이 지정 origin
되었고 master
하위 모듈 의 분기를 원한다고 가정하면 다음 을 사용하는 경향이 있습니다.
git submodule foreach "git fetch && git reset --hard origin/master"
참고 : 각 하위 모듈에 대해 하드 리셋이 수행 --hard
됩니다 --soft
. 원하지 않는 경우로 변경할 수 있습니다 .
내 프로젝트는 하위 모듈에 '최신'을 사용해야합니다. Mac OSX 10.11, git 버전 2.7.1에서는 커밋을 수집하기 위해 하위 모듈 폴더로 'in'할 필요가 없었습니다. 난 그냥 정기적으로했다
git pull --rebase
최상위 레벨에서 하위 모듈을 올바르게 업데이트했습니다.
Andy의 답변은 $ path를 피하여 나를 위해 일했습니다.
git submodule foreach "(git checkout master; git pull; cd ..; git add \$path; git commit -m 'Submodule Sync')"
'$path'
git submodule update
경우 다른 누군가가 projA를 업데이트했을 때 할 수 있습니다 (새로운 커밋 ID를 얻습니다).