在git子模块中显示未压缩的提交

时间:2014-07-03 07:41:08

标签: git git-submodules

我知道那里已经存在一些问题this one。就我而言:

我们说我有一个带有子模块SR2的repo R1。

  1. 我在SR2中执行子模块提交。
  2. 我在R1中提交子模块更新
  3. 我推送R1中的子模块更新
  4. 我忘了推进SR2
  5. 然后,任何将克隆存储库R1的人都会收到reference is not a tree错误,因为显然子模块提交修订版目前只在本地可用。

    如果我在R1存储库中输入git status,那么我的子模块位于远程存储库之前的事实并没有任何警告。

    如果有任何方法可以递归检索状态吗?

1 个答案:

答案 0 :(得分:1)

您可以尝试git submodule foreach command

git submodule foreach --recursive 'git status  && echo'

您可以使用其他命令向您显示this answer中子模块的状态,以了解正在进行的更改。


OP Cqnqrd提及in the comments

为了提高可读性,我将其调整为以下别名:

多行:

gss_command='git -c color.status=always status -s | \
             sed "s/^\(.*\)/\t\1/g" && git branch -v | \
             grep -E "ahead|behind" | \
             sed -r "s/[ *]\s(\S*).*(\[(ahead|behind).+?\]).*/\t\1 \2/g"' 

alias gs="git rev-parse --show-toplevel && \
          $gss_command && \
          git submodule foreach --recursive '$gss_command'"

单行:

gss_command='git -c color.status=always status -s | sed "s/^\(.*\)/\t\1/g" && git branch -v | grep -E "ahead|behind" | sed -r "s/[ *]\s(\S*).*(\[(ahead|behind).+?\]).*/\t\1 \2/g"' 

alias gs="git rev-parse --show-toplevel && $gss_command && git submodule foreach --recursive '$gss_command'"