programing

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

fastcode 2023. 4. 20. 22:57
반응형

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

Git 서브모듈로 프로젝트를 진행하고 있습니다.이것은 ssh://... URL에서 온 것으로, 커밋 A에 있습니다.커밋 B가 해당 URL로 푸시되었습니다.서브모듈이 커밋을 취득하여 변경해 주었으면 합니다.

로는 ,, 가, 기, 기, now, now, now, now, now, now.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 log ★★★★★★★★★★★★★★★★★」git show새로운 커밋의 존재를 거부합니다.지금까지 나는 그저rm모듈을 다시 장착하지만 이는 원칙적으로 잘못된 것이며 실제로 지루합니다.

이 명령어는 실제로 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

1옵션인 Git 1.8.2가 .--remote이 동작을 유효하게 합니다..

git submodule update --remote --merge

는 각 서브모듈의 업스트림에서 최신 변경을 가져와 머지하고 서브모듈의 최신 리비전을 확인합니다.매뉴얼에 기재되어 있는 와 같이:

--리모트

이 옵션은 update 명령에만 유효합니다.슈퍼 프로젝트의 기록된 SHA-1을 사용하여 하위 모듈을 업데이트하는 대신 하위 모듈의 원격 추적 브랜치 상태를 사용하십시오.

은 '달리다'에합니다.git pull <remote> <default_branch> (일부러)git pull origin master ★★★★★★★★★★★★★★★★★」git pull origin main각 서브모듈에 하고 있습니다은, 통상은 입니다).를 각 서브모듈에 포함시킵니다.이것은 일반적으로 필요한 것입니다.

프로젝트 부모 디렉토리에서 다음을 실행합니다.

git submodule update --init

또는 재귀 서브모듈이 실행되고 있는 경우:

git submodule update --init --recursive

서브모듈이 갱신되는 동안 로컬서브모듈 디렉토리가 로컬로 변경되기 때문에 아직 동작하지 않을 수 있습니다.

대부분의 경우 로컬 변경은 커밋할 필요가 없습니다.서브모듈의 파일 삭제 등으로 인해 발생할 수 있습니다.이 경우 로컬 서브모듈 디렉토리와 프로젝트 부모 디렉토리에서 리셋을 수행하고 다시 실행합니다.

git submodule update --init --recursive

메인 프로젝트는 서브모듈이 있어야 하는 특정 커밋을 가리킵니다. git submodule update는 초기화되어 있는 각 서브모듈에서 그 커밋을 체크하려고 합니다.서브모듈은 실제로 독립된 저장소입니다.서브모듈에 새로운 커밋을 생성하여 푸시하는 것만으로는 충분하지 않습니다.주 프로젝트에 새 버전의 하위 모듈도 명시적으로 추가해야 합니다.

때문에 경우 '커밋'의 해 보겠습니다이것이 이 서브모듈의 힌트라고 가정해 보겠습니다.master:

cd mod
git checkout master
git pull origin master

이제 메인 프로젝트로 돌아가서 서브모듈을 스테이징하고 다음을 커밋합니다.

cd ..
git add mod
git commit -m "Updating the submodule 'mod' to the latest version"

이제 메인 프로젝트의 새 버전을 푸시합니다.

git push origin master

메인 , ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★」git submodule update서브모듈이 초기화되었다고 가정하면 서브모듈이 갱신됩니다.

이 설명에서는 두 가지 다른 시나리오가 혼재되어 있는 것 같습니다.

시나리오 1

부모 리포지토리의 서브모듈 포인터를 사용하여 부모 리포지토리가 가리키는 각 서브모듈의 커밋을 체크합니다.아마도 처음에 모든 서브모듈을 반복하여 리모트에서 업데이트/풀한 후입니다.

이것은 지적한 바와 같이,

git submodule foreach git pull origin BRANCH
git submodule update

시나리오 2는 OP가 목표로 하고 있는 것이라고 생각합니다.

하나 이상의 서브모듈에서 새로운 작업이 수행되었으며 1) 이러한 변경 내용을 가져오고 2) 상위 저장소를 업데이트하여 이 서브모듈의 HEAD(최신) 커밋을 가리킵니다.

이것은 에 의해서 행해집니다.

git submodule foreach git pull origin BRANCH
git add module_1_name
git add module_2_name
......
git add module_n_name
git push origin BRANCH

부모 저장소의 커밋 포인터를 갱신하는 스크립트 등 n개의 서브모듈에 대한 n개의 경로를 하드코드해야 하기 때문에 그다지 실용적이지 않습니다.

부모 포인터를 것이 (「 」 「 」 「 」 「 」 「 」 「 」 「 」 「 」 「 」 「 」 「 」 「 」 「 」를 사용합니다.git add서브모듈의 선두를 가리킵니다.

이를 위해 다음과 같은 작은 Bash 스크립트를 만들었습니다.

git-update-submodules.

#!/bin/bash

APP_PATH=$1
shift

if [ -z $APP_PATH ]; then
  echo "Missing 1st argument: should be path to folder of a git repo";
  exit 1;
fi

BRANCH=$1
shift

if [ -z $BRANCH ]; then
  echo "Missing 2nd argument (branch name)";
  exit 1;
fi

echo "Working in: $APP_PATH"
cd $APP_PATH

git checkout $BRANCH && git pull --ff origin $BRANCH

git submodule sync
git submodule init
git submodule update
git submodule foreach "(git checkout $BRANCH && git pull --ff origin $BRANCH && git push origin $BRANCH) || true"

for i in $(git submodule foreach --quiet 'echo $path')
do
  echo "Adding $i to root repo"
  git add "$i"
done

git commit -m "Updated $BRANCH branch of deployment repo to point to latest head of submodules"
git push origin $BRANCH

실행하려면 실행

git-update-submodules.sh /path/to/base/repo BRANCH_NAME

정교

먼저 $BRANCH(두 번째 인수)라는 이름의 브랜치가 모든 저장소에 존재한다고 가정합니다.이 문제를 더 복잡하게 만들어도 좋습니다.

첫 번째 섹션은 인수가 존재하는지 확인하는 것입니다.그런 다음 부모 저장소의 최신 정보를 가져옵니다(풀만 할 때는 --ff(빠른 전달)를 사용하는 것이 좋습니다).베이스 오프(BTW)를 했습니다.

git checkout $BRANCH && git pull --ff origin $BRANCH

새로운 서브모듈이 추가되었거나 아직 초기화되지 않은 경우 다음과 같은 서브모듈 초기화가 필요할 수 있습니다.

git submodule sync
git submodule init
git submodule update

다음으로 모든 서브모듈을 업데이트/풀합니다.

git submodule foreach "(git checkout $BRANCH && git pull --ff origin $BRANCH && git push origin $BRANCH) || true"

점에 주의해 주십시오.우선, 나는 Git 명령어를 연결한다.&&즉, 명령어는 실행해야 합니다 、 전 、 전 、 전 、 - 、 - 、 - - - - - - - - - - - - - - - 。

(리모트상에서 새로운 것이 발견되었을 경우) 가능한 풀(pull)이 성공한 후 클라이언트에 merge-commit이 남아 있지 않도록 push를 실행합니다.다시 말씀드리지만, 당기는 것이 실제로 새로운 것을 가져올 때만 발생합니다.

★★★★★★★★★★★★★★★★★★★★★★★★★★★★」|| true 에러에 되는 것을 합니다.이 작업을 수행하려면 반복 내의 모든 것을 큰따옴표로 묶어야 하며 Git 명령어는 괄호(operator precedence)로 묶어야 합니다.

마음에 드는 부분:

for i in $(git submodule foreach --quiet 'echo $path')
do
  echo "Adding $i to root repo"
  git add "$i"
done

합니다.--quiet'MOUL_PATH 입력 중'입니다.「」를 사용합니다.'echo $path'(싱글모듈로 해야 합니다)서브모듈로의 패스가 출력에 써집니다.

상대 「」 「」 「」)$(...) - 하여 실행한다.) - "반복한다git add $i이치노

마지막으로 상위 저장소가 업데이트되었음을 설명하는 메시지가 포함된 커밋입니다.이 커밋은 아무것도 실행되지 않은 경우 기본적으로 무시됩니다.이걸 원점으로 밀면 끝이야

Jenkins 작업에서 실행 중인 스크립트가 있습니다. 이 스크립트는 이후에 예정된 자동 배포에 연결되며 매우 효과적입니다.

이게 누군가에게 도움이 됐으면 좋겠어요.

참고로 서브모듈의 최신 업데이트 커밋 형식은 다음과 같습니다.

git submodule update --recursive --remote --force

Gabriel Staples의 답변을 참조해 주십시오.--merge --force.

옵션을 사용하면 포함된 저장소의 인덱스로 지정된 커밋이 이미 서브모듈에서 체크아웃된 커밋과 일치하더라도 체크 아웃이 이루어집니다.

--merge 옵션은 하지 않은 것 .이래서''


이전 형식은 다음과 같습니다.

git submodule foreach --quiet git pull --quiet origin

하지만...이 두 번째 폼은 '조용한' 것이 아닙니다.

Nguy2n Thai Ng duc Duy()pcloudscommit a282f5a(2019년 4월 12일)를 참조하십시오.
(커밋 f1c9f6c, 2019년 4월 25일 Junio C Hamano에 의해 병합됨)

submodule foreach ": "를 수정합니다.<command> --quiet 못하다

로빈이 보고한 것은

git submodule foreach --quiet git pull --quiet origin

더 이상 조용하지 않아요.
fc1b924 이전에는 조용해야 합니다.(submodule : 포 :submodule아주머니'foreachC로, 로 변환됩니다. 왜냐하면 CC, 2018-05-10, Git v2.19.0-rc0)은 셸에서 C로 변환됩니다.parseopt럼럼 、 우션션션션옵 는는는는 。

git pull는 "아니다"처럼합니다.--quiet을 사용하다

은, 「 」가 원인으로 발생합니다.parseoptsubmodule--helper 두 가지를 하려고 합니다.--quiet처럼, 포어치의 옵션이 아닌 것처럼.git-pull의 discriptions
구문 분석된 옵션이 명령줄에서 제거됩니다.요.

git pull origin

도우미를 호출할 때 " " " " 를 -- "git pull는 "이렇게 하다"를 멈춥니다.parseopt 않는 submodule--helper foreach.

PARSE_OPT_KEEP_UNKNOWN안전 대책으로 제거한다. parseopt알 수 없는 옵션이 표시되지 않거나 뭔가 잘못되어 있습니다.제가 보고 있는 동안 몇 가지 사용현황 업데이트도 있습니다.

동안 저는 '이렇게 하다'도.-- " " " " " " " 를 하는 다른 하위 에 " "$@ ~ " 。submodule--helper . . .$@이런 '는 '경로', '경로', '경로', '경로', '경로'가 될 확률이 낮습니다--something-like-this.
유효하다.git-submodule는 옵션과 경로의 해석과 분류를 실시했습니다.
submodule--helper 길을 는 안 git-submodule옵션처럼 보여도 선택지가 될 수 있어요


Git 2.23(2019년 3월git submodule foreach각 에서 올바르게되지 않았습니다이 경우 "는 각 서브모듈에서 됩니다.--recursive.'

Morian Sonnet()momoson의 commit 30db18b(2019년 6월 24일)를 참조하십시오.
(Junio C Hamano에 의해 병합 ----commit 968eecb, 2019년 7월 9일)

submodule foreach: "재귀 수정"

호출:

git submodule foreach --recursive <subcommand> --<option>

"" " " " " " 가 됩니다.--<option> 수 없다submodule--helper.
은 물론, 것은, 지,, that,, 지 that, 지 that, that that, that that의 경우에만 가능합니다.<option>에는 유효하지 않은 옵션입니다.git submodule foreach.

그 이유는 위의 콜이 내부적으로 서브모듈에 대한 콜로 변환되기 때문입니다.도움말:

git submodule--helper foreach --recursive \
   -- <subcommand> --<option>

은 첫 됩니다.submodule foreach

git --super-prefix <submodulepath> submodule--helper \
  foreach --recursive <subcommand> --<option>

첫 번째 레벨 서브모듈 안에 있습니다.하위 명령 앞에 있는 이중 대시가 없습니다.

최근에야 합니다.PARSE_OPT_KEEP_UNKNOWN git submodule foreach커밋 a282f5a에서 삭제되었습니다.
따라서 인수 해석은 더블 대시로 올바르게 종료되지 않기 때문에 알 수 없는 옵션이 불만입니다.

이 커밋은 재귀 중에 하위 명령 앞에 이중 대시(double dash)를 추가하여 문제를 해결합니다.


Git 2.29 (Q4 2020) 이전,git submodule update --quiet(man) ""는 "기본 재배치"와 "풀" 명령어의 기초가 되는 스켈링을 하지 않았습니다.

Theodore Dubois()tbodt3ad0401(2020년 9월 30일)을 참조하십시오.
(2020년 10월 5일 Junio C Hamano의해 병합됨 -- commit 300cd14)

: "와의 Marge/Rebase를 무음으로 합니다submodule update.--quiet

서명자:테오도르 뒤보아

다음과 같은 명령어

$ git pull --rebase --recurse-submodules --quiet  

마지 리베이스
「 」를 .--quiet를 호출할때 됩니다.rebase및 " " " "merge

또한 -v의 구문 분석도 수정합니다.

e84c3cf3의 경우(')git-submodule.sh.cmd_update2018-08-14, Git v2.19.0-rc0 --merge)는 ""를 선택하도록 가르쳤다.git submodule update(man)--quiet라고 하는 것은 것 .${GIT_QUIET것 「:+--quiet」는 「0」으로 하는 것이 아니라, 「:+--quiet」이 .변수는 설정 해제하지 않고 ""로 표시됩니다.--quiet"가 기본 명령어로 전달됩니다.


2 2022 Git 2.38(Q3 2022) 에서는git-submodule.sh'이라는 뜻의 '빌트인'으로.submodule--helper위에서 설명한 문제가 점점 희미해지고 있습니다.

커밋 5b893f7, 커밋 2eec463, 커밋 8f12108, 커밋 36d4516, 커밋 6e556c4, 커밋 0d68ee7, 커밋 d9c7f69, 커밋 da3aae9, 커밋 757d092, 커밋 960fad9, 커밋 8577525 (2022년 6월 28일)avar참조해 주십시오.
Glen Choo()chooglen의 커밋 b788fc6(2022년 6월 28일)을 참조하십시오.
(Junio C Hamano에 의해 병합 ---- commit 361cbe6, 2022년 7월 14일)

git-submodule.sh: " 를 사용합니다.$quiet 아니라 ""입니다.$GIT_QUIET"

서명자 : Avar Arnfjörd Bjarmason

때 을 삭제해 주세요."$GIT_QUIET"변하다$quiet" b3c5f5c (")이후 계속submodule core : "코어 이동"cmd_update()로직 투 C", 2022-03-15, Git v2.36.0-rc0 -- merge)에서는 "say" 함수를 사용하지 않았습니다.git-sh-setup.sh의 ''' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''GIT_QUIET".

는 여전히 리 we we we we we we we we we we we we we we we 。--quiet우리만의 용도를 위해서라도, 우리만의 변수를 사용해 봅시다.
가 '우리'는 '우리만 게요.--quiet ~ " 。git submodule--helper 「」의 주세요.say 입니다.

단순하게 서브모듈을 가져오려면 다음과 같이 가져옵니다.

git submodule update --init --recursive

다음으로 최신 마스터 브랜치로 업데이트를 진행합니다(예:

git submodule foreach git pull origin master
git pull --recurse-submodules

그러면 모든 최신 커밋이 꺼집니다.

최신 커밋으로 업데이트 할 수 있습니다.

git submodule update --recursive --remote --init

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★.git최신 버전으로 업데이트하고 누락된 파일을 다시 복구합니다.

에).--force여기에서는 언급되지 않은 것 같습니다.) 하지만 새로운 커밋은 이루어지지 않았습니다.

git submodule update --init --recursive --force

이것은 다음과 같습니다.

git submodule update --recursive --remote --merge --force

호스트 브랜치를 모르는 경우는, 다음과 같이 합니다.

git submodule foreach git pull origin $(git rev-parse --abbrev-ref HEAD)

메인 Git 저장소의 브랜치를 취득하고 각 서브모듈에 대해 같은 브랜치를 취득합니다.

@Jason은 어떤 면에서는 맞지만 완전히 맞는 것은 아니다.

갱신하다

등록된 서브모듈(즉, 누락된 서브모듈 복제)을 업데이트하고 포함된 저장소의 인덱스에 지정된 커밋을 체크아웃합니다.그러면 --rebase 또는 --merge가 지정되지 않은 경우 또는 키 서브모듈이 분리됩니다.$name.update는 rebase 또는 merge로 설정되어 있습니다.

so,는,git submodule update는 체크아웃을 수행하지만, 이는 포함된 저장소의 인덱스에 있는 커밋에 대한 것입니다.새로운 커밋 업스트림은 아직 전혀 인식되지 않습니다. 서브모듈로를 커밋한 후를합니다.git submodule update.

을 희망하시는 경우master수 .

git submodule foreach git checkout master

repo의 모든 git 서브모듈을 업데이트하는 방법(두 가지 매우 다른 작업을 수행하는 방법!)

간단한 개요

# Option 1: as a **user** of the outer repo, pull the latest changes of the
# sub-repos as previously specified (pointed to as commit hashes) by developers
# of this outer repo.
# - This recursively updates all git submodules to their commit hash pointers as
#   currently committed in the outer repo.
git submodule update --init --recursive

# Option 2. As a **developer** of the outer repo, update all subrepos to force
# them each to pull the latest changes from their respective upstreams (ex: via
# `git pull origin main` or `git pull origin master`, or similar, for each
# sub-repo). 
git submodule update --init --recursive --remote
#
# For just Option 2 above: now add and commit these subrepo changes 
# you just pulled
git add -A
git commit -m "Update all subrepos to their latest upstream changes"

세부 사항

  1. 옵션 1: Outer repo 사용자로서 모든 서브모듈을 Outer repo 개발자가 의도한 상태로 만듭니다.
    git submodule update --init --recursive
    
  2. 옵션 2: 외부 repo 개발자로서 모든 서브모듈을 각 리모트리포트의 디폴트브런치에 푸시된 최신 커밋으로 갱신합니다(즉, 모든 서브리포를 각 서브리포의 개발자가 의도한 최신 상태로 갱신합니다).
    git submodule update --init --recursive --remote
    
    을...을 사용하는 대신git submodule foreach --recursive git pull origin master ★★★★★★★★★★★★★★★★★」git submodule foreach --recursive git pull origin main.

위의 두 가지 옵션 모두에 대한 최선의 답변은 다음 명령어를 사용하지 않는 으로 보입니다.--merge ★★★★★★★★★★★★★★★★★」--force이치하다

위에서 사용한 옵션에 대한 설명:

  • --init 복제하지 않은합니다.
  • --recursive내의 에 대해 이 합니다.이러한 서브모듈은 으로 다운됩니다.
  • ★★★★★★★★★★★★★★★★★」--remote는 서브모듈의 디폴트리모트에 있는 디폴트브런치의 최신 커밋으로 서브모듈을 갱신하도록 지시하고 있습니다. 것과 git pull origin master ★★★★★★★★★★★★★★★★★」git pull origin main예를 들어 대부분의 경우, 각 서브모듈에 대해서.가장 repo repo('repo('repo)'를 그대로 .--remotesyslog.syslog.syslog.

git submodule foreach --recursive git pull 자주 합니다.) (이것)실패가 빈번하게 발생합니다) vsgit submodule update --recursive --remote가 있습니다

저는 이 답변 아래에 다음과 같은 의견을 남겼습니다.저는 그것들이 중요하다고 생각하기 때문에 제 답변에도 넣고 있습니다.

「」라고 하는 것이 있습니다.git submodule foreach --recursive git pull효과가 있을지도 모릅니다.른른 for for forgit submodule foreach --recursive git pull origin master그 대신 필요한 것일 수도 있어요.른른 for for forgit submodule foreach --recursive git pull origin main필요한 건지도 몰라요그리고 다른 사람들에게는, 그것들 중 어느 것도 효과가 없을지도 모른다!필요할 수도 있습니다.git submodule foreach --recursive git pull upstream develop,예를 들어.아니면, 더 나쁜건, 더 나쁜건, git submodule foreach각 서브모듈이 기본 리모트브런치 및 기본브런치에서 자신을 업데이트하기 위해 다른 명령어가 필요할 수 있기 때문에 외부 repo에서 사용할 수 있는 명령어입니다.그러나 모든 경우에 이 방법은 효과가 있습니다.모든 경우에 몇 가지 중 하나를 사용할 수도 있습니다.git submodule foreach이치노대신:

git submodule update --recursive --remote

어쨌든, 이 답변 아래, 이것에 관한 제 코멘트는 다음과 같습니다.

이 (1/4) @DavidZ, @DavidZ라고 생각합니다.git submodule foreach git pull ★★★★★★★★★★★★★★★★★」git submodule update --remote동일하며, 후자는 단순히 새로운 명령어일 뿐입니다.하지만 그것들은 같은 것이 아니다. git submodule foreach git pull여러 상황에서 실패한다.git submodule update --remote정상적으로 동작합니다!서브모듈이 그것을 가리키는 브랜치가 없는 커밋해시를 가리키고 있는 경우(실제 개발에서는, 외부 레포에 특정 버전의 서브모듈을 필요로 하는 경우가 자주 있습니다), 그 서브모듈은...

입니다. (2/4)...헤드를 사용하다 「」는,git submodule foreach git pullgit pull업스트림브런치를 가질 수 없기 때문에 그 서브모듈에 접속합니다. git submodule update --remote단, 동작은 양호합니다!호출하는 것 같습니다.git pull origin main에서 '''의 경우''를 선택합니다.origin이며, 「」는 「」입니다.main 「」입니다.git pull origin master 「」의 는,origin입니다만, 「」는 「」입니다.master을 사용하다

더 , (3/4) 더 멀리,git submodule foreach git pull origin master.git submodule update --remote이 사용되기 때문에으로 동작합니다.master및 그 외의 에서는, 「」를 사용하고 있습니다.main이 GitHub에서 master로로 합니다.main최근 미국에서 노예제도와 관련된 용어("master"와 "slave")에서 벗어나기 위해.

자주 을 더 하기 했습니다.또, (4/4)는 필요없다는 것을 시키기 위해서입니다git pull충분하지 않은 경우가 많습니다.git pull origin master하지 않을 동작하지 않을 수도 있습니다.git pull origin main전자가 작동하지 않을 때 효과가 있을 수도 있고, 심지어 효과가 없을 수도 있고, 그들 스스로는 같지 않을 도 있습니다.git submodule update --remote는 단순히 를 실행할 수 git pull <default_remote> <default_branch>각 서브모듈의 리모트 및 브랜치를 필요에 따라 조정합니다.

관련 및 기타 조사

  1. git submodule주의: https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles#git-submodules-and-git-lfs-how-to-clone-this-repo-and-all-git-submodules-and-git-lfs-files
  2. 레포의 프라이머리 브랜치 검색 방법:https://stackoverflow.com/a/49384283/4561887
  3. 에서 커스텀명령어를 git submodule foreach <cmd>: https://stackoverflow.com/a/45744725/4561887
  4. man git submodule해 주세요 - 검색해봐foreach,--remote 등등.
  5. git 서브모듈과의 충돌을 해결하는 방법에 대한 나의 답변은 그것들을 포함하는 당신의 외부 보고서입니다.

는 ★★★★★★★★★★★★★★★★★★.git submodule동작하지 않았다.하지만 이것은 효과가 있었다.

cd <path/to/submodule>
git pull

서드파티 리포트를 다운로드하여 갱신합니다.다운로드하여업데이트합니다.그리고나서

cd <path/to/repo>
git commit -m "update latest version" <relative_path/to/submodule>
git push

커밋 「」에의 링크)를 갱신합니다.repo@xxxxxx를 참조해 주세요.

모든 것을 최신 마스터로 업데이트 할 수 있는 멋진 원라이너:

git submodule foreach 'git fetch origin --tags; git checkout master; git pull' && git pull && git submodule update --init --recursive

마크 자키스 덕분에

서브모듈을 포함하는 git 프로젝트를 처리하는 가장 간단한 방법은 항상 추가하는 것입니다.

--recurse-submodules 

각 git 명령어의 마지막 예:

git fetch --recurse-submodules

다른

git pull --update --recurse-submodules

기타...

언급URL : https://stackoverflow.com/questions/5828324/update-git-submodule-to-latest-commit-on-origin

반응형