하위 모듈을 최신 커밋으로 업데이트
나는 도서관인 A 프로젝트를 가지고 있고 그것은 B 프로젝트에 사용됩니다.
A 프로젝트와 B 프로젝트 모두 github에 별도의 저장소가 있지만 B 내부에는 A의 하위 모듈이 있습니다.
저는 도서관에서 일부 클래스를 편집했는데, 그것은 A 레포에 있고, 원격 레포를 눌렀기 때문에 A 라이브러리가 업데이트됩니다.
이러한 업데이트는 하위 모듈이 이전 커밋을 참조하는 "참조"(하위 모듈)에 반영되지 않습니다.git의 서브모듈을 업데이트하려면 어떻게 해야 합니까?
하위 모듈 디렉토리를 입력합니다.
cd projB/projA
프로젝트 A에서 repo를 꺼냅니다(부모 프로젝트 B의 Git 상태는 업데이트되지 않습니다).
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 1.8 이후로 당신은 할 수 있습니다.
git submodule update --remote --merge
그러면 하위 모듈이 최신 원격 커밋으로 업데이트됩니다.그런 다음 상위 리포지토리의 gitlink가 업데이트되도록 변경 내용을 추가하고 커밋해야 합니다.
먼저, git add it
git add project/submodule_proj_name
그럼 git commit.
git commit -m 'gitlink to submodule_proj_name was updated'
힘을 내라
git push
그런 다음 변경 사항을 푸시하지 않으면 하위 모듈을 가리키는 SHA-1 ID가 업데이트되지 않으므로 다른 사용자가 변경 사항을 볼 수 없습니다.
하위 모듈을 업데이트하고 이를 커밋하는 경우 포함 또는 상위 레벨의 repo로 이동하여 변경 사항을 추가해야 합니다.
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')"
위의 답변 중 하나도 저에게 효과가 없었습니다.
이것이 상위 디렉토리 실행의 솔루션이었습니다.
git submodule update --init;
cd submodule-directory;
git pull;
cd ..;
git add submodule-directory;
이제 할 수 있습니다git commit그리고.git push
일부 다른 답변은 IMO가 약간 지저분해질 수 있는 서브모듈의 디렉토리 내에서 병합/커밋할 것을 권장합니다.
을 원격서 이름지있가다다정으로 합니다.origin그리고 우리는 그것을 원합니다.master하위 모듈의 분기로, 다음을 사용하는 경향이 있습니다.
git submodule foreach "git fetch && git reset --hard origin/master"
은 각 모듈에 합니다. 만약이것을 , 은 참: 각하모에서하수행합니다을정설. 있다수니않변경습할으원면이지하업을고작재드듈위▁note▁change다있▁on▁canod니습ule▁you▁reset참▁--고수▁this▁a▁subm▁you▁if▁hard▁each▁will:▁perform,:▁this이를 변경할 수 있습니다.--hard--soft.
솔루션 1
간단하게 말씀드리자면.
다음 명령을 실행하여 하위 모듈의 최신 정보를 가져옵니다.
git submodule update --remote --merge
or
git submodule update --remote
이제 상위 보고서의 참조를 업데이트해야 합니다. 이는 다음 명령을 사용하여 수행할 수 있습니다.
git add <<submodulesfoldername>>
참고: <> == 내 하위 모듈 폴더의 이름git add sub-modules 최근 커밋의 (: and push with your code, 최근 커밋의 참조가 추가되었을 것입니다.)
솔루션 2
위의 솔루션이 최신 버전을 제공하지 않는 경우 사용해 보십시오.
git submodule update --init --recursive
제 프로젝트는 서브모듈에 '최신'을 사용해야 합니다.Mac OS X 10.11, git 버전 2.7.1에서는 커밋을 수집하기 위해 하위 모듈 폴더로 '들어갈' 필요가 없었습니다.저는 그냥 규칙적으로 했습니다.
git pull --rebase
최고 수준에서, 그리고 그것은 내 서브 모듈을 정확하게 업데이트했습니다.
앤디의 반응은 $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
'programing' 카테고리의 다른 글
| VBA 단일 시트를 CSV로 저장(전체 워크북이 아님) (0) | 2023.05.04 |
|---|---|
| SELECT 문에서 "이전 행" 값에 액세스할 수 있는 방법이 있습니까? (0) | 2023.05.04 |
| 32비트 전용 Microsoft Common Controls(ListView)를 대체할 방법을 찾고 있습니다. (0) | 2023.05.04 |
| 여러 비동기 작업을 실행하고 모든 작업이 완료될 때까지 대기 (0) | 2023.05.04 |
| 파일을 세는 bash 명령어가 있습니까? (0) | 2023.05.04 |
