如何查找所有版本中对特定内核模块所做的更改

如何查找所有版本中对特定内核模块所做的更改

我需要访问 /fs/ 下从 3.10 到 5.3 的所有过去版本的 read_write.c 的源代码。

到目前为止我必须经历https://elixir.bootlin.com/重复并查看每个有 read_write.c 更改的版本。我不想下载整个完整的内核集合 3.10 到 5.3。不过,我也希望看到小版本中的差异。无论如何,我是否可以下载任何给定版本的模块的特定源代码(如果我需要手动执行也没关系,我总是可以使用 diff 并定位更改发生的时间。)或查看模块的版本历史记录贯穿所有版本,包括次要版本。

答案1

因为 git 不存储单个文件的历史记录,所以没有直接的方法来下载单个文件的历史记录(仅使用 git)。有一些 Web 服务可以向您显示影响单个文件的所有提交,甚至在大型存储库(例如内核)上也是如此;例如,GitHub 上的提交列表fs/read_write.c

如果您只想拥有 的本地历史记录fs/read_write.c,这里有一种方法,尽管它仍然涉及(暂时)下载完整的内核存储库(现在超过千兆字节):

mkdir ~/linux-fs-read_write
cd !$
git init
git config core.sparseCheckout true
echo fs/read_write.c > .git/info/sparse-checkout
git remote add origin https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
git fetch origin master
git checkout !$
git filter-repo --path=fs/read_write.c --force

最后一步使用git-filter-repo并生成一个 130MiB 的树,仅包含fs/read_write.c和 其历史记录(自 2.6.12-rc2 起)。

考虑到您尝试执行此操作的上下文,仅让提交接触特定文件有一个缺点:将每个更改与给定的发布标记联系起来变得很困难。

相关内容