개발관련/Git

Git 하위 모듈을 오리진의 최신 커밋으로 업데이트

Rateye 2021. 7. 28. 10:22
728x90
반응형
질문 : Git 하위 모듈을 오리진의 최신 커밋으로 업데이트

Git 하위 모듈이있는 프로젝트가 있습니다. 그것은 ssh : // ... URL에서 왔고 커밋 A에 있습니다. 커밋 B가 해당 URL로 푸시되었으며 서브 모듈이 커밋을 검색하고 변경하기를 원합니다.

자, 내 이해는 git submodule update 가 이것을해야하지만 그렇지 않다는 것입니다. 아무것도하지 않습니다 (출력 없음, 성공 종료 코드). 예를 들면 다음과 같습니다.

$ mkdir foo
$ cd foo
$ git init .
Initialized empty Git repository in /.../foo/.git/
$ git submodule add ssh://user@host/git/mod mod
Cloning into mod...
user@host's password: hunter2
remote: Counting objects: 131, done.
remote: Compressing objects: 100% (115/115), done.
remote: Total 131 (delta 54), reused 0 (delta 0)
Receiving objects: 100% (131/131), 16.16 KiB, done.
Resolving deltas: 100% (54/54), done.
$ git commit -m "Hello world."
[master (root-commit) 565b235] Hello world.
 2 files changed, 4 insertions(+), 0 deletions(-)
  create mode 100644 .gitmodules
   create mode 160000 mod
   # At this point, ssh://user@host/git/mod changes; submodule needs to change too.
   $ git submodule init
   Submodule 'mod' (ssh://user@host/git/mod) registered for path 'mod'
   $ git submodule update
   $ git submodule sync
   Synchronizing submodule url for 'mod'
   $ git submodule update
   $ man git-submodule 
   $ git submodule update --rebase
   $ git submodule update
   $ echo $?
   0
   $ git status
   # On branch master
   nothing to commit (working directory clean)
   $ git submodule update mod
   $ ...
   

나는 또한 git fetch mod 시도했지만 (비밀번호를 요구하지 않기 때문에 가능하지 않습니다!) git loggit show 는 새로운 커밋의 존재를 거부합니다. 지금까지 rm -ing하고 다시 추가했지만 이것은 원칙적으로 잘못되었고 실제로는 지루합니다.

반응형
답변

git submodule update 명령은 실제로 하위 모듈이 수퍼 프로젝트의 색인에 이미 지정된 커밋을 체크 아웃하기를 원한다고 Git에 알립니다. 원격에서 사용할 수있는 최신 커밋으로 하위 모듈을 업데이트하려면 하위 모듈에서 직접 수행해야합니다.

요약하자면 :

# Get the submodule initially
   git submodule add ssh://bla submodule_dir
   git submodule init
   
   # Time passes, submodule upstream is updated
   # and you now want to update
   
   # Change to the submodule directory
   cd submodule_dir
   
   # Checkout desired branch
   git checkout master
   
   # Update
   git pull
   
   # Get back to your project root
   cd ..
   
   # Now the submodules are in the state you want, so
   git commit -am "Pulled down update to submodule_dir"
   

또는 바쁜 사람이라면 :

git submodule foreach git pull origin master
   
출처 : https://stackoverflow.com/questions/5828324/update-git-submodule-to-latest-commit-on-origin
728x90
반응형