首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >带有一些子模块的Git浅克隆

带有一些子模块的Git浅克隆
EN

Stack Overflow用户
提问于 2018-06-13 00:59:06
回答 1查看 949关注 0票数 0

我想得到一些Qt模块的源代码。我不需要更改历史和大多数Qt子模块,所以我决定克隆Qt Git repo并初始化和更新一些模块:

代码语言:javascript
复制
git clone --branch v5.10.1 --depth 1 git://code.qt.io/qt/qt5.git source
cd source
git submodule update --init --depth 1 qtbase qtlocation

然而,当我试图运行上面的代码时,它给出了以下错误:

代码语言:javascript
复制
fatal: The remote end hung up unexpectedly
Fetched in submodule path 'qtbase', but it did not contain 6c6ace9d23f90845fd424e474d38fe30f070775e. Direct fetching of that commit failed.

如果我尝试初始化并更新所有子模块,它可以工作:

代码语言:javascript
复制
git clone --branch v5.10.1 --depth 1 git://code.qt.io/qt/qt5.git source
cd source
git submodule update --init --depth 1

我怎样才能得到git repo的源代码,包括一些没有版本历史的子模块?

EN

回答 1

Stack Overflow用户

发布于 2018-12-16 22:07:28

我在Ubuntu 18.04的最新完整版本中做了类似的事情。为此,我将ver设置为等于一个git ls-remote,它会筛选出整数个版本,然后升序排序并获取最后一个版本。在撰写本文时,结果是5.12.1

代码语言:javascript
复制
ver="$(git ls-remote --heads https://code.qt.io/qt/qt5.git | grep -Pio '(?<=refs/heads/)[\d\.]+' | sort -V | tail -1)" ; git clone --depth 1 --branch $ver https://code.qt.io/qt/qt5.git

这个有点复杂。首先,我们将重点关注.gitmodules中列出的模块组essential addon preview deprecated。从那里,我将返回到每个的标题,并过滤掉不包含qtweb qtwin qtmac qtandroid qtpurch的那些。我将根据列表中定义的分支版本,对每个列表执行浅层克隆。

代码语言:javascript
复制
for value in $(grep -B10 -Pi 'status = (essential|addon|preview|deprecated)' .gitmodules | grep -Pio '(?<=\[submodule \")(?!qt(web|win|mac|android|purch)).*(?=\"\])' | sort); do git clone --depth 1 --branch $(grep -A6 -Pi "(?<=\[submodule \")$value(?=\"\])" .gitmodules | grep -Pio '(?<=\tbranch = ).*') https://code.qt.io/qt/"$value".git ; done

对我来说,最终目标是进行静态构建,所以我只需注意我使用的选项:

代码语言:javascript
复制
./configure -prefix $PWD/qtbase -static -confirm-license -opensource -ltcg -optimize-size -ccache -no-pch -skip webengine -nomake tests -nomake examples
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50822217

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档