代码之家  ›  专栏  ›  技术社区  ›  chris01

git:汇总子回购

  •  1
  • chris01  · 技术社区  · 7 年前

    假设我有多个独立的子项目,它们有自己的pom.xml和git repo。 但现在我把它们组装在一个项目x中。

    project X
     - sub A
     - sub B
     - sub C
    

    我想在x中生成所有的子项目,我用pom.xml来实现,它将项目a到c作为模块。生成x将生成所有项目。 工作很好!

    我有没有办法把git回购也汇总在一起? x中的commit应该在每个projekt中执行commit。相同的更新…

    2 回复  |  直到 6 年前
        1
  •  2
  •   Mukunda Modell    7 年前

    foreach的git子模块

    git submodule 提供一个实用程序来遍历所有子模块:

    执行的命令 git commit 在当前项目的每个子模块中,如下所示:

    git submodule foreach "git commit"

    Git

    为了方便起见,我制作了一个简单的bash脚本,它在当前项目及其所有子模块中运行任意命令。这样我就不必键入两次命令(父项目一次,git子模块foreach一次)

    ~/bin/git foreach

    #!/bin/bash
    set -e
    if [ "$*" == "" ]; then
        echo "Usage: $0 COMMAND"
        echo
        echo "Run an arbitrary COMMAND in the current git repository plus all of the submodules"
        echo
        exit 1
    fi
    echo "Entering '.'"
    # run the command in PWD
    "$@"
    
    # now run the command on submodules
    git submodule foreach "$*"
    

    放置 git-foreach 可执行文件 $PATH 并在git repo中运行它:

    # describe the commit at HEAD for the project and all subprojects:
    git foreach git describe
    
        2
  •  0
  •   SiKing    6 年前

    git没有maven那样的“子项目”概念。

    为了实现您的要求,我在机器上设置了一个(bash)函数:

    git-all () 
    { 
      find ~/workspace -name .git -type d -print -execdir git "$@" \;
    }
    

    find命令:

    • 查看我的~/工作区中的所有文件夹(本地存储库)
    • 查找任何名为.git的目录
    • 打印出路径
    • 在该路径上执行git命令,后面跟着我的其余参数

    所以我可以做些什么:

    git-all commit -m "my commit"