知道数字代表的文件

时间:2016-06-27 17:00:32

标签: git github

推送提交时,我会读到这个警告:

remote: warning: File cbbf81da77a68297dcb6870025c5bb661c63e226 is 63.25 MB; this is larger than GitHub's recommended maximum file size of 50.00 MB

但我不知道这个号码指向的文件是什么。

我已经尝试https://github.com/iluaepidi/widget/blob/cbbf81da77a68297dcb6870025c5bb661c63e226但没有成功。

我怎么知道它是什么文件?

(注意:我已经尝试find -size并且没有工作)

2 个答案:

答案 0 :(得分:2)

您是否尝试过git show <sha>让git向您展示文件?

您还可以执行git ls-tree -r HEAD | grep <sha>

答案 1 :(得分:1)

this answer中所述,您可以尝试

git rev-list --objects --all | grep cbbf81da77a68297dcb6870025c5bb661c63e226

没有文件名的直接映射=&gt; Git中的对象SHA,因为多个树(以及多个提交)可以在多个位置引用同一个对象。上面的命令将显示指向该对象的所有文件名。如果没有结果,你可能会认为它是树或提交,或者它未使用。

要检查的两个命令是查看它是什么类型:

git cat-file -t cbbf81da77a68297dcb6870025c5bb661c63e226

如果它指定treecommit,那么某些东西可能非常腐败。否则,如果它指定blob或错误输出,您可能只是垃圾收集您的存储库以摆脱它。

git gc --prune

如果仍然不起作用,并且您不介意冒着损坏存储库的风险(进行备份!),那么您可以手动删除该对象。

对象存储在查找层次结构中,这意味着在.git/objects中存在以十六进制格式对应于对象SHA的第一个字节的目录,并且目录的内容是由其SHA命名的目标文件 sans 第一个字节。

因此,在您的情况下,您将删除以下内容:

rm .git/objects/cb/bf81da77a68297dcb6870025c5bb661c63e226

虽然如果你到了这一点,但它高度表示其他错误。

如果您确定违规对象是一个文件,并且该文件位于历史记录中的某个位置,那么您可能会处于还原状态,或者更糟糕的是,这可能是一个令人讨厌的变种。

您必须找到引入该文件的提交,然后运行以下命令的一个

  • 如果文件是自己在自己的提交中引入的:

    git revert <COMMIT>
    
  • 如果文件是与其他更改一起引入的,请在违规提交之前找到提交

    git rebase -i <PRIOR COMMIT>
    

    然后导航到违规提交行并将pick替换为edit,然后编写(保存)并退出编辑器。然后Git将进入rebase模式并检查该特定提交,此时您可以删除有问题的文件。

    删除后,请运行以下命令:

    git add -A
    git commit --amend
    git rebase --continue
    

    如果Git成功完成,那么你很高兴。否则,您可能必须在初始引入文件和HEAD之间编辑一些提交,以便从修改该文件的所有提交中删除该文件。