Git 리포지토리에 하위 모듈 나열 여러 하위 모듈이있는

여러 하위 모듈이있는 Git 저장소가 있습니다. git submodule init실행 된 후 모든 하위 모듈의 이름을 어떻게 나열 합니까?

git submodule foreach명령은 서브 모듈의 이름을 에코 할 수 있지만,이 초기화 단계 이후에 무슨 일이 있었되지 않은 체크 아웃 한 후에는 것을에만 작동합니다. 체인에 체크 아웃하기 전에 더 많은 단계가 필요하며 하위 모듈의 이름을 스크립트에 하드 와이어 링하지 않아도됩니다.

그렇다면 현재 등록되었지만 아직 체크 아웃되지 않은 서브 모듈의 이름을 가져 오는 Git 명령이 있습니까?



답변

git submodule init사용 자체 와 동일한 메커니즘을 사용할 수 있습니다 .gitmodules. 이 파일은 각 서브 모듈 경로와 그것이 참조하는 URL을 열거합니다.

예를 들어, 저장소 루트에서 cat .gitmodules내용이 화면에 표시됩니다 (가 있다고 가정 cat).

.gitmodule 파일은 Git 구성 형식을 가지므로 git config를 사용하여 해당 파일을 구문 분석 할 수 있습니다.

git config --file .gitmodules --name-only --get-regexp path

모든 하위 모듈 항목을 표시하고

git config --file .gitmodules --get-regexp path | awk '{ print $2 }'

서브 모듈 경로 자체 만 가져옵니다.


답변

중첩 된 하위 모듈을 표시하려는 경우 git submodule status또는 선택적으로 사용할 수 있습니다 git submodule status --recursive.

Git 문서에서 :

서브 모듈의 상태를 표시하십시오. 그러면 서브 모듈 경로 및 SHA-1에 대한 git describe 출력과 함께 각 서브 모듈에 대해 현재 체크 아웃 된 커밋의 SHA-1이 인쇄됩니다. 서브 모듈이 초기화되지 않은 경우, 각 체크 아웃 된 서브 모듈 커밋이 포함 저장소의 인덱스에서 찾은 SHA-1과 일치하지 않으면 +, 서브 모듈에 병합 충돌이있는 경우 U가 각 SHA-1 앞에 붙습니다.


답변

등록 된 서브 모듈의 이름 만 반환하려면 다음 명령을 사용하십시오.

grep path .gitmodules | sed 's/.*= //'

git submodule --list존재하지 않는 것으로 생각하십시오 .


답변

다음 명령은 서브 모듈을 나열합니다 :

git submodule--helper list

출력은 다음과 같습니다.

<mode> <sha1> <stage> <location>

참고 : Git 2.7.0 이상이 필요합니다.


답변

사용하다:

$ git submodule

지정된 Git 저장소의 모든 하위 모듈을 나열합니다.


답변

나는 이것을 사용한다 :

git config --list|egrep ^submodule


답변

이 질문에 대한 답변으로 제공된 명령이 내가 찾고있는 정보를 제공한다는 것을 알았습니다.

.gitmodule에서 하위 모듈이 아닌 경로에 대한 하위 모듈 매핑이 없습니다.

git ls-files --stage | grep 160000