【问题标题】:Easy way to add -A/commit main/all submodules添加 -A/commit 主/所有子模块的简单方法
【发布时间】:2012-11-26 02:06:20
【问题描述】:

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

【问题讨论】:

    标签: git git-submodules git-commit


    【解决方案1】:

    您可以使用别名。制作脚本:例如~/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 "$@"; #'
    

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

    【讨论】:

    • 似乎有效 - 为 git 提交消息等添加了一些错误检查。
    • @Qix Sweet,愿意分享吗?
    • 这几乎感觉应该是内置的。感谢脚本!
    【解决方案2】:

    嗯,这是 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"
    

    【讨论】:

      猜你喜欢
      • 2010-11-05
      • 2018-07-04
      • 1970-01-01
      • 2011-04-02
      • 2021-09-06
      • 2017-12-07
      • 1970-01-01
      相关资源
      最近更新 更多