【问题标题】:Browse disk usage of git staging area浏览 git 暂存区的磁盘使用情况
【发布时间】:2017-04-10 11:26:25
【问题描述】:

我想在git 中对我的主目录进行版本控制。

我使用ncdu 来查找最大的子目录,并从那里构建了一个.gitignore,我希望它不包括我的主目录中最大和最无用的部分(例如.gem/.cache/、@ 987654326@, tmp/)。

执行git add $HOME 后,我如何浏览索引/缓存/暂存区的磁盘使用情况?

理想情况下,我追求的是像ncdu 这样的交互式内容,我可以在其中深入了解子目录。

【问题讨论】:

  • 您是对存储库的大小感兴趣,还是专门询问暂存区(又名“索引”)?还是上次提交的更改大小?
  • 索引的大小。想象一下,我刚刚完成了git init; git add $HOME,我想像ncdu 一样查看索引/缓存/暂存区域中的内容。
  • 如果您要这样做,请特别确保排除 .ssh 之类的目录,或者对您的权限一丝不苟... @ 反而。另外,不要使用您的 ssh 密钥推送到您不信任的任何地方!
  • 索引本身是stat数据的缓存加上一些特定于Git的数据,包括现在已经添加到存储库中的每个“blob”的哈希ID。您可以检查对象的大小,但即使这样也可能不是非常有用,因为您无法确定共享对象的次数,也不知道对象在打包后将如何缩小。

标签: git


【解决方案1】:

将数据存储在 git-dir 中。

默认 git 存储数据在文件夹 .git (git-dir) 中。

您创建的最新存储存储在 refs/stash 中;较旧的藏匿处 可以在此参考的 reflog 中找到,并且可以使用 常用的 reflog 语法(例如 stash@{0} 是最近创建的 stash, stash@{1} 是它之前的那个, stash@{2.hours.ago} 也是 可能)。

【讨论】:

  • 这不会是新.git 位置中的一堆sha 校验和吗?我如何将其作为目录树浏览?
【解决方案2】:

索引本身的大小无关紧要,因为我在“What does the git index contain EXACTLY?”中详细说明:

从某种意义上说,状态是“虚拟的”,它不一定必须而且通常不会匹配工作树中的文件。

您可以做的是...提交(您可以随时git reset @~ 取消提交并稍后重做)

那么,如“git find fat commit”中所述:

git diff-tree -r -c -M -C --no-commit-id @     # get new blobs for HEAD commit
git cat-file --batch-check << blob ids         # get size of each blob

这将使用git cat-file bach output 打印有关它们的信息,包括objectsize:disk
如果不指定格式,则默认格式为%(objectname) %(objecttype) %(objectsize)

【讨论】:

    猜你喜欢
    • 2018-06-30
    • 2016-05-28
    • 1970-01-01
    • 1970-01-01
    • 2020-06-08
    • 2013-05-18
    • 1970-01-01
    • 2015-11-11
    • 1970-01-01
    相关资源
    最近更新 更多