递归推送所有子模块

now*_*way 7 git git-submodules

我编写了下面的脚本来推送工作区中的所有更改,包括子模块和超级项目.然而,听起来有点奇怪,做我想做的事情是如此复杂.有没有更好的方法,我错过了?

#!/bin/bash

if [ "$#" -ne 1 ]; then
    echo "Illegal number of parameters"
    exit
fi

SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

cd "${SCRIPT_DIR}/../submodule1" 
git status
git add -A
git commit -m "$1"
git push origin master

cd "${SCRIPT_DIR}/../submodule2" 
git status
git add -A
git commit -m "$1"
git push origin master

cd "${SCRIPT_DIR}/../submodule3" 
git status
git add -A
git commit -m "$1"
git push origin master

printf "\n\nUpdating Super Project\n\n" 
cd .. 
git status
git add -A
git commit -m "All Submodules Updated - $1"
git push origin master
Run Code Online (Sandbox Code Playgroud)

ken*_*orb 10

您可以使用git submodule foreach在每个子模块上运行任何所需的命令,例如

git submodule foreach git push origin master
Run Code Online (Sandbox Code Playgroud)

见:man git-submodule.


0xA*_*xAX 6

git1.7.11([ANNOUNCE] Git 1.7.11.rc1)提到:

学习了“ git push --recurse-submodules”,可以有选择地查看绑定到超级项目的子模块的历史并将其推出。

因此,您可以使用:

git push --recurse-submodules=on-demand
Run Code Online (Sandbox Code Playgroud)