서브 모듈을 최신 커밋으로 업데이트
라이브러리 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
'IT story' 카테고리의 다른 글
자식 서브 모듈에서 변경 사항을 "커밋"하는 방법은 무엇입니까? (0) | 2020.04.13 |
---|---|
Oracle SQL Developer에서 쿼리 결과를 CSV로 내보내는 방법은 무엇입니까? (0) | 2020.04.13 |
파일의 특정 라인을 커밋하기 위해 커밋 (0) | 2020.04.13 |
Receiver가 Android에 등록되어 있는지 확인하는 방법 (0) | 2020.04.13 |
현재 시간을 datetime으로 얻는 방법 (0) | 2020.04.12 |