不,git客户端和服务器会协商一个变更对象列表,只传输这些内容。只有在使用“dumb” HTTP服务器时,才会传输比客户端所需更多的对象,并获取包含这些对象的完整数据包。如果你想了解更多技术细节和术语,可以查看http://book.git-scm.com/7_transfer_protocols.html上的内容。
"Push" 是 Git 同步代码库的方式,即将本地代码库与远程服务器上的代码库同步。当您提交更改时,代码库会发生“更新”(实际上是在“添加”时,但这已经深入到不必要的领域了)。当您提交时,Git 只是存储关于自上次提交以来所做更改的增量信息(它不会“复制”文件)。但该提交仅存在于您的本地机器上,直到您进行推送。当您进行推送时,Git 会将您在本地代码库中所做的更新与远程服务器上的代码库同步。《Pro Git》是一本易读且很棒的书籍,它会很好地解释这些内容:http://progit.org/book/。