为什么Git每次推送源主机都会发送整个存储库

时间:2009-09-04 20:31:52

标签: git git-svn

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

我必须错过一些简单的东西..应该只推高已更改的文件..?

4 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

如果您正在查看Git发送到遥控器的“对象”数量,那么这可能会误导您。 Git不仅为您的提交中的每个文件创建一个对象,还为每个目录(树),每个提交和每个标记创建一个对象。如果您正在进行合并等操作,则可能会提交比您预期更多的提交。

您的存储库有多大?你想看多少数字判断数据量?

答案 2 :(得分:1)

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

这至少是我的理解。

答案 3 :(得分:0)

这可能是一个微不足道的答案,但我认为我所犯的错误是“git add”。因为改变了。

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