克隆/仅读取Git存储库的历史记录/日志

18

在本地克隆的 Git 存储库中,我可以使用以下命令查看历史记录:

git log

在一个小工具中,我只需要知道一个仓库的历史记录,而不需要代码。 有没有一种方法可以克隆一个仓库但只获取历史记录(不包括代码)?
还有其他方法可以从Git仓库中仅获取历史记录吗?
3个回答

18

使用--bare标志克隆代码库:

git clone --bare ...
Git中的"裸"存储库仅包含版本控制信息,没有工作文件(没有树形目录结构),也不包含特殊的.git子目录。相反,它直接包含了.git子目录的所有内容在主目录中。有关更多信息,请参阅文档,或者这个关于使用该选项设置服务器环境的有用页面

3
这个方法不起作用,克隆对象仍在请求并接收数据。 - Andry
@Andry 这与问题有什么关系,为什么你想让Git不传输对象?Git将所有信息存储在文件系统中(请参见https://git-scm.com/book/en/v2/Git-Internals-Git-Objects),但使用“--bare”标志时,它不会检出工作副本文件。尽管如此,它仍然必须管理版本信息等,并将其存储为“对象”。 - CodeManX
1
@CoDEmanX 这与标题中的问题有关。因为用户并不总是需要对象来读取/获取历史记录。而且使用 --bare 标志几乎会产生相同数量的网络流量。实际上,不需要对象来获取历史记录。 - Andry
2
@Andry OP 没有要求节省网络流量。此外,提交信息存储在提交对象中,文件名则是使用树对象跟踪的(git log --name-only会列出文件名)。如果没有破坏文件系统数据库甚至可能没有内置的方法来抑制内容对象。您可以尝试使用 --reference 或其他高级选项来减少网络流量,但最好的选择可能是使用带有 Web UI 的 Git 服务器(可以是 GitHub),这样您可以查看历史记录而无需将任何内容克隆到本地计算机上。 - CodeManX
2
@CoDEmanX 请求仅自动记录历史/日志意味着显著减少流量。不需要发送文件名或提交对象到网络上,就可以查看一组带有时间戳或其他内容的提交日志条目。 - Andry
显示剩余2条评论

3

在克隆时结合--bare--filter=blob:none选项可以获得完整的日志,同时省略对象,从而最小化提交历史记录所占用的空间:

git clone --bare --filter=blob:none ...

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接