힘내 하위 모듈 푸시 수정하면 커밋을 하위 모듈

하위 모듈을 수정하면 커밋을 하위 모듈 원점으로 다시 밀어 넣을 수 있습니까, 아니면 복제가 필요한가요? 복제 된 경우 다른 저장소에 복제본을 저장할 수 있습니까?



답변

서브 모듈은 여분의 메타 데이터 (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 하마노 gitster5d35d72 커밋 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 하마노 gitster792e22e 커밋 2,017 31 일월)


답변