从 git 仓库中只获取一个子模块

Get only a submodule from a git repo

我想知道是否有办法只从 git 存储库访问子模块目录,而无需完全克隆 git 存储库甚至使用 git init,如果可能的话。我只需要子模块。

例如;

我只想从此 git 存储库 git://git.linphone.org/linphone-android.git 中获取子模块,其中包含一组编解码器。

如果有人能帮我解决这个问题,我将不胜感激,谢谢。

基本上没有。

当您获得 git 存储库时,您就拥有了一切。 原因是 git 看不到单个文件或文件夹,它会看到整个上下文。

但是您可以选择将 "modules" 作为独立的 git 存储库。然后您可以只克隆该特定模块的存储库。并用git submodule.

管理这些子模块

很多年前,Linus 先生在 Google 上讲 Git 时,他回答了这个问题,从这个 link 的 43 分 11 秒开始: https://www.youtube.com/watch?v=4XpnKHJAok8

您可以使用git sub-module update --remotegit sub-module update --remote --merge合并所有子模块。

Foreach 命令将在每个子模块上执行任务 git submodule foreach 'git stash'

这两个都会更新所有子模块。我认为只更新一个模块的最好方法是将其删除并重新添加该特定模块

$ git rm -r YourLibrary $ git submodule add https://github.com/username/YourLibrary

https://git-scm.com/book/en/v2/Git-Tools-Submodules

基本上是的。

正如 CoryKramer 在对您的问题的评论中指出的那样,您可以从 the .gitmodules file.

中获取当前活动的子模块列表

由于您直接从 github 获取该文件(使用 https://raw.githubusercontent.com/BelledonneCommunications/linphone-android/master/.gitmodules),因此您可以轻松地将其输入到将检查各个模块的脚本中:

curl https://raw.githubusercontent.com/BelledonneCommunications/linphone-android/master/.gitmodules |
awk ' == "url" {print }' |
xargs -n1 git clone

如果不克隆父存储库,您将无法确定每个子模块中使用的特定 commit,但是如果您只需要每个项目的 HEAD,那么您应该一切就绪。

此解决方案显然仅适用于以无需克隆整个存储库即可访问单个文件的方式托管的存储库。因此,它非常适合 github 托管存储库,但它不是通用的 "git" 解决方案。