能否将子模块文件夹中的文件添加到父GIT仓库中?

7

我有一个GIT仓库: my_git_repo 我添加了一个子模块: my_git_repo\submodule 目前为止一切正常:

是否可以在子模块中添加文件(并进行更改),但仍然在父“my_git_repo”仓库中保持跟踪?

我想要的是能够更新子模块,同时仍然对其进行一些更改和添加。

有任何想法或建议吗?还有其他的好方法吗?


我想能够向子模块添加子文件夹,并在父存储库中跟踪该子文件夹,而不修改子模块存储库。我的具体用例是带有库源代码的第三方子模块。我想构建库并将 submodule/lib 文件夹存储在父存储库中,同时在子存储库中忽略它。但很确定这是不支持的。 - yoyo
1个回答

2
“是否可以在子模块中添加文件(并进行更改),但仍然在父级“my_git_repo”存储库中跟踪?”

是的,但对于您在子模块中进行的每个新提交,您都需要:

  • 将这些提交推送到该子模块的上游存储库(此子模块的克隆存储库)
  • 返回到父存储库,git addgit commit(因为gitlink已更改,{{link2:gitlink是索引中记录子模块存储库SHA1的特殊条目}})。

第二步不必针对子模块中的每个提交都执行,但最终必须执行此操作,以记录子模块的下一个稳定状态。


如果子模块是一个公共仓库,那么你需要 fork 它(GitHubBitBucket),并修改它的远程 'origin':
cd /path/to/submodule
git remote rename origin upstream
git remote add origin /url/of/the/fork

然后您可以将更改推送到子模块存储库。
要使用来自原始存储库(您已经派生的)的新提交更新子模块存储库,请参见“从原始 Github 存储库拉取新更新到派生的 Github 存储库”。

enter image description here


但是我不管理“子模块”存储库。它是一个公共存储库。因此,我无法推送它。 - KammutierSpule
@KammutierSpule 但你可以fork它,然后你就可以push了。我已经编辑了我的答案来描述这个过程。 - VonC
@VonC 但是如果他 fork 它,那么它将成为一个独立的仓库,他需要手动处理从官方仓库到 forked 仓库的更新。 - Michael A.
@MichaelA. 同意:我刚在 https://dev59.com/-63la4cB1Zd3GeqPJTgv#51562274 中进行了说明。 - VonC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接