5

通过使用git add -Aand git commit -a,我显然可以添加/提交对我当前所在的仓库的所有更改。但是,有没有办法将所有子模块包含在添加/提交中并将相同的提交消息应用于每个?

4

2 回答 2

6

您可以使用别名。制作脚本:例如~/supercommit.sh

#!/bin/bash -e
if [ -z $1 ]; then
    echo "You need to provide a commit message"
    exit
fi

git submodule foreach git add -A .
git submodule foreach git commit -am "$1"

git add -A .
git commit -am "$1"

并将其标记为可执行(chmod +x)。现在,创建一个别名:

git config alias.supercommit '!~/supercommit.sh "$@"; #'

那应该可以(我会稍微测试一下)

于 2012-12-07T20:59:12.690 回答
1

好吧,这是 9 年前提出并回答的,今天我在寻找同样的东西时它对我有帮助。但是,我在让它工作时遇到了一些问题,所以我发布这个是为了帮助其他可能面临同样问题的人。

问题 :

  • 因“第 2 行:[:参数太多”而失败
  • 如果任何子模块没有更改,则失败

修复:

  • 在第 2 行的 $1 周围添加引号 ("),否则包含多个单词的注释将被视为多个参数
  • 在提交之前检查子模块是否已暂存更改

更新代码

#!/bin/bash -e
if [ -z "$1" ]; then
    echo "You need to provide a commit message"
    exit
fi

git submodule foreach "
    git add -A .
    git update-index --refresh
    commits=\$(git diff-index HEAD)
    if [ ! -z \"\$commits\" ]; then
        git commit -am \"$1\"
    fi"

git add -A .
git commit -am "$1"
于 2021-12-15T01:11:11.703 回答