如何从linux内核克隆模块?

时间:2015-02-09 05:47:57

标签: linux git github

如果我只想关注linux的模块,例如perf,我该如何从github分叉或下载perf模块相关文件?我尝试了以下命令:

c:\work> git clone https://github.com/torvalds/linux/tree/master/tools/perf
Cloning into 'perf'...
fatal: repository 'https://github.com/torvalds/linux/tree/master/tools/perf/' not found

但它无法奏效。

2 个答案:

答案 0 :(得分:3)

您需要结合使用Git的两个相对较新的功能。

第一个是稀疏结账(自Git 1.7.0起可用)。稀疏检查允许您通过明确指定要在回购中拥有哪些目录来保持工作区清洁。但是它不会影响整个存储库的大小,并且下载1GB的所有Linux内核源代表性的痛苦。这就是你需要第二个功能的原因:

第二个功能是浅层克隆(自Git 1.9.0起可用)。它允许您使用--depth参数从历史记录中提取仅保留历史记录中的 n 变更集。

因此,如果您只想获得tools/perf模块,那么就可以了:

git init
git remote add origin https://github.com/torvalds/linux.git
git config core.sparsecheckout true
echo "tools/perf" >> .git/info/sparse-checkout
git pull --depth=1 origin master

瞧!您的仓库中唯一的目录是tools/perf,您只需下载136MB。

答案 1 :(得分:1)

添加到Luboš的答案中,因为我也只需要perf,但是需要特定的标记版本。标签不会出现在浅表克隆中。因此,您需要完全按照标记的版本签出仓库。

替换

git pull --depth=1 origin master

使用

git fetch --depth=1 origin v4.19
git checkout FETCH_HEAD

如果您想要的版本是4.19。

如果您想实际构建该特定的perf版本,则需要更多文件夹:

git init
git remote add origin https://github.com/torvalds/linux.git
git config core.sparsecheckout true
echo "tools/perf" >> .git/info/sparse-checkout
echo "tools/scripts" >> .git/info/sparse-checkout
echo "tools/build" >> .git/info/sparse-checkout
echo "tools/include" >> .git/info/sparse-checkout
echo "tools/include" >> .git/info/sparse-checkout
echo "tools/arch" >> .git/info/sparse-checkout
echo "tools/lib" >> .git/info/sparse-checkout
git fetch --depth=1 origin v4.19
git checkout FETCH_HEAD
make -C tools/perf

现在(如果已安装所有依赖项):

$ ./tools/perf/perf --version
perf version 4.19.g84df