提交对子模块的更改,而不必提交父repo

rya*_*hee 6 git git-submodules

假设我有一个父代仓库myproject和一个单独的仓库submodule,其目录结构如下:


    root$ find . -not -path *.git*
    .
    ./myproject
    ./myproject/submodule

现在我添加submodule为子模块myproject.


    root$ cd myproject
    myproject$ git submodule add git://url-to-submodule:submodule.git submodule
    Adding existing repo at 'submodule' to the index

现在,让我说我改变了一些东西submodule.


    myproject$ cd submodule
    submodule$ touch herpin.txt
    submodule$ add herpin.txt
    submodule$ git commit -am "i'm herpin and i'm derpin"

此时,我将返回父存储库,并检查git状态:


    submodule$ cd ..
    myproject$ git status
    # On branch master
    # Changes not staged for commit:
    #   (use "git add ..." to update what will be committed)
    #   (use "git checkout -- ..." to discard changes in working directory)
    #
    #   modified:   submodule (new commits)
    #
    no changes added to commit (use "git add" and/or "git commit -a")

该死的 - 现在每次我在子模块中提交一些东西时,我也必须提交父级.

如果你有一个更复杂的子模块树,它会很快变得烦人.让我们说 - 深度为4级.如果我在最内层的子模块上做出改变,我必须提交它的父母,祖父母,曾祖父母,以及伟大的父母.这是---的一个令人痛苦的痛苦.

肯定有更好的办法!(不,不嵌套这么多级别不是一个选项.:/这不是我的调用...)是不是有一种方式git-commit可以通知父提交的存储库?

Rya*_*ach 1

提交到子模块应该被视为提交到另一个外部库/存储库。

不要在根模块上使用 git status,而在子模块上使用它。

不,您不需要在容器中提交更改,您只需从子模块内提交它们。

然后,您可以进行多项更改、回滚、将子模块保留在稳定分支上等,然后仅将父容器更新为子模块的稳定版本。

更新子模块引用不应该经常进行,而应该只在兼容版本之间切换,否则您会发现连续大量“碰撞”提交只是更新子模块。

简而言之,在子模块中完成工作,提交,在子模块提交中完成更多工作。完成后,通过提交容器将子模块引用更新为新版本,或者将子模块回滚到最后一个稳定版本,将提交留给将来的开发工作。