2011-10-11 3 views
1

나는 서브 모듈이 많은 힘내 슈퍼 프로젝트가있다. 서브 모듈을 통과하여 git status을 실행하여 각 서브 모듈이 어느 분기에 있는지 그리고 커밋되지 않은 변경 사항이 있는지 신속하게 확인할 수 있기를 바랍니다. 그러나 git submodule foreach 'git status'을 실행하면 구문 분석하기가 어려우며 상태를보고하는 하위 모듈을 알 수 없습니다. 내 % PATH % 변수를 추출하는 것처럼 보입니다 (Windows에서 msysGit을 사용하고 있습니다). 내 출력이 여기에 표시된 것과 유사하게 나타납니다 : 당신이 볼 수 있듯이"자식 서브 모듈 foreach '자식 상태'"의 출력 해석 "

Entering 'C:\Program Files\Git/libexec/git-core;C:\Program Files\Git\libexec\git-core;C:\Program Files\Git\libexec\git-core;C:\Program Files\Git\bin;c:\Documents and Settings\username\My Documents\LinuxHome\bin;.;C:\Program Files\Git\local\bin;C:\Program Files\Git\mingw\bin;C:\Program Files\Git\bin;c:\WINDOWS\system32;c:\WINDOWS;c:\WINDOWS\System32\Wbem;c:\WINDOWS\system32\WindowsPowerShell\v1.0;c:\WINDOWS\system32\WindowsPowerShell\v1.0;c:\Program Files\Intel\WiFi\bin\;c:\Program Files\Windows Imaging\;c:\Program Files\Microsoft SQL Server\100\Tools\Binn\;c:\Program Files\Microsoft SQL Server\100\DTS\Binn\;c:\Program Files\TortoiseSVN\bin' 
# On branch My_Branch 
nothing to commit (working directory clean) 
Entering 'C:\Program Files\Git/libexec/git-core;C:\Program Files\Git\libexec\git-core;C:\Program Files\Git\libexec\git-core;C:\Program Files\Git\bin;c:\Documents and Settings\username\My Documents\LinuxHome\bin;.;C:\Program Files\Git\local\bin;C:\Program Files\Git\mingw\bin;C:\Program Files\Git\bin;c:\WINDOWS\system32;c:\WINDOWS;c:\WINDOWS\System32\Wbem;c:\WINDOWS\system32\WindowsPowerShell\v1.0;c:\WINDOWS\system32\WindowsPowerShell\v1.0;c:\Program Files\Intel\WiFi\bin\;c:\Program Files\Windows Imaging\;c:\Program Files\Microsoft SQL Server\100\Tools\Binn\;c:\Program Files\Microsoft SQL Server\100\DTS\Binn\;c:\Program Files\TortoiseSVN\bin' 
# On branch My_Branch 
# Your branch is ahead of 'FlashDrive/My_Branch' by 10 commits. 
# 
nothing to commit (working directory clean) 
Entering 'C:\Program Files\Git/libexec/git-core;C:\Program Files\Git\libexec\git-core;C:\Program Files\Git\libexec\git-core;C:\Program Files\Git\bin;c:\Documents and Settings\username\My Documents\LinuxHome\bin;.;C:\Program Files\Git\local\bin;C:\Program Files\Git\mingw\bin;C:\Program Files\Git\bin;c:\WINDOWS\system32;c:\WINDOWS;c:\WINDOWS\System32\Wbem;c:\WINDOWS\system32\WindowsPowerShell\v1.0;c:\WINDOWS\system32\WindowsPowerShell\v1.0;c:\Program Files\Intel\WiFi\bin\;c:\Program Files\Windows Imaging\;c:\Program Files\Microsoft SQL Server\100\Tools\Binn\;c:\Program Files\Microsoft SQL Server\100\DTS\Binn\;c:\Program Files\TortoiseSVN\bin' 
# On branch My_Branch 
# Changes not staged for commit: 
# (use "git add <file>..." to update what will be committed) 
# (use "git checkout -- <file>..." to discard changes in working directory) 
# 
# modified: MyApp/Win32/Release/MyApp.exe 
# modified: MyApp/WinCe600 (ARMV4I)/Release/MyApp.exe 
# modified: MyApp/WinCe600 (ARMV4I)/Release/Startup.exe 
# 
no changes added to commit (use "git add" and/or "git commit -a") 
Entering 'C:\Program Files\Git/libexec/git-core;C:\Program Files\Git\libexec\git-core;C:\Program Files\Git\libexec\git-core;C:\Program Files\Git\bin;c:\Documents and Settings\username\My Documents\LinuxHome\bin;.;C:\Program Files\Git\local\bin;C:\Program Files\Git\mingw\bin;C:\Program Files\Git\bin;c:\WINDOWS\system32;c:\WINDOWS;c:\WINDOWS\System32\Wbem;c:\WINDOWS\system32\WindowsPowerShell\v1.0;c:\WINDOWS\system32\WindowsPowerShell\v1.0;c:\Program Files\Intel\WiFi\bin\;c:\Program Files\Windows Imaging\;c:\Program Files\Microsoft SQL Server\100\Tools\Binn\;c:\Program Files\Microsoft SQL Server\100\DTS\Binn\;c:\Program Files\TortoiseSVN\bin' 
# On branch My_Branch 
# Your branch is ahead of 'FlashDrive/My_Branch' by 8 commits. 
# 
nothing to commit (working directory clean) 

, 이것은 (출력이 싸여 특히)에서 눈에 아주 어렵고, 무엇을보고 '자식 상태'의 출력. 또한 각 서브 모듈의 이름이 표시되지 않으므로 출력의 각 섹션이 어떤 서브 모듈을 참조하는지 알 수있는 방법이 없습니다.

도움을 주시면 감사하겠습니다. 감사!

답변

3
당신은 당신이 표시 원하는 정확히 언급하지

...

git submodule foreach -q git ls-files -m 

예를 들어, 단지 수정 된 파일을 보여주는에서 먼 길을 갈 것입니다. 다른 옵션은

git submodule foreach -q git diff --shortstat --staged # staged 
git submodule foreach -q git diff --shortstat   # unstaged 
git submodule foreach -q git diff --shortstat HEAD  # staged AND unstaged 

당신은 다음과 정맥에 바보 같은 작은 스크립트를 작성할 수 포함 :

#!/bin/sh 
echo "$(basename .) $(git branch)" 

쉽게 식별 서브 모듈 디렉토리 이름을 사용 당신이 원하는 것을를 표시합니다. 하지 이동을하고 기계 소비을 위해 설계되지 않은 출력을 구문 분석하려고 :

경우에는 위의 아이디어에서 그것을 밖으로 작동하지 않을 수 있습니다. 힘내는 당신을 더 나은 방법으로 도울 수있는 매우 풍부한 하위 명령 집합을 가지고 있습니다.

+0

% PATH % mess은 1.7.7로 고정 된 msysGit의 버그입니다. 나는 그 명령들을 살펴볼 것이다. 감사! –

관련 문제