모든 git 서브 모듈의 최신 정보를 얻는 쉬운 방법 다른 많은 라이브러리에 의존하는

우리는 git 서브 모듈을 사용하여 우리가 개발 한 다른 많은 라이브러리에 의존하는 두 개의 큰 프로젝트를 관리합니다. 각 라이브러리는 하위 프로젝트로 종속 프로젝트에 가져온 별도의 저장소입니다. 개발 과정에서 우리는 종종 모든 종속 서브 모듈의 최신 버전을 원합니다.

git에 이것을 수행하는 명령이 있습니까? 그렇지 않은 경우 Windows 배치 파일 또는 이와 유사한 파일은 어떻습니까?



답변

그것의 경우 처음으로 당신이 체크 아웃 사용할 필요 REPO --init첫 번째 :

git submodule update --init --recursive

들어 자식 1.8.2 이상, 옵션은 --remote원격 지사의 최신 팁 지원 업데이트에 추가되었습니다 :

git submodule update --recursive --remote

이것은 .gitmodules또는 .git/config파일에 지정된 “기본이 아닌”브랜치를 존중할 수있는 추가적인 이점이 있습니다 .

들어 자식 1.7.3 사용하거나 위의 (하지만 업데이트가 계속 적용 무엇 주위 개는 아래의) :

git submodule update --recursive

또는:

git pull --recurse-submodules

하위 커밋을 현재 커밋 대신 최신 커밋으로 가져 오려면 리포지토리가 가리 킵니다.

자세한 내용은 git-submodule (1) 을 참조하십시오


답변

git pull --recurse-submodules --jobs=10

1.8.5에서 처음 배운 기능 자식.

버그 가 수정 될 때까지 처음으로 실행해야합니다

자식 모듈 업데이트 –init –recursive


답변

초기화시 다음 명령을 실행하십시오.

git submodule update --init --recursive

git repo 디렉토리 내에서 가장 잘 작동합니다.

하위 모듈을 포함한 모든 최신 정보가 표시됩니다.

설명

git - the base command to perform any git command
    submodule - Inspects, updates and manages submodules.
        update - Update the registered submodules to match what the superproject
        expects by cloning missing submodules and updating the working tree of the
        submodules. The "updating" can be done in several ways depending on command
        line options and the value of submodule.<name>.update configuration variable.
            --init without the explicit init step if you do not intend to customize
            any submodule locations.
            --recursive is specified, this command will recurse into the registered
            submodules, and update any nested submodules within.

이 후에는 다음을 실행할 수 있습니다.

git submodule update --recursive

git repo 디렉토리 내에서 가장 잘 작동합니다.

하위 모듈을 포함한 모든 최신 정보가 표시됩니다.


답변

참고 : 이것은 2009 년 이후이며 지금은 좋았지 만 지금은 더 나은 옵션이 있습니다.

우리는 이것을 사용합니다. 라는 git-pup:

#!/bin/bash
# Exists to fully update the git repo that you are sitting in...

git pull && git submodule init && git submodule update && git submodule status

적절한 bin 디렉토리 (/ usr / local / bin)에 넣으십시오. Windows의 경우 구문을 수정해야 작동 할 수 있습니다. 🙂

최신 정보:

원래의 저자가 모든 서브 모듈의 모든 HEAD를 가져 오는 것에 대한 의견에 응답하여 좋은 질문입니다.

나는 git이것이 내부적으로 이것에 대한 명령을 가지고 있지 않다고 확신합니다 . 그렇게하려면 HEAD가 서브 모듈에 실제로 어떤 것인지 식별해야합니다. master가장 최신의 지점 이라고 말하는 것만 큼 간단 할 수 있습니다 …

그런 다음 다음을 수행하는 간단한 스크립트를 작성하십시오.

  1. git submodule status“수정 된”리포지토리를 확인하십시오 . 출력 라인의 첫 문자는 이것을 나타냅니다. 하위 리포지토리가 수정 된 경우 진행하지 않을 수 있습니다.
  2. 나열된 각 저장소에 대해 해당 디렉토리로 cd하고를 실행하십시오 git checkout master && git pull. 오류를 확인하십시오.
  3. 마지막으로, 서브 모듈의 현재 상태를 나타 내기 위해 사용자에게 디스플레이를 인쇄하는 것이 좋습니다.

이 스타일은 실제로 자식 서브 모듈이 설계된 것이 아니라고 언급하고 싶습니다. 일반적으로 “LibraryX”의 버전이 “2.32”라고 말하고 “업그레이드”할 때까지 계속 유지합니다.

즉, 설명 된 스크립트로 수행하는 작업이지만 더 자동으로 수행됩니다. 관리가 필요합니다!

업데이트 2 :

Windows 플랫폼을 사용하는 경우 Python을 사용하여 이러한 영역에서 매우 유용한 스크립트를 구현할 수 있습니다. 유닉스 / 리눅스를 사용하고 있다면 bash 스크립트 만 제안합니다.

설명이 필요하십니까? 의견을 게시하십시오.


답변

헨릭이 올바른 길을 가고 있습니다. ‘foreach’명령은 임의의 쉘 스크립트를 실행할 수 있습니다. 최신 정보를 얻는 두 가지 옵션은 다음과 같습니다.

git submodule foreach git pull origin master

과,

git submodule foreach /path/to/some/cool/script.sh

초기화 된 모든 서브 모듈 을 반복 하고 주어진 명령을 실행합니다.


답변

다음은 Windows에서 나를 위해 일했습니다.

git submodule init
git submodule update

답변

편집 :

의견에서 ( philfreo에 의해 ) 최신 버전이 필요하다고 지적했습니다 . 최신 버전이 필요한 중첩 서브 모듈이있는 경우 :

git submodule foreach --recursive git pull

—– 아래의 오래된 주석 —–

이것이 공식적인 방법이 아닙니까?

git submodule update --init

매번 사용합니다. 지금까지 아무런 문제가 없습니다.

편집하다:

방금 다음을 사용할 수 있음을 발견했습니다.

git submodule foreach --recursive git submodule update --init

또한 모든 하위 모듈, 즉 종속성을 재귀 적으로 가져옵니다.