找到推动的大小

10 git

我有一系列的提交,我想要推送到我的远程存储库,但我正在使用数据上限的互联网连接,我想知道提交有多大,以决定是现在还是以后推送它当我与更大的数据上限连接时.

当你处于中间位置时,你可以看到推动有多大,但有没有办法弄清楚实际推动之前有多大?

Bla*_*way 11

有点可能.通过bash,假设origin/master是你的目标分支:

$ echo $(git merge-base HEAD origin/master)..HEAD | git pack-objects --revs --thin --stdout --all-progress-implied > packfile
Run Code Online (Sandbox Code Playgroud)

检查结果的大小packfile将使您了解需要发送多少数据才能使遥控器保持最新状态.

当我试图弄清楚我的上传包大小时,我从一个较旧的答案中采用了这种方法.这有点像黑客,因为你需要生成一个packfile- 理论上,一旦你知道本地和远程改变的提交范围,你可以只询问git这些对象的名称(一个递归问题,因为对象可能参考其他对象)并计算这些对象的大小.

(然后,生成包文件也会打包这些对象 - 就像那样git push- 所以大小更能代表发送的内容.)

如果你有其他开发人员在你希望推动的分支上工作,那么任何估计都没有实际意义,因为你可能必须git fetch在推送到遥控器之前运行,这意味着传输未知数量的数据!