자동이 할 수있는 방법이 git submodule update
바람직 (또는 git submodule update --init
때마다 호출 git pull
완료?
git config 설정 또는 git alias를 찾으십시오.
답변
현재 힘내 2.14 , 당신은 사용할 수 있습니다 git pull --recurse-submodules
(이것은 당신이 원하는대로 및 별칭).
현재 힘내 2.15 , 당신은 설정할 수 있습니다submodule.recurse
원하는 동작을 사용하려면 true로.
다음을 실행하여 전 세계적으로이 작업을 수행 할 수 있습니다.
git config --global submodule.recurse true
답변
git config --global alias.pullall '!git pull && git submodule update --init --recursive'
인수를 git pull에 전달하려면 대신 이것을 사용하십시오.
git config --global alias.pullall '!f(){ git pull "$@" && git submodule update --init --recursive; }; f'
답변
Git 1.7.5부터는 원하는대로 기본적으로 서브 모듈을 자동으로 업데이트해야합니다.
[편집 : 코멘트를 : 새로운 1.7.5 동작은 자동으로하는 것입니다 가져 서브 모듈의 최신 커밋을하지만, 하지 에 업데이트 그들을합니다 (의 git submodule update
의미). 따라서이 답변의 정보는 배경과 관련이 있지만 완전한 답변은 아닙니다. 하나의 명령으로 하위 모듈을 가져오고 업데이트하려면 여전히 별칭이 필요합니다.]
기본 동작 인 “주문형”은 하위 모듈 커밋을 업데이트하는 커밋을 가져올 때마다 하위 모듈을 업데이트하는 것이며이 커밋은 로컬 클론에 아직 없습니다.
또한 모든 페치에서 업데이트하거나 절대 (1.7.5 이전 동작으로 가정) 할 수 있습니다.
이 동작을 변경하는 구성 옵션은 fetch.recurseSubmodules
입니다.
이 옵션은 부울 값 또는으로 설정할 수 있습니다
on-demand
.
부울로 설정하면 동작 변경fetch
및pull
서브 모듈로 무조건 같이 Recurse false로 전혀 사실에 대한 여부를 같이 Recurse로 설정 세트를.시에 설정
on-demand
(기본값),fetch
및pull
단지 같이 Recurse 채워진 서브 모듈로의 superproject가 검색 할 때 해당 업데이트 서브 모듈의 참조를 커밋합니다 .
보다:
git config
매뉴얼 페이지 (1.7.5) (또는 최신git config
매뉴얼 페이지 )git fetch
맨 페이지 (1.7.5) (또는 최신 git fetch 맨 페이지 )
자세한 내용은.
git fetch --recurse-submodules[=yes|on-demand|no]
답변
아무도이 작업을 수행하기 위해 자식 후크를 사용하는 것에 대해 언급하지 않았습니다.
이름이 지정된 파일 post-checkout
과 관련 리포지토리 post-merge
의 .git/hooks
디렉토리에 파일을 추가 하고 다음을 각 파일에 넣습니다.
#!/bin/sh
git submodule update --init --recursive
별명을 구체적으로 요구했기 때문에 많은 저장소에 대해 별명을 원한다고 가정하면 별명을 작성하여이를 저장소에 추가 할 수 있습니다 .git/hooks
.
답변
Kevin Ballard가 제안한 별칭은 완벽하게 좋은 솔루션입니다. 다른 옵션을 던지기 위해 단순히 실행되는 병합 후 후크를 사용할 수도 있습니다 git submodule update [--init]
.
답변
하위 모듈 업데이트를 자동으로 처리하는 git 명령의 별칭을 만들 수 있습니다. .bashrc에 다음을 추가하십시오.
# make git submodules usable
# This overwrites the 'git' command with modifications where necessary, and
# calls the original otherwise
git() {
if [[ $@ == clone* ]]; then
gitargs=$(echo "$@" | cut -c6-)
command git clone --recursive $gitargs
elif [[ $@ == pull* ]]; then
command git "$@" && git submodule update --init --recursive
elif [[ $@ == checkout* ]]; then
command git "$@" && git submodule update --init --recursive
else
command git "$@"
fi
}
답변
다른 사람들이 언급했듯이 다음을 사용하여 쉽게 설정할 수 있습니다.
git config --global submodule.recurse true
그러나 나와 같고 더 복잡한 .gitconfig
설정 (내 기본 ~/.gitconfig
파일 include
이 다른 .gitconfig
파일 을로드하는 데 사용 )이 있고 명령 줄 git
구성 형식과 형식 사이를 변환하는 방법을 기억할 수 없다면 .gitconfig
여기에 추가하는 방법이 있습니다. 모든 .gitconfig
파일에 :
[submodule]
recurse = true