2017-08-29 63 views
1

我使用git submodule add <GitHubURL.git>将项目作为子模块添加到主“父”项目存储库。子模块项目不存在于`git子模块状态`名单中,无法作为单个对象从父项提交

Parent_Project_repo 
- SubA_repo 
- SubB_repo 
- SubC_repo 
- Sub_Problem_Child_repo 

正如我在子模块的工作,我做Sub*_repo项目内提交(每往常一样,无论提交的文件我已经在工作)。然而,在父项目中,通常我只是对所有子模块提交进行一次提交。这种单一提交子模块的一般显示出来,像这样在Parent_Project_repo

enter image description here

我最近从父贮藏库,增加了一个子模块,显示在每个单独的文件中提交历史,而不是只访问单个“子项目”提交对象中的所有文件/提交。

值得注意的是:

  1. 这个问题的子模块并不在名单显示,当我 调用:
    git submodule status
  2. 它在
    Parent_Project_repo/.gitmodules
    Parent_Project_repo/.git/config
    文件列为子模块&有相应的 Parent_Project_repo/.git/modules/Sub_Problem_Child_repo/文件夹。

我该如何将问题儿童纳入名册并能够将Parent_Project_repo处理的所有提交作为一个对象进行处理?


UPDATE:
我有“问题孩子”子模块鉴别的唯一的区别是,它并没有在/.git/modules/config文件“historySha”键,如:

[atomGithub] 
    historySha = 1936e4c373c130860a8f92683b517dad713ec37 

此外,这些命令没有得到状态列出的问题的孩子:

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

...也没有显示在父项目中的GitHub上一个“@ e78c392”这表明我可以双击链接并得到回购,而不是在超级项目(父)的副本。

回答

1

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

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