git) submodule 다루기

2023. 2. 15. 20:12분석 Python/구현 및 자료

submodule 추가하기


git submodule 추가하기

git submodule add <url>

확인하기

cat .gitmodules



추가한 내용 반영하기

git commit -m "add submodule"
git push
# git push origin main 
# git push origin master


서브모듈을 최신 버전으로 업데이트

submodule 최신으로 업데이트하기

git submodule foreach git pull origin main


submodule 안에 submodule이 없는 경우

git submodule update --remote


submodule 안에 submodule이 있는 경우

git submodule update --remote --recursive

서브모듈이 있는 git clone 하기

git clone --recurse-submodules <url>

git push가 안 될 때 / detached HEAD 문제 해결 방법


HEAD detached는 HEAD가 직접 커밋을 가리키는 것이라고 한다.
평상시에는 HEAD는 브랜치를 가리킨다.

Detached HEAD란?

먼저 HEAD는 Git이 현재 스냅샷을 참조하는 방법이다. 사실 git checkout 명령은 HEAD로 하여금 특정 브랜치나 커밋을 가리키도록 업데이트 하는 것 뿐이다. HEAD가 브랜치를 가리킬 때는 문제가 없다. HEAD는 브랜치를 가리키고, 브랜치는 최신 커밋을 가리키니까.
https://velog.io/@nittre/Git-git-checkout-%EA%B3%BC-detached-HEAD

그러나 당신이 커밋을 직접 check out 하면 'detached HEAD' 상태가 된다. 커밋을 직접 check out 한다는 것은 브랜치의 특정 커밋을 가리킨다는 것이다.
아래의 그림에서는 HEAD가 브랜치가 아닌 커밋 b를 가리키고 있다.

우리의 작업 공간이 커밋 b이기 때문에, 기존 브랜치에 commit할 수가 없다. 이미 커밋 c가 있기 때문이다.
그래서 Git은 HEAD가 특정 커밋을 가리키는 이 상태를 detaced HEAD(분리된 머리) 상태라고 명명했다.
detached HEAD 상태에서 작업은 할 수 있다. 커밋도 할 수 있다. 다만 그것을 다른 작업과 merge하거나 리모트에 pull 할 수는 없다. detached HEAD 상태에서 작업한 내용물들은 어느 브랜치에도 속해있지 않기 때문이다. 따라서 detached HEAD 상태에서 다른 브랜치로 checkout 하면 다시 detached HEAD 상태 때 했던 작업으로 돌아갈 수 없다. (detached HEAD 일 때 했던 커밋 ID를 알면 돌아갈 수는 있긴 하지만 어렵다.)
만약 특정 커밋에서 했던 작업을 살리고 싶다면 어떻게 해야 할까?
간단하다. detached HEAD 상태일 때 했던 작업을 브랜치로 만들어주는 것이다.

$ git checkout -b <new branch name>



https://aroma-dev.tistory.com/4

git push가 안 될 때 / detached HEAD 문제 해결 방법

git을 아직도 잘 못 다루는 것 같다. 맨날 하는 add/commit/push/pull은 쉽게 사용하지만, 과거 commit으로 checkout했다가 다시 불러오고 하다보면 꼭 문제가 생긴다. 오늘의 문제는 detached HEAD라면서 remote r

aroma-dev.tistory.com

git branch temp
git checkout temp
git branch -f master temp
git checkout main # master
git branch -d temp
git push

참고


https://git-scm.com/book/ko/v2/Git-%EB%8F%84%EA%B5%AC-%EC%84%9C%EB%B8%8C%EB%AA%A8%EB%93%88

Git - 서브모듈

gitmodules 파일에 있는 URL은 조건에 맞는 사람이면 누구든지 Clone 하고 Fetch 할 수 있도록 접근할 수 있어야 한다. 예를 들어 다른 사람이 Pull을 하는 URL과 라이브러리의 작업을 Push 하는 URL이 서로

git-scm.com

728x90