하위 모듈을 수정하면 커밋을 하위 모듈 원점으로 다시 밀어 넣을 수 있습니까, 아니면 복제가 필요한가요? 복제 된 경우 다른 저장소에 복제본을 저장할 수 있습니까?
답변
서브 모듈은 여분의 메타 데이터 (gitlink tree entry, .gitmodules file)가있는 다른 저장소 내의 git repo의 복제 일뿐입니다.
$ cd your_submodule
$ git checkout master
<hack,edit>
$ git commit -a -m "commit in submodule"
$ git push
$ cd ..
$ git add your_submodule
$ git commit -m "Updated submodule"
답변
git1.7.11 이후 ( [ANNOUNCE] Git 1.7.11.rc1 및 릴리스 노트 , 2012 년 6 월)는 다음을 언급합니다.
”
git push --recurse-submodules
“선택적으로 수퍼 프로젝트에 바인딩 된 서브 모듈의 히스토리를 살펴보고 밀어내는 법을 배웠다.
이 패치 와 --on-demand
옵션 후에 수행 될 수 있습니다.
recurse-submodules=<check|on-demand>::
푸시 할 개정에 사용 된 모든 서브 모듈 커밋이 원격 추적 브랜치에서 사용 가능한지 확인하십시오.
check
를 사용 하면 푸시 할 개정에서 변경된 모든 서브 모듈 커밋이 원격에서 사용 가능한지 점검됩니다.
그렇지 않으면 푸시가 중단되고 0이 아닌 상태로 종료됩니다.on-demand
를 사용 하면 푸시 할 개정에서 변경된 모든 서브 모듈이 푸시됩니다.
요청시 필요한 모든 수정 사항을 푸시 할 수없는 경우 중단되고 0이 아닌 상태로 종료됩니다.
따라서 (부모 저장소에서) a로 한 번에 모든 것을 푸시 할 수 있습니다.
git push --recurse-submodules=on-demand
이 옵션은 한 수준의 중첩에서만 작동합니다. 다른 하위 모듈 내부의 하위 모듈에 대한 변경 사항은 적용되지 않습니다.
git 2.7 (2016 년 1 월)을 사용하면 간단한 git push로 부모 저장소와 모든 하위 모듈 을 푸시하기에 충분합니다 .
참조 d34141c 커밋 , f5c7cd9 커밋 , (03 년 12 월 2015) f5c7cd9을 커밋 (2015년 12월 3일), 및 b33a15b 커밋 (2015년 11월 17일)에 의해 마이크 크로 ( mikecrowe
) .
(의해 병합 – Junio C 하마노 gitster
– 에 5d35d72 커밋 2,015 21 십이)
push
:recurseSubmodules
구성 옵션 추가
--recurse-submodules
명령 줄 매개 변수는 몇 시간 동안 존재했지만 그것은 어떤 설정 파일에 해당이 없습니다.에 해당하는 매개 변수의 스타일에
git fetch
따라이push.recurseSubmodules
매개 변수의 기본값을 제공 하도록하겠습니다 .
또한 필요할--recurse-submodules=no
때 명령 줄에서 구성을 재정 의 할 수 있도록 추가 해야합니다.이것을 구현하는 가장 간단한 방법은와
비슷한 방식으로push
코드를 사용submodule-config
하는 것 같습니다fetch
.
이 git config
문서에는 이제 다음이 포함됩니다 .
push.recurseSubmodules
:푸시 할 개정에 사용 된 모든 서브 모듈 커밋이 원격 추적 브랜치에서 사용 가능한지 확인하십시오.
- 값이 ‘
check
‘인 경우 Git은 푸시 할 개정에서 변경된 모든 서브 모듈 커밋이 서브 모듈의 하나 이상의 원격에서 사용 가능한지 확인합니다. 커밋이 누락되면 푸시가 중단되고 0이 아닌 상태로 종료됩니다.- 값이 ‘
on-demand
‘이면 푸시 할 개정에서 변경된 모든 서브 모듈이 푸시됩니다. 요청시 필요한 모든 수정 사항을 푸시 할 수없는 경우 중단되고 0이 아닌 상태로 종료됩니다. –- 값이 ‘
no
‘이면 푸시시 서브 모듈을 무시하는 기본 동작이 유지됩니다.푸시시 ‘
--recurse-submodules=check|on-demand|no
‘ 를 지정하여이 구성을 대체 할 수 있습니다 .
그래서:
git config push.recurseSubmodules on-demand
git push
힘내 2.12 (2017 년 1 분기)
git push --dry-run --recurse-submodules=on-demand
실제로 작동합니다.
Brandon Williams ( )의 commit 0301c82 , commit 1aa7365 (2016 년 11 월 17 일)를 참조하십시오 . (의해 병합 – Junio C 하마노 – 에 12cf113 커밋 2,016 16 십이)mbrandonw
gitster
push run with --dry-run
푸시가 수동으로 서브 모듈을 푸시하도록 구성된 경우 실제로는 (2016 년 12 월 2.11 Git 2.11 이하) 드라이 런을 수행하지 않습니다.
대신 밀어야하는 모든 하위 모듈이 실제로 원격으로 푸시되고 수퍼 프로젝트에 대한 모든 업데이트는 드라 이런으로 수행됩니다.
이것은 버그이며 드라 이런의 의도 된 동작이 아닙니다.서브 모듈을 ‘주문형’으로 재귀 적으로 푸시하도록 구성된
push
경우--dry-run
옵션 을 존중하도록 가르치십시오 .
이는--dry-run
드라 이런을 수행 할 때 하위 모듈에 대한 푸시를 수행하는 하위 프로세스에 플래그를 전달하여 수행됩니다 .
그리고 여전히 Git 2.12에서는 최상위 슈퍼 프로젝트를 누르지 않고 서브 모듈을 밀어내는 ” --recurse-submodules=only
“옵션 이 있습니다.
참조 225e8bf 커밋 , 6c656c3 커밋 , 14c01bd 커밋 에 의해 (2016년 12월 19일) 브랜든 윌리엄스 ( mbrandonw
) .
(의해 병합 – Junio C 하마노 gitster
– 에 792e22e 커밋 2,017 31 일월)