我想得到一些Qt模块的源代码。我不需要更改历史和大多数Qt子模块,所以我决定克隆Qt Git repo并初始化和更新一些模块:
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
然而,当我试图运行上面的代码时,它给出了以下错误:
fatal: The remote end hung up unexpectedly
Fetched in submodule path 'qtbase', but it did not contain 6c6ace9d23f90845fd424e474d38fe30f070775e. Direct fetching of that commit failed.
如果我尝试初始化并更新所有子模块,它可以工作:
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的源代码,包括一些没有版本历史的子模块?
发布于 2018-12-16 22:07:28
我在Ubuntu 18.04的最新完整版本中做了类似的事情。为此,我将ver
设置为等于一个git ls-remote
,它会筛选出整数个版本,然后升序排序并获取最后一个版本。在撰写本文时,结果是5.12.1
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
的那些。我将根据列表中定义的分支版本,对每个列表执行浅层克隆。
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
对我来说,最终目标是进行静态构建,所以我只需注意我使用的选项:
./configure -prefix $PWD/qtbase -static -confirm-license -opensource -ltcg -optimize-size -ccache -no-pch -skip webengine -nomake tests -nomake examples
https://stackoverflow.com/questions/50822217
复制相似问题