显示git';提交前压缩的提交大小
动机:我花了相当多的时间跳转,以保持我的git存储库干净小巧。这意味着避免使用二进制文件和图像,更喜欢下载/生成脚本而不是原始数据,等等。在应用提交之前,有一个工具可以帮助我了解提交的实际影响,这对我来说非常有用 我的问题有两个部分:规模和整合显示git';提交前压缩的提交大小,git,Git,动机:我花了相当多的时间跳转,以保持我的git存储库干净小巧。这意味着避免使用二进制文件和图像,更喜欢下载/生成脚本而不是原始数据,等等。在应用提交之前,有一个工具可以帮助我了解提交的实际影响,这对我来说非常有用 我的问题有两个部分:规模和整合 大小:在提交git之前,如何确定git提交的影响?我已经找到了一些解决“尺寸”问题的方法,但这些方法并没有真正回答我的问题 -最重要的答案不是提供实际的命令或脚本,而是关注网络带宽。第二个解决方案不起作用 -已接受答案中链接的脚本只查看新文件。如果我修改
S1
,在我添加、提交和推送之后,我如何在添加、提交和推送之前计算出X=S2-S1
git status
,都能向我显示这个提交大小X
。例如(见“影响”):
git隐藏
git隐藏流行音乐--索引
git状态
。如果使用编程语言,则可以将git status
(在Java中,ProcessBuilder.getInputStream()
)的输出转换为字符串,然后使用步骤4中的数据将字符串格式化为所需的格式要获得压缩大小,看起来更简单、更可靠的方法是只检查服务器大小,
git push
,再次检查服务器大小,然后git reset--soft HEAD~
。如果您使用的是Github,那么可以通过API获得大小。例如,根据我对Git工作原理的了解,我不相信这个问题是可以解决的。“实际影响”取决于太多的因素。Git的压缩并不能仅从相邻的历史记录中找到重复项。请查看Git重新打包--help
。大小的最终结果取决于传递给它的选项,以及存储库本身中的对象。在提交时,无法预测命令将如何在远程设备上运行以及远程设备有哪些对象可用于增量压缩。如果你想要的只是一个粗略的估计,我想你可以在做出承诺后重新打包。这是一个聪明的主意。谢谢这有点不太理想,因为它会改变暂存文件以及递归读取造成的时间复杂性。不过,如果没有更直接的可用文件,我可能会继续这样做。git stash pop--index
将重新暂存以前暂存的文件。编辑并在步骤5中添加,以完全实现您想要的。递归并不意味着它很慢,它只是简单地搜索嵌套很深的文件夹。您也可以使用循环——尽管在算法方面稍微复杂一些。您也应该忽略.git文件夹。计算总文件大小需要不到1ms的时间。这与Git存储的压缩大小有什么关系?@Andrew C如果你读到这个问题,他实际上不是在谈论.Git中的内容,他只想知道一个新的提交将向他的远程设备添加多少字节。您推送到远程设备的唯一内容是在.git目录中。您所说的是工作目录的未压缩大小,他在问题中没有提到。
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
Impact: 1234 bytes
(use "git reset HEAD ..." to unstage)
new file: new_file_1.png
new file: new_file_2.sh
new file: new_file_3.cpp