为什么文件夹重命名、git推送到新的远程分支速度慢

为什么文件夹重命名、git推送到新的远程分支速度慢,git,rename,git-push,Git,Rename,Git Push,我只是 创建了一个新分支 通过重命名顶部文件夹重命名了存储库中的几乎所有文件 将分支作为新分支推到上游 我明白了 Writing objects: 26% (3337/12428), 270.49 MiB | 779.00 KiB/s 这需要很长时间 出于兴趣,为什么需要编写这些对象?我原以为git会向上游发送一个“重命名”命令 它不应该(慢),至少不应该,除非你正在用浅存储库做一些棘手的事情,或者使用哑协议。但是,没有向上游发送“重命名”操作 在内部,Git将所有内容存储为四种Git

我只是

  • 创建了一个新分支
  • 通过重命名顶部文件夹重命名了存储库中的几乎所有文件
  • 将分支作为新分支推到上游
我明白了

Writing objects:  26% (3337/12428), 270.49 MiB | 779.00 KiB/s 
这需要很长时间

出于兴趣,为什么需要编写这些对象?我原以为git会向上游发送一个“重命名”命令

它不应该(慢),至少不应该,除非你正在用浅存储库做一些棘手的事情,或者使用哑协议。但是,没有向上游发送“重命名”操作

在内部,Git将所有内容存储为四种Git对象类型之一:提交、树、Blob(文件)和(带注释的)标记

提交对象通常非常小。下面是一个真实提交对象的示例,来自Git本身的源代码:

$ git cat-file -p HEAD | sed 's/@/ /'
tree 6fe777d97b5a6fb3176d47c5ccda454deb69a8f6
parent cc00d9cfffbbeb34ee23731668656b2ebc165c85
author Junio C Hamano <gitster pobox.com> 1461960207 -0700
committer Junio C Hamano <gitster pobox.com> 1461964869 -0700

Eighth batch for 2.9

Signed-off-by: Junio C Hamano <gitster pobox.com>
如果我要重命名
复制
文档
,我将获得一个新的树对象(具有不同的ID),但是
.gittributes
.gitignore
等的现有blob对象都将保持不变。
文档中的子树和blob也是如此。根据您重命名的特定目录,可以预期Git需要一个或多个新的“树”对象与(一个)新的“提交”对象一起使用。这些物体都不应该很大

通过任何合理的智能协议,后续的
git推送
,应该:

  • 发现它只需要发送一个新的提交对象,不管有多少个树对象
  • 针对您的Git知道(由于共享哈希值)存在于远程Git上的对象压缩这些对象(在“写入对象”之前,有一个交换阶段,他们的Git会告诉您他们拥有什么)
  • 编写一个“瘦包”,只发送两个或五个或任意多的对象,这需要几千字节和毫秒

然后进行传输阶段。(然后,远程服务器必须“修复”精简包,这可能需要一些时间,并在发送确认或失败响应之前验证是否允许推送,如果允许,则更新远程存储库。)

文件内容是否也发生了更改(根本没有)?否,除非我的gitconfig中有更改?是否执行“新建分支”你是说孤枝?如果是这样,git不会检测到公共内容。我做了git checkout master,然后在PHPStorm中创建了一个新分支。大概是git签出-b是孤立的吗?你确定原来的分支已经被推了吗?
$ git cat-file -p 'HEAD^{tree}'
100644 blob 5e98806c6cc246acef5f539ae191710a0c06ad3f    .gitattributes
100644 blob 05cb58a3d4ef47295fa8ef02add44a0f0dd90d1f    .gitignore
100644 blob e5b4126bec557db55924b7b60ed70349626ea2c4    .mailmap
100644 blob 78e433ba718df00d112a5f57d523afb8db189c79    .travis.yml
100644 blob 536e55524db72bd2acf175208aef4f3dfc148d42    COPYING
040000 tree 1771d89504a0003add17bffd2170f39490bad1ff    Documentation