【问题标题】:why does Git send whole repository each time push origin master为什么 Git 每次推送源主机时都会发送整个存储库
【发布时间】:2024-01-19 07:54:01
【问题描述】:

我在本地提交了一些更改,然后使用“git push origin master”推送到 github。它总是推送完整的代码库(根据传输的数据量判断)。

我一定是遗漏了一些简单的东西..应该只推送更改的文件..?

【问题讨论】:

    标签: git git-svn


    【解决方案1】:

    这对我来说也是个谜。我的同事发现创建跟踪分支有帮助:

    http://www.zorched.net/2008/04/14/start-a-new-branch-on-your-remote-git-repository/

    编辑我发现当我在创建远程分支之前不拉动时会发生这种情况。如果我先拉,它几乎不会发送任何东西。

    【讨论】:

      【解决方案2】:

      如果您正在查看 Git 发送到远程的“对象”的数量,那么这可能会误导您。 Git 不仅为提交中的每个文件创建对象,还为每个目录(树)、每个提交和每个标签创建一个对象。如果您正在执行诸如合并之类的操作,您的提交也可能比您预期的要多。

      您的存储库有多大?你看什么数字来判断数据量?

      【讨论】:

        【解决方案3】:

        Git 版本化整个文件树,每个提交都指向树的完整快照。然后 Git 依靠压缩来减小存储库的大小。所以推送时需要传输的数据是这些快照,而不是差异。实际上,Git 询问服务器它的最新提交是什么,然后发送该分支中基于此构建的所有本地提交。对象在传输时可能会被压缩,但它们仍然是快照。

        这至少是我的理解。

        【讨论】:

          【解决方案4】:

          这可能是一个微不足道的答案,但我认为我一直犯的错误是“git add”。在提交更改之前。

          如果我“git add filename”然后在我“git push origin master”时提交,只有这个文件被传输到github。

          【讨论】:

          • git add 用于已在存储库中且未更改的文件是无害的——Git 会识别这一点,但实际上不会做任何事情。但是,如果您有任何与git add . 一起添加的其他 文件(例如编译的.obj 文件),那么这肯定可以解释您所看到的行为。养成经常发送git status 的习惯是个好主意,以确保您对更改内容的想法与 Git 的想法真正匹配。
          最近更新 更多