IT story

서브 모듈을 최신 커밋으로 업데이트

hot-time 2020. 4. 13. 08:19
반응형

서브 모듈을 최신 커밋으로 업데이트


라이브러리 A 프로젝트 A가 있고 프로젝트 B에서 사용됩니다.

프로젝트 A와 B는 모두 github But에 별도의 저장소를 가지고 있습니다.

리포지토리 A에있는 라이브러리의 일부 클래스를 편집하고 원격 리포지토리를 푸시하여 라이브러리 (리포지토리 A)가 업데이트되었습니다.

이 업데이트는 하위 모듈이 이전 커밋을 참조하는 "참조"(하위 모듈)에 반영되지 않습니다. git에서 하위 모듈을 업데이트하려면 어떻게해야합니까?


서브 모듈 디렉토리를 입력하십시오.

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"

git 1.8부터 할 수 있습니다

git submodule update --remote --merge

서브 모듈을 최신 원격 커밋으로 업데이트합니다. 그런 다음 변경 사항을 커밋해야 부모 리포지토리의 gitlink가 업데이트됩니다.

git commit

그런 다음이 변경 사항을 적용하지 않으면 하위 모듈을 가리키는 SHA-1 ID가 업데이트되지 않으므로 변경 사항이 다른 사람에게 표시되지 않습니다.


서브 모듈을 업데이트하고 커밋하는 경우 포함 또는 상위 레벨 저장소로 이동하여 변경 사항을 추가해야합니다.

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 foreach "(git checkout master; git pull; cd ..; git add '$path'; git commit -m 'Submodule Sync')"

다른 답변 중 일부는 서브 모듈의 디렉토리 내에서 병합 / 커밋을 권장하며, 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')"

참고 URL : https://stackoverflow.com/questions/8191299/update-a-submodule-to-the-latest-commit

반응형