`git 子模块状态` 名册中不存在子模块项目,无法从 parent 作为单个 object 提交

submodule project not present in `git submodule status` roster and unable to commit from parent as single object

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

Parent_Project_repo
- SubA_repo
- SubB_repo
- SubC_repo
- Sub_Problem_Child_repo

当我在子模块中工作时,我在 Sub*_repo 项目中进行提交(通常,提交我处理过的任何文件)。然而,在 parent 项目中,通常我只是对所有子模块提交进行一次提交。子模块的单次提交通常在 Parent_Project_repo 中显示如下:

我最近添加了一个子模块,来自 parent 存储库, 显示提交历史中的每个单独文件,而不是仅仅访问所有 files/commits 一次 "Subproject" 提交 object.

注意事项:

  1. 这个有问题的子模块没有出现在我的名册中 调用:
    git submodule status
  2. 它列在
    Parent_Project_repo/.gitmodules
    Parent_Project_repo/.git/config
    文件作为子模块&有相应的 Parent_Project_repo/.git/modules/Sub_Problem_Child_repo/ 个文件夹。

我如何才能将问题 child 放入花名册并能够让 Parent_Project_repo 将其所有提交作为一个 object 处理?


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

[atomGithub]
    historySha = 1936e4c373c130860a8f92683b517dad713ec37

此外,这些命令没有解决状态中列出的问题 child:

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

...也没有出现在 Parent 项目中的 GitHub 上,带有“@ e78c392”,这表明我可以双击 link 并到达 that repo 而不是超级项目中的副本 (Parent)。

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

  1. 保存子模块中的所有工作。
  2. 暂存并提交所有文件更改。
  3. 将所有提交推送到 GitHub。
  4. 如果您谨慎,请对子模块文件夹进行安全复制
  5. 从超级项目 .gitmodules 文件中删除相关的子模块部分(即删除问题子模块的列表)。
  6. 执行 .git 模块更改 git add .gitmodules
  7. 从超级项目中删除相关的 sunmodule 部分。git/config。
  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. 成功了吗?删除子模块项目的安全副本。