子模块项目不存在于`git submodule status`名单中,无法从父项作为单个对象提交

时间:2017-08-29 22:45:27

标签: git-submodules

我使用git submodule add <GitHubURL.git>将项目作为子模块添加到主“父”项目存储库。

Parent_Project_repo
- SubA_repo
- SubB_repo
- SubC_repo
- Sub_Problem_Child_repo

当我在子模块中工作时,我在Sub*_repo项目中进行提交(按照惯例,提交我所处理的任何文件)。但是,在父项目中,通常我只对所有子模块提交进行一次提交。子模块的这个单一提交通常在Parent_Project_repo

中显示出来

enter image description here

我最近添加了一个子模块,来自父存储库,在提交历史记录中显示每个单独的文件,而不是仅仅访问一个“子项目”提交对象中的所有文件/提交。 / p>

值得注意的是:

  1. 这个有问题的子模块在我名单中没有出现在名单中 调用:
    git submodule status
  2. 列于中 Parent_Project_repo/.gitmodules
    Parent_Project_repo/.git/config
    文件作为子模块&amp;有一个相应的 Parent_Project_repo/.git/modules/Sub_Problem_Child_repo/文件夹。
  3. 如何将问题子进入名单并且能够将Parent_Project_repo处理的所有提交作为一个对象?

    更新:
    我在“问题子”子模块中看到的唯一区别是它在/.git/modules/config文件中没有“historySha”键,例如:

    [atomGithub]
        historySha = 1936e4c373c130860a8f92683b517dad713ec37
    

    此外,这些命令不会在状态中列出问题子项:

    $  git submodule update --init --recursive
    $  git submodule update --recursive
    $  git submodule init
    

    ...也没有出现在父项目中的GitHub上,带有“@ e78c392”,表示我可以双击该链接并获得那个 repo而不是超级项目中的副本(Parent )。

1 个答案:

答案 0 :(得分:2)

如果使用git submodule add <URL>将git存储库设置为&#34;超级项目中的子模块&#34;并且子模块不是作为单个对象在超级项目中提交的(即,当从超级项目中提交子模块时,您必须从子模块提交每个单独的文件),然后按照以下步骤重新配置:

  1. 保存子模块中的所有工作。
  2. 暂存并提交所有文件更改。
  3. 将所有提交推送到GitHub。
  4. 如果您谨慎,请制作子模块文件夹的安全副本
  5. 从超级项目.gitmodules文件中删除相关的子模块部分(即删除问题子模块的列表)。
  6. 暂存.gitmodules更改git add .gitmodules
  7. 从超级项目.git / config。
  8. 中删除相关的sunmodule部分
  9. 运行git rm --cached -rf PATH_TO_SUBMODULE,其中PATH_TO_SUBMODULE是子模块文件夹的实际路径。
  10. 运行rm -rf .git/modules/PATH_TO_SUBMODULE
  11. 提交git commit -m "Removed submodule commit message"
  12. 删除现在未跟踪的子模块文件:rm -rf PATH_TO_SUBMODULE
  13. git submodule add <URL>
  14. 测试在超级项目中提交时,子模块中的更改(fwiw,修改两个文件)是否作为单个对象处理。
  15. 成功?删除子模块项目的安全副本。