`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.
注意事项:
- 这个有问题的子模块没有出现在我的名册中
调用:
git submodule status
- 它列在
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" 中的子模块,并且子模块不作为单个对象在超级项目中提交(即如果,从超级项目中提交子模块时,您必须从子模块中提交每个单独的文件),然后按照以下步骤重新配置:
- 保存子模块中的所有工作。
- 暂存并提交所有文件更改。
- 将所有提交推送到 GitHub。
- 如果您谨慎,请对子模块文件夹进行安全复制
- 从超级项目 .gitmodules 文件中删除相关的子模块部分(即删除问题子模块的列表)。
- 执行 .git 模块更改
git add .gitmodules
- 从超级项目中删除相关的 sunmodule 部分。git/config。
- 运行
git rm --cached -rf PATH_TO_SUBMODULE
其中 PATH_TO_SUBMODULE
是子模块文件夹的实际路径。
- 运行
rm -rf .git/modules/PATH_TO_SUBMODULE
.
- 提交
git commit -m "Removed submodule commit message"
。
- 删除现在未跟踪的子模块文件:
rm -rf PATH_TO_SUBMODULE
git submodule add <URL>
- 测试以查看在超级项目中提交时子模块中的更改(fwiw,修改两个文件)是否作为单个对象处理。
- 成功了吗?删除子模块项目的安全副本。
我使用 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.
注意事项:
- 这个有问题的子模块没有出现在我的名册中
调用:
git submodule status
- 它列在
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" 中的子模块,并且子模块不作为单个对象在超级项目中提交(即如果,从超级项目中提交子模块时,您必须从子模块中提交每个单独的文件),然后按照以下步骤重新配置:
- 保存子模块中的所有工作。
- 暂存并提交所有文件更改。
- 将所有提交推送到 GitHub。
- 如果您谨慎,请对子模块文件夹进行安全复制
- 从超级项目 .gitmodules 文件中删除相关的子模块部分(即删除问题子模块的列表)。
- 执行 .git 模块更改
git add .gitmodules
- 从超级项目中删除相关的 sunmodule 部分。git/config。
- 运行
git rm --cached -rf PATH_TO_SUBMODULE
其中PATH_TO_SUBMODULE
是子模块文件夹的实际路径。 - 运行
rm -rf .git/modules/PATH_TO_SUBMODULE
. - 提交
git commit -m "Removed submodule commit message"
。 - 删除现在未跟踪的子模块文件:
rm -rf PATH_TO_SUBMODULE
git submodule add <URL>
- 测试以查看在超级项目中提交时子模块中的更改(fwiw,修改两个文件)是否作为单个对象处理。
- 成功了吗?删除子模块项目的安全副本。